CodeGym /Java Blog /무작위의 /상위 21개 Java 인터뷰 질문
John Squirrels
레벨 41
San Francisco

상위 21개 Java 인터뷰 질문

무작위의 그룹에 게시되었습니다
무수히 많은 Java 인터뷰 질문이 있으며 하나의 기사에 모든 질문을 수집할 수는 없습니다. 그러나 여기에서 IT 회사의 HR 관리자에 따르면 매우 일반적인 Java 인터뷰 질문을 찾을 수 있습니다. 상위 21개 Java 인터뷰 질문 - 1
  1. "분해" public static void main(String args[]).

    신입생에게 인기있는 자바 인터뷰 질문 중 하나이며 매우 쉽습니다.

    • public액세스 한정자입니다. 이 메서드에 대한 액세스를 지정하는 데 사용합니다. 여기서 수식어는 "public"이므로 모든 클래스가 이 메서드에 액세스할 수 있습니다.

    • static. 이 Java 키워드는 클래스의 새 객체를 생성하지 않고 이 메서드를 사용한다는 의미입니다.

    • Void메서드의 반환 유형입니다. 메서드가 값을 반환하지 않음을 의미합니다.

    • main방법의 이름입니다. JVM은 이를 애플리케이션의 진입점으로 "인식"합니다(특정 서명이 있어야 함). Main주요 실행이 발생하는 방법입니다.

    • String args[]. 이것은 기본 메소드에 전달되는 매개변수입니다. 여기에 Java 응용 프로그램을 실행할 때 수락하는 문자열 유형의 인수가 있습니다. 터미널에 입력할 수 있습니다.

  2. 차이점은 무엇 equals()입니까 ==?

    먼저 " =="는 연산자인 반면 equals()는 메서드입니다. ==참조 비교(또는 주소 비교)에는 연산자를 사용 하고 equals()내용 비교에는 메서드를 사용합니다. 즉, 객체의 값을 비교하는 ==동안 두 객체가 동일한 메모리 위치를 가리키는지 확인합니다 .equals()

  3. 메서드 없이 프로그램을 실행할 수 있습니까 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
    
  4. 총 주요 방법 부재는 어떻습니까? 기본 메서드 없이 일반 클래스를 실행하려고 하면 다음 오류가 발생합니다. 테스트 클래스에서 기본 메서드를 찾을 수 없습니다. 기본 메서드를 다음과 같이 정의하십시오. public static void main(String [] args) 또는 JavaFX 응용 프로그램 클래스는 javafx.application.Application을 확장해야 합니다. 오류 자체는 이것이 JavaFX 응용 프로그램이고 클래스가 javafx.application.Application에서 상속된 경우 가능하다고 말합니다.
  5. 객체 란 무엇입니까 immutable? 개체를 만들 수 있습니까 immutable?

    immutable생성 후에는 클래스 의 객체를 수정할 수 없습니다 . 따라서 일단 생성하면 변경할 수 없습니다. 개체를 수정하려고 하면 Immutable새 개체(복제)를 얻고 생성하는 동안 이 복제를 변경합니다.

    좋은 예는 Java에 String있습니다 . immutable즉, 개체 자체는 변경할 수 없지만 개체에 대한 참조는 변경할 수 있습니다.

  6. 다음 코드에서 얼마나 많은 개체가 생성됩니까?

    4번을 대체하는 자바 기술 면접 질문 중 하나.

    
    String s1="Hello";  
    String s2="Hello";  
    String s3="Hello";  
    

    Java에는 String Pool이 있기 때문에 대답은 "단 하나"입니다. new() 연산자를 사용하여 String 객체를 생성하면 힙 메모리에 새 객체가 생성됩니다. 예제와 같이 문자열 리터럴 구문을 사용하는 경우 문자열 풀에서 기존 개체가 이미 있는 경우 이를 반환할 수 있습니다.

  7. 다음 코드에서 얼마나 많은 개체가 생성됩니까?

    
    String s = new String("Hello");
    

    2개의 개체가 있습니다. 하나는 문자열 상수 풀에 있고(아직 없는 경우) 다른 하나는 힙에 있습니다.

  8. 자바에서 클래스와 클래스 StringStringBuilder차이점 은 무엇입니까 ?StringBuffer

    상위 Java 인터뷰 질문의 리더 중 하나가 있습니다.

    우선 StringImmutable 클래스입니다. 즉, 콘텐츠가 생성되면 수정할 수 없습니다. While StringBuffer및 는 StringBuilder변경 가능한 클래스이므로 나중에 변경할 수 있습니다. 객체 의 내용을 변경하면 String새 문자열을 생성하므로 원래 문자열을 수정하지 않습니다. 그래서 with 보다 성능이 StringBuffer더 좋습니다 String.

    StringBufferStringBuilderthat StringBuffer의 메서드는 동기화되지만 의 메서드 는 동기화 StringBuilder되지 않습니다.

  9. String리터럴과 with 연산자를 사용하여 생성된 것과 차이점이 있습니까 new()?

    있습니다. 연산자를 사용하여 문자열을 생성하면 new()힙과 문자열 풀에 나타납니다(아직 없는 경우). 리터럴 을 사용하여 생성하는 경우 String문자열 풀에 생성됩니다(아직 없는 경우). 문자열 풀은 문자열 리터럴을 저장하는 힙 내의 저장 영역입니다.

  10. Java에서 재정의하거나 메서드를 private사용할 수 있습니까 ?static

    신인을위한 자바 까다로운 인터뷰 질문 중 하나입니다. Java에서는 실제로 재정의 private하거나 메서드를 사용할 수 없습니다 .static

    private개인 액세스 지정자의 범위가 클래스 내에만 있기 때문에 메서드를 재정의할 수 없습니다 . 무언가를 재정의하려고 할 때 부모 및 자식 클래스가 있어야 합니다. 슈퍼클래스의 메소드가 이면 private하위 클래스는 이를 사용할 수 없으며 하위 클래스의 메소드는 새 메소드로 처리됩니다(오버라이드되지 않음).

    Staticstatic메서드는 클래스 객체의 일부가 아니라 클래스 자체의 일부이기 때문에 메서드도 재정의할 수 없습니다 . 물론 하위 클래스에서 동일한 서명으로 동일한 메서드를 선언할 수 static있지만 다시 새 메서드로 처리됩니다.

  11. Abstract Class와 사이의 차이Interface

    OOP 원칙과 관련된 인기 있는 Java 개발자 인터뷰 질문 중 하나입니다. 우선 Java에서는 interface동작을 정의하고 abstract class계층 구조를 만듭니다.

    추상 클래스 상호 작용
    추상 클래스에서 메서드 본문(비추상 메서드)을 가질 수 있습니다. 인터페이스는 추상 메서드만 가질 수 있습니다. Java 8 이상에서는 기본 메서드를 정의하고 인터페이스에서 직접 구현할 수 있게 되었습니다. 또한 Java 8의 인터페이스에는 정적 메서드가 있을 수 있습니다.
    인스턴스 변수는 추상 클래스에 있을 수 있습니다. 인터페이스는 인스턴스 변수를 가질 수 없습니다.
    생성자 허용 인터페이스는 생성자를 가질 수 없습니다.
    정적 메서드가 허용됩니다. 정적 메서드는 허용되지 않습니다.
    클래스는 하나의 추상 부모만 가질 수 있습니다. 하나의 인터페이스는 다른 클래스를 구현할 수 있습니다.
    추상 클래스는 인터페이스의 구현을 제공할 수 있습니다. 인터페이스는 추상 클래스의 구현을 제공할 수 없습니다.
    추상 클래스는 다른 Java 클래스를 확장하고 여러 Java 인터페이스를 구현할 수 있습니다. 인터페이스는 다른 Java 인터페이스만 확장할 수 있습니다.
    Java 추상 클래스는 개인 및 보호 클래스 멤버를 가질 수 있습니다. Java 인터페이스의 구성원은 기본적으로 공개됩니다.
  12. static클래스 에서 변수와 메서드를 선언할 수 있습니까 abstract?

    static예, 메소드 에서 변수와 메소드를 선언할 수 있습니다 abstract. 정적 컨텍스트에 액세스하기 위해 개체를 만들 필요는 없습니다. abstract따라서 클래스 이름을 사용하여 클래스 내부에 선언된 정적 컨텍스트에 액세스할 수 있습니다 abstract.

  13. JVM은 어떤 유형의 메모리 영역을 할당합니까?

    클래스 영역은 런타임 상수 풀, 필드, 메서드 데이터 및 메서드에 대한 모든 코드와 같은 클래스별 구조를 저장합니다.

    힙은 메모리가 개체에 할당되는 런타임 데이터 영역입니다.

    스택은 프레임을 저장합니다. 로컬 변수와 부분 결과를 포함하고 메서드 호출 및 반환에 참여합니다. 모든 스레드에는 스레드와 동시에 생성된 전용 JVM 스택이 있습니다. 메서드가 호출될 때마다 새 프레임이 생성됩니다. 메서드 호출이 완료되면 프레임이 소멸됩니다.

    프로그램 카운터 레지스터에는 현재 실행 중인 JVM(Java Virtual Machine) 명령의 주소가 포함되어 있습니다.

    네이티브 메서드 스택에는 애플리케이션에서 사용되는 모든 네이티브 메서드가 포함되어 있습니다.

  14. Java에서 다중 상속이 허용되지 않는 이유는 무엇입니까?

    정말 복잡할 것입니다. 3개의 클래스 A, BCC상속을 A상상해 보십시오 B. 이제 A클래스 B는 동일한 메소드를 가지며 하위 클래스 객체에서 호출합니다... 어느 것입니까? A이나 B? 여기에 모호함이 있습니다.

    두 클래스를 상속하려고 하면 Java에서 컴파일 시간 오류가 발생합니다.

  15. 메서드 를 오버로드할 수 있습니까 main()?

    main물론 메소드 오버로딩을 사용하여 Java 프로그램에서 많은 메소드를 가질 수 있습니다 . 사용해 보세요!

  16. 생성자를 로 선언할 수 있습니까 final?

    아니요. 생성자는 final상속할 수 없기 때문에 로 선언할 수 없습니다. 따라서 생성자를 final. 그러나 그렇게 하려고 하면 Java 컴파일러에서 오류가 발생합니다.

  17. 인터페이스를 로 선언할 수 있습니까 final?

    아니오, 우리는 이것을 할 수 없습니다. final인터페이스는 그 정의에 따라 어떤 클래스에 의해 구현되어야 하기 때문에 인터페이스가 될 수 없습니다 . 따라서 인터페이스를 만드는 것은 의미가 없습니다 final. 그러나 그렇게 하려고 하면 컴파일러에서 오류를 표시합니다.

  18. 차이점은 무엇 static binding입니까 dynamic binding?

    binding컴파일러에 의해 컴파일 타임에 해결될 수 있는 것이 호출되거나 초기 static바인딩입니다. Binding모든 static, privatefinal메서드는 컴파일 타임에 수행됩니다.

    컴파일러 에서 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();  
     }  
    }
    
  19. Java에서 읽기 전용 클래스를 만드는 방법은 무엇입니까?

    클래스의 모든 필드를 비공개로 설정하면 됩니다. 읽기 전용 클래스에는 클래스의 전용 속성을 메서드로 반환하는 getter 메서드만 있습니다 main. 이 속성을 수정할 수 없습니다. 그 이유는 setters 메서드가 없기 때문입니다.

    
    public class HockeyPlayer{    
    private String team ="Maple leaf";    
    public String getTeam(){    
    return team;    
    }    
    }
    
  20. Java에서 쓰기 전용 클래스를 만드는 방법은 무엇입니까?

    다시 말하지만 클래스의 모든 필드를 만들어야 합니다 private. 이제 쓰기 전용 클래스에는 setter 메서드만 있고 getter는 없어야 합니다. 따라서 클래스의 속성을 읽을 수 없습니다.

    
    public class HockeyPlayer{       
    private String team;    
    public void setTeam(String college){    
    this.team = team;    
    }    
    }    
    
  21. 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 이상에서는 기본 메서드를 정의하고 인터페이스에서 직접 구현할 수 있게 되었습니다.
  22. throw와 키워드 의 차이점은 무엇인가요 throws?

    Throws예외를 선언하는 데 사용되므로 try-catch블록과 유사하게 작동합니다. Throw키워드는 메서드 또는 다른 코드 블록에서 명시적으로 예외를 throw하는 데 사용됩니다.

    Throw다음에는 클래스의 인스턴스가 오고 Exceptionthrows 다음에는 예외 클래스 이름이 옵니다.

    Throw메서드 본문에서 예외를 throw하는 데 사용됩니다. Throws메서드 서명에서 메서드에 있는 문에서 발생할 수 있는 예외를 선언하는 데 사용됩니다.

    한 번에 하나의 예외를 던질 수 있지만 throw키워드를 사용하여 예외를 선언하여 여러 예외를 처리할 수 있습니다. 예를 들어 , 와 같이 여러 예외를 선언할 수 public void method()throws IOException있습니다 SQLException.

여기에는 몇 가지 자바 인터뷰 질문과 답변만 있었습니다. 이 기사는 인터뷰 시리즈의 첫 번째 기사입니다. 다음 질문(출시 예정)은 데이터 구조 질문에 관한 것입니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION