
Omów elementy twierdzenia
public static void main(String args[])
.To jedno z najpopularniejszych pytań na rozmowie kwalifikacyjnej dla programisty dotyczących języka Java, otwierających dyskusję i dodatkowo jest to pytanie bardzo proste.
public
jest modyfikatorem dostępu. Używamy go do określenia dostępu do tej metody. Modyfikator tutaj jest "publiczny", więc każda klasa może mieć dostęp do tej metody.static
. To słowo kluczowe Java oznacza, że używamy tej metody bez tworzenia obiektu klasy.Void
to typ zwracany metody. Oznacza to, że metoda ta nie zwraca żadnej wartości.main
to nazwa metody. JVM traktuje tę nazwę jako punkt wejścia do aplikacji (musi mieć określony podpis).Main
jest metodą, w której następuje główne wykonanie.String args[]
. To jest parametr przekazywany do metody głównej. Tutaj mamy argumenty typu String, które nasza aplikacja Java akceptuje podczas uruchamiania. Możesz wprowadzić je w konsoli.
Jaka jest różnica pomiędzy
equals()
i==
?Po pierwsze,
==
jest operatorem, aequals()
to metoda. Używamy operatora==
do porównania referencji (lub porównania adresów), a metodyequals()
do porównania zawartości. Oznacza to, że==
sprawdza, czy oba obiekty wskazują na tę samą lokalizację w pamięci, podczas gdyequals()
porównuje wartości w obiektach.Czy możemy wykonać program bez metody
main()
?Wiele podstawowych pytań w rozmowach kwalifikacyjnych dotyczących języka Java jest naprawdę łatwych. Jak na przykład to. Więc, krótka odpowiedź brzmi: tak, możemy. Możemy to m.in. zrobić za pomocą statycznego bloku.
Możesz użyć bloku statycznego, aby zainicjować statyczny element z danymi. Jest on wykonywany przed metodą
main
, podczas ładowania klas.class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }
Drukowane będzie:
static block is invoked Now main method
Co jeśli w ogóle nie ma głównej metody? Jeśli spróbujesz uruchomić zwykłą klasę bez głównej metody, otrzymasz następujący błąd: Main method not found in class Test, please define the main method as: public static void main (String [] args) or a JavaFX application class must extend javafx.application.Application. Sam błąd mówi, że jeśli jest to aplikacja JavaFX i klasa jest dziedziczona z javafx.application.Application, to jest to możliwe.
Czym jest obiekt
immutable
? Czy można stworzyć obiektimmutable
?Nie można modyfikować obiektów klasy
immutable
po ich utworzeniu. Innymi słowy, kiedy już je stworzysz, nie możesz ich zmienić. Jeśli spróbujesz zmodyfikować obiektImmutable
, otrzymasz nowy obiekt (klon) i podmienisz ten klon podczas tworzenia.Dobrym przykładem jest
String
. W Javie jestimmutable
(niezmienny). Oznacza to, że nie możesz zmienić samego obiektu String, ale możesz zmienić odniesienie do obiektu.Ile obiektów jest tworzonych w poniższym kodzie?
Jest to pytanie techniczne dotyczące języka Java, które może zastąpić punkt 4, powyżej.
String s1="Hello"; String s2="Hello"; String s3="Hello";
Odpowiedź to "tylko jeden", ponieważ Java posiada String Pool. Kiedy tworzymy obiekt String za pomocą operatora new (), Java tworzy nowy obiekt w pamięci sterty. Jeśli użyjemy składni literału String, tak jak w naszym przykładzie powyżej, może ona zwrócić obiekt z puli String, jeżeli taki już istnieje.
Ile obiektów jest tworzonych w poniższym kodzie?
String s = new String("Hello");
Tu stworzono 2 obiekty. Jeden znajduje się w puli stałych typu String, a drugi w stercie.
Jaka jest różnica pomiędzy klasami
String
,StringBuilder
iStringBuffer
w Javie?To jedno z najczęściej zadawanych pytań podczas rozmów rekrutacyjnych dotyczących języka Java.
Po pierwsze,
String
to klasa niezmienna. Oznacza to, że nie możesz modyfikować jej zawartości po utworzeniu. AleStringBuffer
iStringBuilder
to klasy zmienne, więc masz możliwość zmodyfikować je później. Jeśli spróbujemy zmienić zawartość obiektuString
, JVM utworzy nowy ciąg pozostawiając oryginalny bez zmian. Dlatego wydajność jest lepsza w przypadkuStringBuffer
niż wString
.Główna różnica między
StringBuffer
iStringBuilder
polega na tym, że metodyStringBuffer
są synchronizowane, a metodyStringBuilder
nie.Czy jest jakaś różnica między obiektami typu
String
, gdy pierwszy utworzony został jako literał, a drugi za pomocą operatoranew()
?Jest Jeśli utworzymy String z operatorem
new()
, pojawi się on w stercie i nie zostanie dodany do puli String. Jeśli utworzymyString
jako literał, zostanie on utworzony w puli string, która istnieje w obszarze PermGen sterty.Czy można nadpisać metodę
private
lubstatic
w Javie?To dla początkujących programistów Java dość podstępne pytanie rekrutacyjne w Java. Tak na prawdę nie można nadpisać metody
private
lubstatic
w Javie.Nie można nadpisywać metod
private
, ponieważ zakres specyfikatora dostępu prywatnego ograniczony jest do klasy. Aby coś nadpisać, musimy mieć klasę podstawową i potomną. Jeśli metoda nadklasy jestprivate
, klasa potomna nie może jej używać, a metody z klasy podrzędnej będą traktowane jako nowe metody (a nie nadpisania).Metody
Static
również nie mogą być nadpisane, ponieważ metodystatic
są częścią samej klasy. Nie są częścią żadnego obiektu klasy. Oczywiście, możesz zadeklarować tę samą metodęstatic
z tym samym podpisem w klasach potomnych, lecz znowu będą one traktowane jako nowe metody.Jaka jest różnica pomiędzy klasą abstrakcyjną -
Abstract Class
, a interfejsem -Interface
To popularne pytanie na rozmowę kwalifikacyjną programisty Java, które opiera się na zasadach OOP. Przede wszystkim w Javie
interface
definiuje zachowanie, podczas gdyabstract class
tworzy hierarchię.Klasa abstrakcyjna Interfejs Możliwe jest posiadanie treści metody (metody nieabstrakcyjne) w klasie abstrakcyjnej Interfejs może mieć tylko metody abstrakcyjne. W Javie 8 i wydaniach nowszych, stało się możliwe definiowanie metod domyślnych i implementowanie ich bezpośrednio w interfejsie. Ponadto, zaczynjąc od Javy 8 interfejsy mogą mieć metody statyczne. Zmienne instancji mogą znajdować się w klasie abstrakcyjnej Interfejs nie może mieć zmiennych instancji. Dozwolone są konstruktory Interfejs nie może mieć żadnego konstruktora. Dozwolone są metody statyczne Metody statyczne są niedozwolone Klasa może mieć tylko jedną abstrakcyjną klasę macierzystą Jeden interfejs może być implementowany przez wiele klas Klasa abstrakcyjna może zapewnić implementację interfejsu. Interfejs nie może zapewnić implementacji klasy abstrakcyjnej. Klasa abstrakcyjna może rozszerzać inną klasę języka Java i implementować wiele interfejsów Javy. Interfejs może rozszerzać tylko inny interfejs Javy. Klasa abstrakcyjna Javy może zawierać prywatne i chronione elementy Elementy interfejsu Javy są domyślnie publiczne Czy możemy zadeklarować zmienne
static
i metody w klasieabstract
?Tak, można zadeklarować zmienne
static
i metody w klasieabstract
. Nie ma wymogu, aby obiekt miał dostęp do kontekstu statycznego. Na przykład, możemy uzyskać dostęp do statycznego kontekstu zadeklarowanego wewnątrz klasyabstract
poprzez użycie nazwy klasyabstract
.Jakie typy obszarów pamięci są przydzielane przez JVM?
Obszar Klasy przechowuje struktury klas, na przykład stałe i pola inicjowane podczas uruchomienia programu, dane i cały kod metod.
Sterta to obszar danych środowiska wykonawczego, w którym pamięć przydzielana jest obiektom.
Stos przechowuje ramki. Zawiera zmienne lokalne i wyniki pośrednie, a także bierze udział w wywołaniach i zwrotach metod. Każdy wątek ma prywatny stos JVM, stworzony w tym samym czasie co wątek. Za każdym razem, gdy wywoływana jest metoda, tworzona jest nowa ramka. Ramka jest niszczona po zakończeniu wywołania jej metody.
Rejestr licznika programu zawiera adres aktualnie wykonywanej instrukcji wirtualnej maszyny Javy.
Stos metod natywnych zawiera wszystkie metody natywne, które używane są w aplikacji.
Dlaczego dziedziczenie wielokrotne jest niedozwolone w Javie?
To byłoby naprawdę skomplikowane. Wyobraź sobie trzy klasy
A
,B
, iC
, gdzieC
dziedziczyA
iB
. Teraz załóżmy, że klasyA
iB
mają tę samą metodę, a wywołujesz ją z obiektu klasy potomnej... Która z nich zostanie wywołana?A
czyB
? Mamy tu dwuznaczność.Jeśli spróbujesz dziedziczyć dwie klasy, Java wygeneruje błąd kompilacji.
Czy można przeciążyć metodę
main()
?Jasne, możemy mieć wiele metod
main
w programie Java, używając przeciążania metod. Spróbuj!Czy możemy zadeklarować konstruktor jako
final
?Nie. Konstruktor nie może być zadeklarowany jako
final
, ponieważ nie może być dziedziczony. Nie ma więc sensu deklarować konstruktorów jakofinal
. Jeśli jednak spróbujesz, kompilator Java zgłosi błąd.Czy możemy zadeklarować interfejs jako
final
?Nie, nie możemy tego zrobić. Interfejs nie może być
final
, ponieważ interfejs musi być zaimplementowany przez jakąś klasę zgodnie z jego definicją. Dlatego nie ma sensu tworzyć interfejsufinal
. Jeśli jednak spróbujesz to zrobić, kompilator wygeneruje błąd.Jaka jest różnica pomiędzy
static binding
idynamic binding
?Wiązanie -
binding
, które może zostać rozwiązane w czasie kompilacji przez kompilator, nazywane jest statycznym -static
lub wczesnym wiązaniem. Wiązanie (Binding
) wszystkich metodstatic
,private
ifinal
wykonywane jest w trakcie kompilacji.W
Dynamic binding
, kompilator nie może określić, która metoda ma zostać wywołana. Nadpisywanie metody jest doskonałym przykłademdynamic binding
. W przypadku nadpisywania metody obie klasy nadrzędne i podrzędne mają tę samą metodę.Static Binding class Cat{ private void talk() {System.out.println("cat is mewing..."); } public static void main(String args[]){ Cat cat=new Cat(); cat.talk(); } } Dynamic Binding class Animal{ void talk(){ System.out.println("animal is talking..."); } } class Cat extends Animal{ void talk(){ System.out.println("cat is talking..."); } public static void main(String args[]){ Animal animal=new Cat(); animal.talk(); } }
Jak utworzyć klasę tylko do odczytu w Javie?
Możesz to zrobić, ustawiając wszystkie pola klasy jako prywatne. Klasa tylko do odczytu ma tylko gettery, które zwracają prywatne właściwości klasy do metody
main
. Nie możesz modyfikować tych właściwości z powodu braku setterów.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
Jak utworzyć klasę tylko do zapisu w Javie?
Ponownie, należałoby ustawić wszystkie pola klasy jako
private
. Tym razem twoja klasa tylko do zapisu musi posiadać jedynie metody ustawiające, a nie pobierające. W rezultacie nie można odczytać właściwości klasy.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
Po każdym bloku
try
musi następować blokcatch
, prawda?Nie. Nie jest to konieczne. Blok
try
nie musi mieć blokucatch
. Mógłby po nim następować albo blok catch, albo blok final, albo nawet żaden z nich.public class Main{ public static void main(String []args){ try{ int variable = 1; System.out.println(variable/0); } finally { System.out.println("the other part of the program..."); } } }
Wydruk:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
Jeszcze jeden przykład:class Main { public static void main(String[] args) throws IOException { try(InputStreamReader inputStreamReader = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(inputStreamReader)){ System.out.println("test"); } } }
Wydruk:
test
P.S.: Przed Java 8, metody w interfejsach mogły być jedynie abstrakcyjne. W Javie 8 oraz nowszych wersjach, możliwe stało się definiowanie domyślnych metod i implementowanie ich bezpośrednio w interfejsie.Jaka jest różnica między słowami kluczowymi
throw
ithrows
?Throws
służy do deklarowania wyjątku, więc działa podobnie do blokutry-catch
. Słowo kluczoweThrow
służy do bezpośredniego zgłaszania wyjątku z metody lub dowolnego innego bloku kodu.Po
Throw
następuje instancja klasyException
, a po «throws» następują nazwy klas wyjątków.Throw
jest używany w treści metody do wyrzucania wyjątku.Throws
używane jest w sygnaturze metody do deklarowania wyjątków, które mogą wystąpić w twierdzeniach obecnych w metodzie.Możesz zgłosić jeden wyjątek na raz, ale możesz obsłużyć wiele wyjątków, deklarując je za pomocą słowa kluczowego
throw
. Możesz zadeklarować wiele wyjątków, np.public void method()throws IOException
,SQLException
.
Ten artykuł przeczytasz także po angielsku. |
---|
Read the English version of this article to practice responding to Java interview questions in English. Understanding these concepts in English can only help your employment prospects! |

GO TO FULL VERSION