변수 'x'가 final로 선언된 후 switch 문에서 수정되기 때문에 코드가 컴파일되지 않습니다. 이는 Java에서는 허용되지 않습니다. 최종 변수는 한번 초기화되면 값을 변경할 수 없는 변수입니다1. switch 문은 'y' 값에 따라 'x'에 다른 값을 할당하려고 시도하며 이는 최종 수정자를 위반합니다. 컴파일러는 오류를 보고합니다. 최종 지역 변수 x를 할당할 수 없습니다. 공백이어야 하며 복합 할당을 사용하지 않아야 합니다. 참조: 최종 키워드(The Java™ Tutorials > Learning the Java Language > Classes and Objects)
1z1-829 문제 27
코드 조각을 보면 다음과 같습니다.
정답: C
설명 코드 조각은 equals() 및 intern() 메서드를 사용하여 네 쌍의 문자열을 비교합니다. equals() 메서드는 두 문자열의 내용을 비교하는 반면, intern() 메서드는 문자열의 정식 표현을 반환합니다. 즉, 문자열 풀에서 동일한 내용을 가진 기존 문자열에 대한 참조를 반환합니다. 스트링 풀은 공간을 절약하고 성능을 향상시키기 위해 스트링을 저장하고 재사용하는 메모리 영역입니다. 비교 결과는 다음과 같습니다. s1.equals(s2): s1과 s2 모두 "Hello Java 17"이라는 동일한 콘텐츠를 갖기 때문에 true를 반환합니다. s1 == s2: s1과 s2는 내용이 동일하더라도 참조가 다른 서로 다른 객체이기 때문에 false를 반환합니다. == 연산자는 내용이 아닌 두 개체의 참조를 비교합니다. s1.intern() == s2.intern(): s1.intern()과 s2.intern() 모두 "Hello Java 17"이라는 내용이 있는 문자열 풀의 동일한 문자열 객체에 대한 참조를 반환하기 때문에 true를 반환합니다. ". intern() 메서드는 문자열 풀에 각 고유 문자열 값의 복사본이 하나만 있는지 확인합니다. "Hello Java 17" == s2: "Hello Java 17"은 자동으로 인턴되어 문자열 풀에 저장되는 문자열 리터럴이고, s2는 인턴되지 않은 new 연산자로 생성된 문자열 객체이기 때문에 false를 반환합니다. 기본적으로 힙에 저장됩니다. 따라서 서로 다른 참조를 가지며 == 연산자를 사용하면 동일하지 않습니다. 참조: 문자열(Java SE 17 및 JDK 17) - Oracle
1z1-829 문제 28
코드 조각을 보면 다음과 같습니다. 어떤 작업을 통해 코드를 컴파일할 수 있나요?
정답: E
설명 regNo 변수가 공개되면 코드가 컴파일됩니다. 이는 Product 클래스 범위 외부에 있는 App 클래스의 기본 메서드에서 regNo 변수에 액세스하고 있기 때문입니다. regNo 변수를 공개로 설정하면 클래스 외부에서 해당 변수에 액세스할 수 있습니다. 참고자료: https://education.oracle.com/products/trackp_OCPJSE17, https://mylearn.oracle.com/ou/learning-path/java-se-17-developer/99487, https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
1z1-829 문제 29
어떤 두 코드 조각이 컴파일됩니까?
정답: B,E
컴파일되는 두 코드 조각은 B와 E입니다. 이들은 var 변수를 선언하고 초기화하기 위해 올바른 구문을 사용하는 유일한 것입니다. var 키워드는 컴파일러가 이니셜라이저 표현식을 기반으로 변수의 유형을 유추할 수 있도록 하는 예약된 유형 이름입니다. 그러나 var 변수에는 이니셜라이저가 있어야 하며 이니셜라이저는 null 또는 람다 식이어서는 안 됩니다. 따라서 옵션 A는 이니셜라이저가 없기 때문에 유효하지 않고, 옵션 C는 null 이니셜라이저가 있기 때문에 유효하지 않으며, 옵션 D는 이니셜라이저로 람다 식이 있으므로 유효하지 않습니다. 옵션 B는 String 이니셜라이저가 있기 때문에 유효하고 옵션 E는 int 이니셜라이저가 있기 때문에 유효합니다. https://docs.oracle.com/en/java/javase/17/언어/local-variable-type-inference.html
1z1-829 문제 30
주어진: 코드가 Open Close를 인쇄할 수 있도록 하는 두 가지 수정 사항은 무엇입니까?
정답: B,E
설명 제공된 코드는 AutoCloseable 유형의 리소스를 선언하는 try-with-resources 문입니다. 리소스는 AutoCloseable 인터페이스를 구현하고 close() 메서드를 재정의하는 익명 클래스입니다. 코드에는 변수 s의 값을 인쇄하는 print() 메서드도 있습니다. 코드는 "Open Close"를 인쇄해야 하지만 두 가지 오류로 인해 컴파일되지 않습니다. 첫 번째 오류는 n1 라인에 있습니다. 여기서 익명 클래스의 선언 끝에 세미콜론이 누락되어 있습니다. 이로 인해 구문 오류가 발생하고 코드가 컴파일되지 않습니다. 이 오류를 해결하기 위해 옵션 B는 익명 클래스의 닫는 중괄호 뒤에 세미콜론을 추가합니다. 두 번째 오류는 n2 행에 있는데, 여기서 print() 메서드가 객체 참조 없이 호출됩니다. print() 메서드는 정적이 아니고 객체 없이 호출할 수 없기 때문에 컴파일 오류가 발생합니다. 이 오류를 해결하기 위해 옵션 E는 변수 t를 사용하여 print() 메서드에 객체 참조를 추가합니다. 따라서 옵션 B와 E는 정확하며 코드에서 "Open Close"를 인쇄할 수 있습니다.