-
"분해"
public static void main(String args[])
.신입생에게 인기있는 자바 인터뷰 질문 중 하나이며 매우 쉽습니다.
-
public
액세스 한정자입니다. 이 메서드에 대한 액세스를 지정하는 데 사용합니다. 여기서 수식어는 "public"이므로 모든 클래스가 이 메서드에 액세스할 수 있습니다. -
static
. 이 Java 키워드는 클래스의 새 객체를 생성하지 않고 이 메서드를 사용한다는 의미입니다. -
Void
메서드의 반환 유형입니다. 메서드가 값을 반환하지 않음을 의미합니다. -
main
방법의 이름입니다. JVM은 이를 애플리케이션의 진입점으로 "인식"합니다(특정 서명이 있어야 함).Main
주요 실행이 발생하는 방법입니다. -
String args[]
. 이것은 기본 메소드에 전달되는 매개변수입니다. 여기에 Java 응용 프로그램을 실행할 때 수락하는 문자열 유형의 인수가 있습니다. 터미널에 입력할 수 있습니다.
-
-
차이점은 무엇
equals()
입니까==
?먼저 "
==
"는 연산자인 반면equals()
는 메서드입니다.==
참조 비교(또는 주소 비교)에는 연산자를 사용 하고equals()
내용 비교에는 메서드를 사용합니다. 즉, 객체의 값을 비교하는==
동안 두 객체가 동일한 메모리 위치를 가리키는지 확인합니다 .equals()
-
메서드 없이 프로그램을 실행할 수 있습니까
main()
?많은 Java 기본 인터뷰 질문은 정말 쉽습니다. 이 같은. 짧은 대답은 이렇습니다. 예, 할 수 있습니다. 예를 들어 정적 블록을 사용하여 이를 수행할 수 있습니다.
정적 블록을 사용하여 정적 데이터 멤버를 초기화할 수 있습니다.
main
클래스 로딩 시 메소드 보다 먼저 실행됩니다 .class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }
출력은 다음과 같습니다.
static block is invoked Now main method
총 주요 방법 부재는 어떻습니까? 기본 메서드 없이 일반 클래스를 실행하려고 하면 다음 오류가 발생합니다. 테스트 클래스에서 기본 메서드를 찾을 수 없습니다. 기본 메서드를 다음과 같이 정의하십시오. public static void main(String [] args) 또는 JavaFX 응용 프로그램 클래스는 javafx.application.Application을 확장해야 합니다. 오류 자체는 이것이 JavaFX 응용 프로그램이고 클래스가 javafx.application.Application에서 상속된 경우 가능하다고 말합니다.
-
객체 란 무엇입니까
immutable
? 개체를 만들 수 있습니까immutable
?immutable
생성 후에는 클래스 의 객체를 수정할 수 없습니다 . 따라서 일단 생성하면 변경할 수 없습니다. 개체를 수정하려고 하면Immutable
새 개체(복제)를 얻고 생성하는 동안 이 복제를 변경합니다.좋은 예는 Java에
String
있습니다 .immutable
즉, 개체 자체는 변경할 수 없지만 개체에 대한 참조는 변경할 수 있습니다. -
다음 코드에서 얼마나 많은 개체가 생성됩니까?
4번을 대체하는 자바 기술 면접 질문 중 하나.
String s1="Hello"; String s2="Hello"; String s3="Hello";
Java에는 String Pool이 있기 때문에 대답은 "단 하나"입니다. new() 연산자를 사용하여 String 객체를 생성하면 힙 메모리에 새 객체가 생성됩니다. 예제와 같이 문자열 리터럴 구문을 사용하는 경우 문자열 풀에서 기존 개체가 이미 있는 경우 이를 반환할 수 있습니다.
-
다음 코드에서 얼마나 많은 개체가 생성됩니까?
String s = new String("Hello");
2개의 개체가 있습니다. 하나는 문자열 상수 풀에 있고(아직 없는 경우) 다른 하나는 힙에 있습니다.
-
자바에서 클래스와 클래스
String
의StringBuilder
차이점 은 무엇입니까 ?StringBuffer
상위 Java 인터뷰 질문의 리더 중 하나가 있습니다.
우선
String
Immutable 클래스입니다. 즉, 콘텐츠가 생성되면 수정할 수 없습니다. WhileStringBuffer
및 는StringBuilder
변경 가능한 클래스이므로 나중에 변경할 수 있습니다. 객체 의 내용을 변경하면String
새 문자열을 생성하므로 원래 문자열을 수정하지 않습니다. 그래서 with 보다 성능이StringBuffer
더 좋습니다String
.StringBuffer
와StringBuilder
thatStringBuffer
의 메서드는 동기화되지만 의 메서드 는 동기화StringBuilder
되지 않습니다. -
String
리터럴과 with 연산자를 사용하여 생성된 것과 차이점이 있습니까new()
?있습니다. 연산자를 사용하여 문자열을 생성하면
new()
힙과 문자열 풀에 나타납니다(아직 없는 경우). 리터럴 을 사용하여 생성하는 경우String
문자열 풀에 생성됩니다(아직 없는 경우). 문자열 풀은 문자열 리터럴을 저장하는 힙 내의 저장 영역입니다. -
Java에서 재정의하거나 메서드를
private
사용할 수 있습니까 ?static
신인을위한 자바 까다로운 인터뷰 질문 중 하나입니다. Java에서는 실제로 재정의
private
하거나 메서드를 사용할 수 없습니다 .static
private
개인 액세스 지정자의 범위가 클래스 내에만 있기 때문에 메서드를 재정의할 수 없습니다 . 무언가를 재정의하려고 할 때 부모 및 자식 클래스가 있어야 합니다. 슈퍼클래스의 메소드가 이면private
하위 클래스는 이를 사용할 수 없으며 하위 클래스의 메소드는 새 메소드로 처리됩니다(오버라이드되지 않음).Static
static
메서드는 클래스 객체의 일부가 아니라 클래스 자체의 일부이기 때문에 메서드도 재정의할 수 없습니다 . 물론 하위 클래스에서 동일한 서명으로 동일한 메서드를 선언할 수static
있지만 다시 새 메서드로 처리됩니다. -
Abstract Class
와 사이의 차이Interface
OOP 원칙과 관련된 인기 있는 Java 개발자 인터뷰 질문 중 하나입니다. 우선 Java에서는
interface
동작을 정의하고abstract class
계층 구조를 만듭니다.추상 클래스 상호 작용 추상 클래스에서 메서드 본문(비추상 메서드)을 가질 수 있습니다. 인터페이스는 추상 메서드만 가질 수 있습니다. Java 8 이상에서는 기본 메서드를 정의하고 인터페이스에서 직접 구현할 수 있게 되었습니다. 또한 Java 8의 인터페이스에는 정적 메서드가 있을 수 있습니다. 인스턴스 변수는 추상 클래스에 있을 수 있습니다. 인터페이스는 인스턴스 변수를 가질 수 없습니다. 생성자 허용 인터페이스는 생성자를 가질 수 없습니다. 정적 메서드가 허용됩니다. 정적 메서드는 허용되지 않습니다. 클래스는 하나의 추상 부모만 가질 수 있습니다. 하나의 인터페이스는 다른 클래스를 구현할 수 있습니다. 추상 클래스는 인터페이스의 구현을 제공할 수 있습니다. 인터페이스는 추상 클래스의 구현을 제공할 수 없습니다. 추상 클래스는 다른 Java 클래스를 확장하고 여러 Java 인터페이스를 구현할 수 있습니다. 인터페이스는 다른 Java 인터페이스만 확장할 수 있습니다. Java 추상 클래스는 개인 및 보호 클래스 멤버를 가질 수 있습니다. Java 인터페이스의 구성원은 기본적으로 공개됩니다. -
static
클래스 에서 변수와 메서드를 선언할 수 있습니까abstract
?static
예, 메소드 에서 변수와 메소드를 선언할 수 있습니다abstract
. 정적 컨텍스트에 액세스하기 위해 개체를 만들 필요는 없습니다.abstract
따라서 클래스 이름을 사용하여 클래스 내부에 선언된 정적 컨텍스트에 액세스할 수 있습니다abstract
. -
JVM은 어떤 유형의 메모리 영역을 할당합니까?
클래스 영역은 런타임 상수 풀, 필드, 메서드 데이터 및 메서드에 대한 모든 코드와 같은 클래스별 구조를 저장합니다.
힙은 메모리가 개체에 할당되는 런타임 데이터 영역입니다.
스택은 프레임을 저장합니다. 로컬 변수와 부분 결과를 포함하고 메서드 호출 및 반환에 참여합니다. 모든 스레드에는 스레드와 동시에 생성된 전용 JVM 스택이 있습니다. 메서드가 호출될 때마다 새 프레임이 생성됩니다. 메서드 호출이 완료되면 프레임이 소멸됩니다.
프로그램 카운터 레지스터에는 현재 실행 중인 JVM(Java Virtual Machine) 명령의 주소가 포함되어 있습니다.
네이티브 메서드 스택에는 애플리케이션에서 사용되는 모든 네이티브 메서드가 포함되어 있습니다.
-
Java에서 다중 상속이 허용되지 않는 이유는 무엇입니까?
정말 복잡할 것입니다. 3개의 클래스
A
,B
및C
및C
상속을A
상상해 보십시오B
. 이제A
클래스B
는 동일한 메소드를 가지며 하위 클래스 객체에서 호출합니다... 어느 것입니까?A
이나B
? 여기에 모호함이 있습니다.두 클래스를 상속하려고 하면 Java에서 컴파일 시간 오류가 발생합니다.
-
메서드 를 오버로드할 수 있습니까
main()
?main
물론 메소드 오버로딩을 사용하여 Java 프로그램에서 많은 메소드를 가질 수 있습니다 . 사용해 보세요! -
생성자를 로 선언할 수 있습니까
final
?아니요. 생성자는
final
상속할 수 없기 때문에 로 선언할 수 없습니다. 따라서 생성자를final
. 그러나 그렇게 하려고 하면 Java 컴파일러에서 오류가 발생합니다. -
인터페이스를 로 선언할 수 있습니까
final
?아니오, 우리는 이것을 할 수 없습니다.
final
인터페이스는 그 정의에 따라 어떤 클래스에 의해 구현되어야 하기 때문에 인터페이스가 될 수 없습니다 . 따라서 인터페이스를 만드는 것은 의미가 없습니다final
. 그러나 그렇게 하려고 하면 컴파일러에서 오류를 표시합니다. -
차이점은 무엇
static binding
입니까dynamic binding
?binding
컴파일러에 의해 컴파일 타임에 해결될 수 있는 것이 호출되거나 초기static
바인딩입니다.Binding
모든static
,private
및final
메서드는 컴파일 타임에 수행됩니다.컴파일러 에서
Dynamic binding
호출할 메서드를 선택할 수 없습니다. 재정의는dynamic binding
. 재정의에서 부모 및 자식 클래스는 모두 동일한 방법을 사용합니다.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(); } }
-
Java에서 읽기 전용 클래스를 만드는 방법은 무엇입니까?
클래스의 모든 필드를 비공개로 설정하면 됩니다. 읽기 전용 클래스에는 클래스의 전용 속성을 메서드로 반환하는 getter 메서드만 있습니다
main
. 이 속성을 수정할 수 없습니다. 그 이유는 setters 메서드가 없기 때문입니다.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
Java에서 쓰기 전용 클래스를 만드는 방법은 무엇입니까?
다시 말하지만 클래스의 모든 필드를 만들어야 합니다
private
. 이제 쓰기 전용 클래스에는 setter 메서드만 있고 getter는 없어야 합니다. 따라서 클래스의 속성을 읽을 수 없습니다.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
각
try
블록 뒤에는catch
블록이 와야 합니다. 그렇지 않습니까?아니요. 그것은 필수가 아닙니다. 각
try
블록은 블록이 없을 수 있습니다catch
. catch 블록이나 finally 블록이 뒤따를 수도 있고 아예 없을 수도 있습니다.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..."); } } }
산출:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
또 다른 예: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"); } } }
산출:
test
추신: Java 8 이전에는 인터페이스의 메서드가 추상화만 가능했습니다. Java 8 이상에서는 기본 메서드를 정의하고 인터페이스에서 직접 구현할 수 있게 되었습니다. -
throw
와 키워드 의 차이점은 무엇인가요throws
?Throws
예외를 선언하는 데 사용되므로try-catch
블록과 유사하게 작동합니다.Throw
키워드는 메서드 또는 다른 코드 블록에서 명시적으로 예외를 throw하는 데 사용됩니다.Throw
다음에는 클래스의 인스턴스가 오고Exception
throws 다음에는 예외 클래스 이름이 옵니다.Throw
메서드 본문에서 예외를 throw하는 데 사용됩니다.Throws
메서드 서명에서 메서드에 있는 문에서 발생할 수 있는 예외를 선언하는 데 사용됩니다.한 번에 하나의 예외를 던질 수 있지만
throw
키워드를 사용하여 예외를 선언하여 여러 예외를 처리할 수 있습니다. 예를 들어 , 와 같이 여러 예외를 선언할 수public void method()throws IOException
있습니다SQLException
.
상위 21개 Java 인터뷰 질문
무수히 많은 Java 인터뷰 질문이 있으며 하나의 기사에 모든 질문을 수집할 수는 없습니다. 그러나 여기에서 IT 회사의 HR 관리자에 따르면 매우 일반적인 Java 인터뷰 질문을 찾을 수 있습니다.
GO TO FULL VERSION