자바 언어는 비슷한 모습을 많이했다,하지만 그들은 완전히 다른 요소, 다음, 마지막, 마지막 마무리를 사용하고 무슨 상관입니까?
결정적인
최종 클래스, 메소드, 변수를 수정하는데 사용될 수있다, 다른 의미로 각
- 최종 수정 클래스 표현 할 수있는 상속하지 확장
- 최종 수정 변수는 수정 될 수 없다
- 최종 수정 방법을 무시하지 않습니다
최종 실행에 대한 참조 수정
드디어
자바는 마지막으로, 우리는 마침내} {시도 {} 또는} {잡기 () {}에 가까운 마지막으로 {} JDBC 유사한 연결을 시도 할 수 있습니다, 그는 우리의 예외 메커니즘과 함께 사용할 수있는 코드가 실행되도록하는 메커니즘에 초점을 맞추고 잠금 및 기타 활동을 잠금 해제 보장합니다.
마무리
마무리는 자바의 방법이다 가비지 수집하기 전에, 그것은, 자바 객체에 설계되어 특정 자원의 완전한 복구, 마무리 메커니즘이 지금은 사용하지 않는 것이 좋습니다,
우리는 자원 회수에 일반적으로 마무리 희망, 그리고 왜 수 없습니다 ? 단순히 당신이 finallize 실행이 기대에 맞춰 실행 여부, 부적절한 사용은 교착 상태에 너무 걸고 선도, 성능에 영향을 미칠 수있는 시간이 아니다, 보증을 할 수 있습니다 넣어. 일반적으로, 전술 한 시도는 {} 마지막 {} 추가 처리에 대한 필요성이이 청소기기구 (가비지 수집)으로 간주 될 수 있고, 또는 자바 대체 방법을 제공하기 위해 특히, 자원 회수기구를위한 접근 방법이다.
마무리 및 쓰레기의 수집과 관련되어 있지만, 마무리 메서드 호출 세트의 수에 회복 지연 렌더링 해당 객체로 이어질 것, 그것은 특별히 완료 조사했다, 방법의 구현은 쇠퇴의 약 40 ~ 50 배 속도가 있기 때문이다 finallize는 마무리 객체를 구현하는 사람들은 공급의 특별한 방법이라고하는 수단 가비지 컬렉션에 대한 개체 자체 전에 호출 할 수 있도록 설계되었습니다. 추가 치료를 위해 그에게 CDN, 그것은 재활용 할 수있는 여러 쓰레기의 월경을 통해 개체가 발생할 수의 마무리 자연의 빠른 회복에 걸림돌이된다. 우리는 미미하다. 우리가 그것을 사용 복구하는 JVM을 통보하는 경우 가까운 접근 방식을 가지고있는 JDBC 연결 풀, 그는 우리가 회복 마무리 기대한다면, 그것은 메모리 오버 플로우가 발생할 수 있습니다 사용 다음 시간에 연못을 비우는 자원의 릴리스입니다. 그렇게 만의 프로그램으로 그를 보자 의 골키퍼 마무리 일부 오류 메시지 마스크됩니다.
자바는 팬텀 참조를 사용하여 모든 구현을 완료 청소기 톤으로 대체. 이것은 그가 교착 상태 상황을 피하기 위해 자신의 스레드를 가지고, 자원이 해제되도록 할 수 있습니다 참조 팬텀 또는 대기열로 정리 메커니즘입니다.
팬텀 참조 메커니즘을 사용 mysqljdbc.
숨겨진 문제
그래서 성능, 동시성, 객체의 수명주기, 쓰레기 수거 및 과정의 측면에서 문제가 있습니다.
이러한 우리의 방법 또는 클래스로 많은 장면에서 달성하기 위해 입증 된 우리의 코드의 의미와 논리를 대표하는 권장 최종 키워드 밀도는 당신이 명확하게 다른 사람을 말할 수 있도록, 마지막으로 선언 할 수있다, 이러한 클래스 및 방법은 없습니다 수정할 수 있습니다. 당신은 자바를 통해 핵심 라이브러리와 소스 코드에 관심 있다면, 당신은 API 함수의 기초를 변경할 수있는 사용자 플랫폼을 보장하는 상황을 방지 할 수있는, 많은 클래스가 최종 클래스의 자바에 선언되어 찾을 수 보안 필요한 수단, 최종 수정 방법 또는 변수를 사용하여이 프로그램 오류로 인해 사고의 레이아웃을 회피 할 수 있으며, 일부는 심지어 명시 모든 방법 파라미터 추천, 로컬 변수는 멤버 변수가 어느 정도 최종 최종 생산 불변 효과로서 선언 분명 더 이상 할당 최종 변수, 오버 헤드가 필요 방어 복사본을 생략 할 수있는 추가 동기화를 줄일 수 없기 때문에이, 특히 병행 프로그래밍으로 보호 읽기 전용 데이터에 사용할 수 많은 시나리오에서 fianl 성능을 향상시킬 수 있습니다 fianl CDN 상호 연결 방법이 수행 될 수있다으로 컴파일러를 향상시킬 수있다 라인 컴파일러 기능 등, 억제 솔직히 비슷한 결과 많은이 가정 같은 현대적인 고성능 CDN 판사로, 파생 기반으로, 반드시 프롬프트 최종 영향 fianl 키워드 실적에 의존 고려할 필요가있는 경우,이 없다 성능을 향상시키기 위해 이러한 방식으로 개발하기 위해, 정말 필요가 없습니다.
마지막으로 펜 질문
public class finally_demo{
public static char Label;
public static void main(String[] args){
System.out.println(test_finally());
System.out.println(Label);
}
public static char test_finally(){
try{
System.out.println('A');
return Label= 'A';
}finally{
System.out.println('B');
Label= 'B';
}
)
}
출력 :
ABAB
분석을 구조 :
포인트 1.이 문제는 조사 : 실행 순서가 마지막으로 반환하는 것입니다 무엇;
구현 과정 :
전면 출력 AB이는 의심의 여지 대부분의 사람들이 있기 때문에 두 개의 출력 문 내부에서 Test1 방법.
그 후,
첫 번째 레이블 = 'A'할당,
마지막으로 문의 유무를 감지 한 후,
이 있으며, 마지막으로 문이 실행될, 최종 결과가 레이블 B의 값이 그래서 라벨 = 'B',! ;
결국 문 수익률을 반환합니다 (이번에는 B와 동일하지만 할당, 라벨을하지 않지만, 마침내 문이 수행되지 전에 여전히 값을 반환).
을 준수하는 사용자 정의 규칙 불변 인 클래스의 요구를 만들기 :
1 전용 멤버 변수와 최종 수정의 사용.
부재 (2)는 변수를 초기화하는 데 사용되는 생성자 파라미터가 제공된다.
3 부재 변수 세터 방법을 제공하지 않는다.
4, 재정의 hashCode 메소드에 대한 필요와 클래스 멤버 변수에 변수가있는 경우는 객체의 equals 메소드