w Eclipse jest `` Zapisz akcję '', która automatycznie zamieni statyczny dostęp do elementów członkowskich za pośrednictwem zmiennych instancji na statyczny dostęp za pośrednictwem nazwy klasy - włącz tę akcję zapisywania i tyle innych akcji zapisywania, z którymi się zgadzasz (np. usuń niepotrzebne rzutowania, niepotrzebne „to” itp.).
les2
Odpowiedzi:
135
Jest tylko jedna metoda, a nie dwie, i jest ona statyczna. Chociaż możesz wywołać metodę statyczną za pośrednictwem odwołania do instancji, nie jest to dobry styl. Wskazuje, że programista myśli, że wywołuje metodę instancji. Zdezorientowany programista może pomyśleć, że może spowodować, że inny wątek (nie bieżący) będzie spał w ten sposób, podczas gdy tak nie jest.
Obie linie kodu robią to samo, ale druga to lepszy styl.
+1 do wzmianki, że programista może chcieć uśpić określony wątek przez someThread.sleep (), czego nie robi.
Chii
32
W Javie sen jest metodą statyczną. Oba twoje przykłady robią dokładnie to samo, ale poprzednia wersja jest myląca, ponieważ wygląda na to, że wywołuje metodę na określonym obiekcie, ale w ogóle tego nie robi. W twoim przykładzie nie będzie to miało większego znaczenia, ale jest bardziej niebezpieczne, jeśli masz:
someOtherThread.sleep(x);
Tym razem wygląda na to, że każesz spać inny wątek, ale w rzeczywistości uśpisz bieżący wątek. Sposobem na uniknięcie popełnienia tego typu błędu jest zawsze wywoływanie metod statycznych przy użyciu klasy, a nie określonego obiektu.
Czy masz na myśli, że zarówno currentThread, jak i someOtherThread przejdą w stan uśpienia podczas wykonywania tej pojedynczej linii "someOtherThread.sleep (x);" ??
Kanagavelu Sugumar
3
Nie. Bieżący wątek przejdzie w stan uśpienia, niezależnie od wywołania obiektu Thread .sleep. Nie możesz uśpić innych ThreadS (w ten sposób).
Torque
3
Te dwa wywołania metod zachowują się identycznie, ponieważ wywołują tę samą metodę, ale użycie nazwy klasy ( w tym przypadku Thread ) zamiast wystąpienia w celu uzyskania dostępu do pól i metod statycznych sprawia, że ta statyczność jest jasna. Dlatego pojawia się to ostrzeżenie.
Biorąc jednak pod uwagę, że statyczne pola i metody są wyświetlane w określony sposób w większości IDE (na przykład kursywą w Eclipse i IntelliJ IDEA), czy to ostrzeżenie jest nadal konieczne? Może nie tak bardzo potrzebne, jak we wczesnych latach Java, kiedy używano prostych edytorów.
Thread.currentThread().sleep(x);lub sposób, w jaki Eclipse mówi, że Thread.sleep(x);kontekst statyczny jest wymagany, jeśli jest w potrzebie, więc wstrzymujemy się z niewielkim opóźnieniem w tym śnie.
Paradygmat statyczny ustawiony przez jeden obiekt, wpływa tylko na ten konkretny cykl życia sterty obiektu, ponownie biorąc pod uwagę, że ogólny statyczny cykl życia obiektu nie jest tak uciążliwy, w razie potrzeby można go użyć do ułatwienia kodowania, ale należy go wykonać ostrożnie jako statyczny stop- print jest określany przez Class(na przykład: - Class.forName(pkg.className)) jak z nazwy, a nie przez jakąkolwiek objectkopię klasy Class w HEAPpamięci.
Ponownie użycie obiektu ma również wady i zalety w postaci słabych, fantomowych, mocnych odniesień ....,
Kod jest zagmatwany przez naturę. To po prostu sposób, w jaki robimy, aby działał i działał.
Mówiąc o wątku, - pojawia się asynchronicznie, chociaż możemy mieć synchroniczne rzeczy w wątkach. Z natury rzeczy wszystkie rzeczy są asynchroniczne, chociaż czasami znajdujemy rzeczy synchroniczne. Żadna z tych rzeczy nie jest synchroniczna, nawet jeśli ingerujemy w kwantę lub astronomię.
Odpowiedzi:
Jest tylko jedna metoda, a nie dwie, i jest ona statyczna. Chociaż możesz wywołać metodę statyczną za pośrednictwem odwołania do instancji, nie jest to dobry styl. Wskazuje, że programista myśli, że wywołuje metodę instancji. Zdezorientowany programista może pomyśleć, że może spowodować, że inny wątek (nie bieżący) będzie spał w ten sposób, podczas gdy tak nie jest.
Obie linie kodu robią to samo, ale druga to lepszy styl.
źródło
W Javie sen jest metodą statyczną. Oba twoje przykłady robią dokładnie to samo, ale poprzednia wersja jest myląca, ponieważ wygląda na to, że wywołuje metodę na określonym obiekcie, ale w ogóle tego nie robi. W twoim przykładzie nie będzie to miało większego znaczenia, ale jest bardziej niebezpieczne, jeśli masz:
Tym razem wygląda na to, że każesz spać inny wątek, ale w rzeczywistości uśpisz bieżący wątek. Sposobem na uniknięcie popełnienia tego typu błędu jest zawsze wywoływanie metod statycznych przy użyciu klasy, a nie określonego obiektu.
źródło
Te dwa wywołania metod zachowują się identycznie, ponieważ wywołują tę samą metodę, ale użycie nazwy klasy ( w tym przypadku Thread ) zamiast wystąpienia w celu uzyskania dostępu do pól i metod statycznych sprawia, że ta statyczność jest jasna. Dlatego pojawia się to ostrzeżenie.
Biorąc jednak pod uwagę, że statyczne pola i metody są wyświetlane w określony sposób w większości IDE (na przykład kursywą w Eclipse i IntelliJ IDEA), czy to ostrzeżenie jest nadal konieczne? Może nie tak bardzo potrzebne, jak we wczesnych latach Java, kiedy używano prostych edytorów.
źródło
Thread.currentThread().sleep(x);
lub sposób, w jaki Eclipse mówi, żeThread.sleep(x);
kontekst statyczny jest wymagany, jeśli jest w potrzebie, więc wstrzymujemy się z niewielkim opóźnieniem w tym śnie.Paradygmat statyczny ustawiony przez jeden obiekt, wpływa tylko na ten konkretny cykl życia sterty obiektu, ponownie biorąc pod uwagę, że ogólny statyczny cykl życia obiektu nie jest tak uciążliwy, w razie potrzeby można go użyć do ułatwienia kodowania, ale należy go wykonać ostrożnie jako statyczny stop- print jest określany przez
Class
(na przykład: -Class.forName(pkg.className)
) jak z nazwy, a nie przez jakąkolwiekobject
kopię klasy Class wHEAP
pamięci.Ponownie użycie obiektu ma również wady i zalety w postaci słabych, fantomowych, mocnych odniesień ....,
Kod jest zagmatwany przez naturę. To po prostu sposób, w jaki robimy, aby działał i działał.
źródło