서문
자바 프로그래머 인터뷰, 기초가 정말 중요합니다. 이것은 사물의 기초, 기업, 특히 대기업, 그들은 훈련 에너지를 지출하고자하는 인간의 잠재력을, 그래서 기초가 가장 중요하다, 평가된다. 많은 사람들이 어떻게 작은 프로젝트 경험을하는 날을하기 전에, 다음 탄탄한 기초, 다른 일이 중요하지 않을 때 당신이 것을 만든 좋은 기초를 마련하기 위해 이동합니다.
내용이 인터뷰가 진입 점을 마스터 지식의 수준을 방문하게하는 것이 쉽고, Java 언어는 유사 많이 가지고 있지만, 그들은 완전히 다른 언어 요소를 사용합니다.
오늘은 이야기, 당신이 고전적인 자바 기본적인 질문입니다 부탁하고 싶은 것이 마지막, 마지막으로, 차이점은 무엇입니까 마무리?
전형적인 응답
최종 최종 수정 된 클래스는 확장을 상속 할 수이고, 다른 의미로 클래스, 메소드, 변수 각각을 장식하는 데 사용할 수있는, 최종 변수들은 수정되지 않을 수 있고, 최종적인 방법은 (재를 무시되지 ).
결국은 자바 코드의 초점 실행해야하는 것을 보장하는 메커니즘이다. 우리는 마침내-시도를 사용하거나 시도 - 캐치 마지막으로 유사에 JDBC 연결을 닫고 잠금 해제 잠금 작동을 보장 할 수 있습니다.
마무리는 가비지 수집되기 전에 특정 대상 자원의 완전한 회수를 위해 설계된 기본 클래스 java.lang.Object 방법이다. 메커니즘을 확정 이제 JDK 9되지 않으며되지 않는 것으로 표시되기 시작되었습니다.
테스트 센터의 분석
이 내가 주로 문법과 사용 관행의 관점에서 위의 대답, 아주 고전적인 자바 기본적인 질문 사실, 면접관은 또한 당신의 성능, 동시성, 객체의 라이프 사이클을 검사 할 수 있습니다 당신이 깊이 탐구 할 수있는 많은 방법이 있습니다 가비지 수집 프로세스 등의 기본적인 측면을 이해합니다.
마지막의 경우
권장 최종 키워드가 의미를 취소, 여러 장면에서 입증 된 우리의 코드의 논리의 의도는 다음과 같은 아주 좋은 연습입니다 :
당신이 명확하게 다른 사람을 알릴 수 있도록 우리는, 메소드 또는 클래스가 최종 선언 할 수 있습니다 이러한 작업은 수정할 수 없습니다.
자바 코어 라이브러리 또는 소스 코드의 정의에 대해 우려하는 경우, 아래 클래스 java.lang 패키지의 많은 발견하지 않은, 상당 부분은 final 클래스로 선언? 동일은 어느 정도는 플랫폼의 안전을 보장하기 위해 필요한 수단이다 효과적으로 기본 API의 기능을 변경하는 사용자를 방지 할 수 있습니다 타사 라이브러리의 몇 가지 기본 클래스의 사실이다.
매개 변수 또는 변수가 아니라도, 프로그래밍 오류로 인한 사고를 방지하기 위해 명확하게 할당 할 수 있습니다 최종 수정을 사용하여, 그것은 명시 적으로 모든 메서드 매개 변수, 지역 변수, 멤버 변수가 final로 선언하는 것이 좋습니다했다.
최종 변수 분명히 더 이상 최종 변수를 할당하지 않기 때문에, 따라서, 특히 동시 프로그래밍, 판독 전용 데이터를 보호하기 위해 사용될 수있는 불변 (불변) 어느 정도의 효과를 생성, 그것이 추가적인 동기화 오버 헤드를 감소 시키는데 도움이, 또한 일부 방어 사본이 필요 저장합니다.
많은 기사 나 책의 성능 이점이있을 수 있습니다 마지막은 특정 시나리오에서 성능을 개선하기 위해 도입되는, 예를 들어, 마지막 방법은 인라인을 사용하여 JVM에 기여, 컴파일러 등 조건부 컴파일의 능력을 향상시킬 수 있습니다.
솔직히, 유사한 결론이 많이는 JVM이 여전히 매우 똑똑 믿고 마지막 팁을 결정합니다 (예 : 핫스팟 등) 등의 현대적인 고성능 JVM으로 의존하지 않을 수 연합 (EU)에 그려진 가정을 기반으로합니다. 마찬가지로, 최종 필드 성능에 미치는 영향은 대부분의 경우에 고려 될 필요가 없다.
개발 실천의 관점에서, 나는이 점을 지나치게 강조하지 않으며, 이는 JVM의 구현에 매우 관련, 검증되지 않은 어려운 파악하는 것입니다. 나의 제안은 특별한 고려 사항이없는 한 매일 개발, 그렇지 않으면이 소위 성능 정보의 혜택이 프로그램이 가장 잘 의미 목적에 반영됩니다 가져올 것으로 기대하지 않는 것이 좋습니다 점이다. 당신은 정말이 분야에 관심이 있다면 나는 세부 사항으로 가지 않을 것이다, 관련 정보를 액세스 할 수 있지만, 테스트하는 것을 잊지 마세요.
마지막으로하려면
충분한 사용하는 방법을 정확히 알고있다. 우리는 연결 및 기타 리소스를 종료해야하지만 예외를보다 잘 처리 할 수 일반적으로 자바 플랫폼, 코딩 양이 그것을 할 이유는 훨씬 작아야하기 때문에, 시도 --자원 자바 7에 추가 된 문을 사용하는 것이 좋습니다.
참고
마지막으로 예외 코드가 실행되지 않습니다 :
최종 수정 목록, 자신의 행동에 영향을 미치지 않습니다 :
최종에만 제약 strList이 참조를 할당 할 수 없습니다 만, strList 객체의 동작은, 추가 요소에 영향을 미치는 최종 아니고, 완전히 정상입니다 수 있습니다. 우리가 정말 개체 자체는 불변하려는 경우, 당신은 적절한 클래스는 불변 동작을 지원해야합니다.
위의 예에서, List.of 방법은 마지막 문장은 예외가 런타임에 발생합니다 추가 불변의리스트를 만드는 것입니다.
현재 사용중인 자바 플랫폼은 java.lang.ref.Cleaner 점차 원래의 마무리 구현에 교체합니다.
마무리를 위해
사용되지 않는 우리가하지 않는 것이 좋습니다 것이 분명해야, 업계 관행이 반복적으로 자바 9, 좋은 방법이 아니라는 것을 증명했다, 짝수 명시 적으로 Object.finalize는 ()로 표시! 특별한 이유가없는 경우, 달성하기 위해 방법을 확정하지 않고, 재활용을 위해 그것을 사용하는 기대하지 않습니다.
이유는 무엇입니까? 간단하게, 당신은 기대와 일치 수행 여부, 마무리 몇시에 실행을 보장 할 수 없습니다 넣어. 잘못 사용하면 등등, 교착 중단 및 선도, 성능에 영향을 줄 수 있습니다.
일반적으로, 위에서 언급 한과 - 자원 - 시도하거나 시도 - 마지막 메커니즘의 사용은 자원을 재활용 할 수있는 아주 좋은 방법입니다. 당신은 추가 치료가 필요하지, 또는 Java가 제공하는 다른 메커니즘 클리너 대안으로 간주 될 수 있다면.