
-
“Tháo rời”
public static void main(String args[])
.Một trong những câu hỏi phỏng vấn java phổ biến dành cho người mới bắt đầu và rất dễ.
-
public
là một công cụ sửa đổi truy cập. Chúng tôi sử dụng nó để chỉ định quyền truy cập vào phương pháp này. Công cụ sửa đổi ở đây là “công khai”, vì vậy bất kỳ Lớp nào cũng có quyền truy cập vào phương thức này. -
static
. Từ khóa Java này có nghĩa là chúng ta sử dụng phương thức này mà không cần tạo Đối tượng mới của Lớp. -
Void
là kiểu trả về của phương thức. Điều đó có nghĩa là phương thức không trả về bất kỳ giá trị nào. -
main
là tên của phương thức. JVM “biết” nó như một điểm vào của một ứng dụng (nó phải có một chữ ký cụ thể).Main
là một phương pháp mà thực thi chính xảy ra. -
String args[]
. Đây là tham số được truyền cho phương thức chính. Ở đây chúng ta có các đối số kiểu String mà ứng dụng Java của bạn chấp nhận khi bạn chạy nó. Bạn có thể gõ chúng trên thiết bị đầu cuối.
-
-
Đâu là sự khác biệt giữa
equals()
và==
?Đầu tiên, “
==
” là một toán tử trong khi đóequals()
là một phương thức. Chúng tôi sử dụng==
toán tử để so sánh tham chiếu (hoặc so sánh địa chỉ) vàequals()
phương pháp so sánh nội dung. Điều đó có nghĩa là==
kiểm tra xem cả hai đối tượng có trỏ đến cùng một vị trí bộ nhớ hay không trong khiequals()
so sánh các giá trị trong các đối tượng. -
Chúng ta có thể thực hiện một chương trình mà không có
main()
phương thức không?Nhiều câu hỏi phỏng vấn java cơ bản thực sự dễ dàng. Giống cái này. Vì vậy, câu trả lời ngắn gọn là: có, chúng tôi có thể. Ví dụ, chúng ta có thể làm điều đó bằng cách sử dụng khối tĩnh.
Bạn có thể sử dụng khối tĩnh để khởi tạo thành viên dữ liệu tĩnh. Nó được thực thi trước
main
phương thức, tại thời điểm tải lớp.class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }
Đầu ra là:
static block is invoked Now main method
Điều gì về sự vắng mặt hoàn toàn của phương thức chính? Nếu bạn cố gắng chạy một lớp thông thường mà không có phương thức chính, bạn sẽ gặp lỗi tiếp theo: Không tìm thấy phương thức chính trong Kiểm tra lớp, vui lòng xác định phương thức chính là: public static void main (String [] args) hoặc ứng dụng JavaFX lớp phải mở rộng javafx.application.Application. Bản thân lỗi nói rằng nếu đây là ứng dụng JavaFX và lớp được kế thừa từ javafx.application.Application thì có thể xảy ra.
-
Đối tượng là gì
immutable
? Bạn có thể tạoimmutable
đối tượng không?Bạn không thể sửa đổi các đối tượng của một
immutable
lớp sau khi chúng được tạo. Vì vậy, một khi bạn tạo chúng, bạn không thể thay đổi chúng. Nếu bạn cố sửa đổiImmutable
đối tượng, bạn sẽ nhận được một đối tượng mới (bản sao) và thay đổi bản sao này trong khi tạo.Một ví dụ điển hình là
String
, nó cóimmutable
trong Java. Điều đó có nghĩa là bạn không thể thay đổi chính đối tượng, nhưng bạn có thể thay đổi tham chiếu đến đối tượng. -
Có bao nhiêu đối tượng được tạo trong đoạn mã sau?
Một trong những câu hỏi phỏng vấn kỹ thuật java thay thế #4.
String s1="Hello"; String s2="Hello"; String s3="Hello";
Câu trả lời là “chỉ một” bởi vì Java có một String Pool. Khi chúng ta tạo một đối tượng Chuỗi bằng toán tử new(), nó sẽ tạo một đối tượng mới trong bộ nhớ heap. Nếu chúng ta sử dụng cú pháp ký tự Chuỗi, như trong ví dụ của chúng ta, thì nó có thể trả về một đối tượng hiện có từ nhóm Chuỗi, nếu nó đã tồn tại.
-
Có bao nhiêu đối tượng được tạo trong đoạn mã sau?
String s = new String("Hello");
Có 2 đối tượng. Một cái nằm trong nhóm hằng số chuỗi (nếu chưa có) và cái còn lại nằm trong đống.
-
String
Sự khác biệt giữaStringBuilder
vàStringBuffer
các lớp trong Java là gì ?Có một trong những người dẫn đầu trong các câu hỏi phỏng vấn java hàng đầu.
Trước hết
String
là một lớp Immutable. Điều đó có nghĩa là bạn không thể sửa đổi nội dung của nó sau khi được tạo. Trong khiStringBuffer
vàStringBuilder
là các lớp có thể thay đổi, vì vậy bạn có thể thay đổi chúng sau này. Nếu chúng ta thay đổi nội dung củaString
đối tượng, nó sẽ tạo ra một chuỗi mới do đó nó không sửa đổi chuỗi gốc. Đó là lý do tại sao hiệu suất vớiStringBuffer
tốt hơn so vớiString
.Sự khác biệt chính giữa các phương thức của
StringBuffer
vàStringBuilder
thatStringBuffer
được đồng bộ hóa trong khiStringBuilder
các phương thức của thì không. -
Có sự khác biệt nào trong
String
đó đã được tạo bằng chữ và vớinew()
toán tử không?Có. Nếu chúng ta tạo một Chuỗi bằng
new()
toán tử, nó sẽ xuất hiện trong heap và trong nhóm chuỗi (nếu chưa có). Nếu bạn tạo mộtString
bằng cách sử dụng một chữ, nó sẽ được tạo trong nhóm chuỗi (nếu chưa có). Nhóm chuỗi là một vùng lưu trữ trong heap, nơi lưu trữ các chuỗi ký tự. -
Bạn có thể ghi đè
private
hoặcstatic
phương thức trong Java không?Một trong những câu hỏi phỏng vấn khó về java dành cho tân binh. Bạn thực sự không thể ghi đè
private
hoặcstatic
phương thức trong Java.Bạn không thể ghi đè
private
các phương thức vì phạm vi của bộ xác định quyền truy cập riêng tư chỉ nằm trong lớp. Khi bạn định ghi đè lên một thứ gì đó, chúng ta nên có lớp cha và lớp con. Nếu phương thức của lớp cha làprivate
, thì lớp con không thể sử dụng nó và các phương thức trong lớp con sẽ được coi là phương thức mới (không bị ghi đè).Static
các phương thức cũng không thể bị ghi đè, bởi vìstatic
các phương thức là một phần của chính Lớp và không phải là một phần của bất kỳ đối tượng nào của lớp. Chắc chắn bạn có thể khai báo cùng mộtstatic
phương thức với cùng một chữ ký trong các lớp con, nhưng một lần nữa, chúng sẽ được coi là các phương thức mới. -
Sự khác biệt giữa
Abstract Class
vàInterface
Một trong những câu hỏi phỏng vấn nhà phát triển java phổ biến dựa trên nguyên tắc OOP. Trước hết, trong Java
interface
định nghĩa một hành vi vàabstract class
tạo hệ thống phân cấp.lớp trừu tượng giao diện Có thể có một thân phương thức (các phương thức không trừu tượng) trong lớp trừu tượng Giao diện chỉ có thể có các phương thức trừu tượng. Trong Java 8 hoặc mới hơn, có thể xác định các phương thức mặc định và triển khai chúng trực tiếp trong giao diện. Ngoài ra, Giao diện trong Java 8 có thể có các phương thức tĩnh. Các biến thể hiện có thể ở trong lớp trừu tượng Một giao diện không thể có các biến thể hiện. Các nhà xây dựng được phép Giao diện không thể có bất kỳ hàm tạo nào. Các phương thức tĩnh được cho phép Phương pháp tĩnh không được phép Lớp chỉ có thể có một phụ huynh trừu tượng Một giao diện có thể thực hiện các lớp khác nhau Lớp trừu tượng có thể cung cấp việc triển khai giao diện. Giao diện không thể cung cấp việc triển khai lớp trừu tượng. Một lớp trừu tượng được phép mở rộng lớp Java khác và triển khai nhiều giao diện Java. Một giao diện chỉ được phép mở rộng giao diện Java khác. Một lớp trừu tượng Java có thể có các thành viên lớp riêng tư và được bảo vệ Các thành viên của giao diện Java được mặc định là công khai -
Chúng ta có thể khai báo
static
các biến và phương thức trong mộtabstract
lớp không?Có, có thể khai báo
static
các biến và phương thức trongabstract
phương thức. Không có yêu cầu tạo đối tượng để truy cập ngữ cảnh tĩnh. Vì vậy, chúng tôi được phép truy cập ngữ cảnh tĩnh được khai báo bên trongabstract
lớp bằng cách sử dụng tên củaabstract
lớp. -
Những loại vùng bộ nhớ nào được phân bổ bởi JVM?
Khu vực lớp lưu trữ các cấu trúc perclass, ví dụ: nhóm hằng số thời gian chạy, các trường, dữ liệu phương thức và tất cả mã cho các phương thức.
Heap là vùng dữ liệu thời gian chạy nơi bộ nhớ được cấp phát cho các đối tượng.
Ngăn xếp lưu trữ khung. Nó chứa các biến cục bộ và một phần kết quả, đồng thời tham gia vào việc gọi và trả về phương thức. Mỗi luồng có một ngăn xếp JVM riêng, được tạo cùng lúc với luồng. Một khung mới được tạo mỗi khi một phương thức được gọi. Một khung bị hủy khi lời gọi phương thức của nó hoàn thành.
Thanh ghi bộ đếm chương trình chứa địa chỉ của lệnh máy ảo Java hiện đang được thực thi.
Ngăn xếp phương thức bản địa chứa tất cả các phương thức bản địa được sử dụng trong ứng dụng.
-
Tại sao đa thừa kế không được phép trong java?
Nó sẽ thực sự phức tạp. Hãy tưởng tượng ba lớp
A
,B
,C
vàC
kế thừaA
vàB
. Bây giờ,A
cácB
lớp có cùng một phương thức và bạn gọi nó từ một đối tượng lớp con... Cái nào?A
's hayB
's? Ở đây chúng ta có sự mơ hồ.nếu bạn cố kế thừa hai lớp Java sẽ hiển thị lỗi thời gian biên dịch.
-
Chúng ta có thể quá tải
main()
phương thức không?Chắc chắn rồi, chúng ta được phép có nhiều
main
phương thức trong một chương trình Java bằng cách sử dụng nạp chồng phương thức. Hãy thử nó ra! -
Chúng ta có thể khai báo một hàm tạo là không
final
?Không. Hàm tạo không thể được khai báo là
final
vì nó không thể được kế thừa. Vì vậy, thật vô nghĩa khi khai báo các hàm tạo làfinal
. Tuy nhiên, nếu bạn cố gắng làm điều đó, trình biên dịch Java sẽ báo lỗi cho bạn. -
Chúng ta có thể khai báo một giao diện là
final
?Không, chúng ta không thể làm điều này. Một giao diện không thể
final
vì giao diện phải được thực hiện bởi một số lớp theo định nghĩa của nó. Do đó, không có ý nghĩa gì khi tạo một giao diệnfinal
. Tuy nhiên, nếu bạn cố làm như vậy, trình biên dịch sẽ báo lỗi. -
Đâu là sự khác biệt giữa
static binding
vàdynamic binding
?Cái
binding
có thể được giải quyết tại thời điểm biên dịch bởi trình biên dịch được gọistatic
hoặc ràng buộc sớm.Binding
của tất cả các phương thứcstatic
vàprivate
phươngfinal
thức được thực hiện tại thời điểm biên dịch.Trong
Dynamic binding
trình biên dịch không thể chọn một phương thức được gọi. Ghi đè là một ví dụ hoàn hảo vềdynamic binding
. Khi ghi đè cả lớp cha và lớp con đều có cùng một phương thức.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(); } }
-
Làm cách nào để tạo một lớp chỉ đọc trong Java?
Bạn có thể làm điều đó bằng cách đặt tất cả các trường của lớp ở chế độ riêng tư. Lớp chỉ đọc chỉ có các phương thức getter trả về thuộc tính riêng của lớp cho
main
phương thức. Bạn không thể sửa đổi thuộc tính này, lý do là thiếu phương thức setters.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
Làm cách nào để tạo một lớp chỉ ghi trong Java?
Một lần nữa, bạn nên tạo tất cả các trường của lớp
private
. Bây giờ, lớp chỉ ghi của bạn chỉ nên có các phương thức setter và không có getters. Do đó, chúng ta không thể đọc các thuộc tính của lớp.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
Mỗi
try
khối phải được theo sau bởi mộtcatch
khối, phải không?Không. Nó không phải là một điều cần thiết. Mỗi
try
khối có thể không cócatch
khối. Nó có thể được theo sau bởi một khối bắt hoặc một khối cuối cùng hoặc thậm chí không có chúng.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..."); } } }
Đầu ra:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
Một ví dụ nữa: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"); } } }
Đầu ra:
test
Tái bút: Trước khi các phương thức Java 8 trong giao diện chỉ có thể là trừu tượng. Trong Java 8 trở lên, có thể xác định các phương thức mặc định và triển khai chúng trực tiếp trong giao diện. -
Sự khác biệt giữa
throw
vàthrows
từ khóa là gì?Throws
được sử dụng để khai báo một ngoại lệ, vì vậy nó hoạt động tương tự nhưtry-catch
khối.Throw
từ khóa được sử dụng để đưa ra một ngoại lệ rõ ràng từ một phương thức hoặc bất kỳ khối mã nào khác.Throw
được theo sau bởi một thể hiện củaException
lớp và ném được theo sau bởi tên lớp ngoại lệ.Throw
được sử dụng trong phần thân phương thức để đưa ra một ngoại lệ.Throws
được sử dụng trong chữ ký phương thức để khai báo các ngoại lệ có thể xảy ra trong các câu lệnh có trong phương thức.Được phép đưa ra một ngoại lệ tại một thời điểm nhưng bạn có thể xử lý nhiều ngoại lệ bằng cách khai báo chúng bằng cách sử dụng
throw
từ khóa. Bạn có thể khai báo nhiều ngoại lệ, ví dụ:public void method()throws IOException
,SQLException
.
GO TO FULL VERSION