Java의 finalize() 상세 정보 및 사용 방법
5410 단어 Javafinalize()
프로그램 설계에서 우리는 때때로 어떤 데이터가 바뀌지 않기를 바랄 수도 있다. 이때final은 쓸모가 있을 것이다.final은 Java의 키워드입니다. 이 부분은 수정할 수 없습니다.바뀌고 싶지 않은 이유는 두 가지가 있는데 그것이 바로 효율, 디자인이다.final에 사용되는 것은 세 가지 상황이 있는데 그것이 바로 데이터, 방법, 클래스이다.
1. final 데이터
때때로 데이터의 고정불변은 매우 유용하며, 시스템이 운행할 때의 부담을 줄일 수 있다.이 고정불변의 데이터에 대해 나는'상량'이라고 할 수 있다.상수는 다음과 같은 두 곳에 주로 적용됩니다.
1. 번역기 상량은 영원히 바꿀 수 없다.
2. 운행 기간이 초기화될 때, 우리는 그것이 바뀌지 않기를 바란다.
컴파일러 상량에 대해 클래스가 불러오는 과정에서 초기화가 완료되었기 때문에 클래스가 불러오는 후에 변경할 수 없습니다. 컴파일러는 클래스가 불러오는 모든 계산식에 대입할 수 있습니다. 즉, 컴파일러에서 계산식을 실행할 수 있습니다.물론 컴파일러 상수는 기본 형식만 사용할 수 있고 정의할 때 초기화해야 한다.
어떤 변수들은 대상에 따라 다르게 표현하기를 원하지만, 동시에 그것이 바뀌기를 원하지 않는다. 이때 우리는 운행기 상량을 사용할 수 있다.운행 기간 상량에 대해 그것은 기본 데이터 형식일 뿐만 아니라 인용 데이터 형식이기도 하다.기본 데이터 형식이 변하지 않는 것은 그 내용이고, 인용 데이터 형식이 변하지 않는 것은 그 인용이며, 인용이 지정한 대상의 내용은 변하지 않는다.
public class Person {
private String name;
Person(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class FinalTest {
private final String final_01 = "chenssy"; // , ,
private final String final_02; // ,
private static Random random = new Random();
private final int final_03 = random.nextInt(50); //
//
public final Person final_04 = new Person("chen_ssy"); //final
FinalTest(String final_02){
this.final_02 = final_02;
}
public String toString(){
return "final_01 = " + final_01 +" final_02 = " + final_02 + " final_03 = " + final_03 +
" final_04 = " + final_04.getName();
}
public static void main(String[] args) {
System.out.println("------------ ------------");
FinalTest final1 = new FinalTest("cm");
System.out.println(final1);
System.out.println("------------ ------------");
FinalTest final2 = new FinalTest("zj");
System.out.println(final2);
System.out.println("------------ --------------");
final2.final_04.setName("chenssy");
System.out.println(final2);
}
}
------------------
Output:
------------ ------------
final_01 = chenssy final_02 = cm final_03 = 34 final_04 = chen_ssy
------------ ------------
final_01 = chenssy final_02 = zj final_03 = 46 final_04 = chen_ssy
------------ --------------
final_01 = chenssy final_02 = zj final_03 = 46 final_04 = chenssy
여기서 한 가지만 논술하자면: 어떤 데이터가final이라고 해서 컴파일러에서 그 값을 알 수 있다고 생각하지 말고final_를 통해03 여기서 랜덤으로 초기화하는 것을 알 수 있습니다. 그는 운행 기간에야 그 값을 알 수 있습니다.2. final 방법
모든final에 표시된 방법은 계승되고 변경될 수 없기 때문에final 방법에 대한 첫 번째 원인은 모든 하위 클래스가 수정되는 것을 방지하기 위해 잠그는 것이다.두 번째 원인은 바로 효율 문제이다. 나는 이 효율 문제에 대해 잘 이해하지 못한다. 인터넷에서 이 단락을 발췌했다. 자바의 초기 실현에서 만약에 한 방법을final로 가리키면 컴파일러가 이 방법에 대한 모든 호출을 내장 호출로 바꾸는 것에 동의하는 것이다.컴파일러가 final 방법 호출 명령을 발견했을 때, 프로그램 코드를 삽입하는 정상적인 호출 방식을 뛰어넘어 방법 호출 메커니즘 (매개 변수를 창고에 눌러서 방법 코드에 옮겨서 실행한 다음에 창고의 참수를 되돌려주고 되돌려주는 값을 처리함) 을 실행하고, 방법체의 실제 코드 사본으로 방법 호출을 대체한다.이것은 방법이 호출하는 비용을 없앨 것이다.물론, 만약 한 가지 방법이 매우 크다면, 당신의 프로그램 코드는 팽창할 것이다. 따라서 내장이 가져오는 성능의 향상은 보이지 않을 것이다. 왜냐하면 가져오는 성능은 방법 내의 시간량에 소모되기 때문에 축소될 것이다.
이 말에 대해 이해를 잘 못해서 그대로 옮겼어요. 그 자바 소인은 설명할 수 있어요!!
부류의final 방법은 이불류가 덮을 수 없다. 즉, 자류는 부류와 똑같은 방법이 존재할 수 없다는 것이다.
public class Custom extends Person{
public void method1(){
System.out.println("Person's method1....");
}
// Cannot override the final method from person: final
// public void method2(){
// System.out.println("Person's method2...");
// }
}
3. final 클래스만약 어떤 종류가final로 수정된다면, 이 종류가 최종 클래스임을 나타낼 것이며, 다른 종류가 그것을 계승하는 것을 원하지도 않을 것이다.프로그램 설계에서 안전하거나 다른 원인에 처해 있기 때문에 우리는 이 종류에 어떠한 변화도 허용하지 않고 하위 클래스가 있기를 원하지 않는다. 이럴 때final을 사용하여 이 종류를 수식할 수 있다.
final 수식의 클래스에 대해 말하자면, 그 구성원 변수는final일 수도 있고, 비final일 수도 있다.final로 정의되면,final 데이터의 규칙도 그에 적합합니다.그 방법은 자동적으로final을 추가합니다.final 클래스는 계승할 수 없기 때문에 이것은 기본입니다.
4. final 매개 변수
실제 응용에서 우리는final로 구성원 변수, 구성원 방법, 클래스를 수식할 수 있을 뿐만 아니라 매개 변수도 수식할 수 있다. 만약에 어떤 매개 변수가final로 수식된다면 이 매개 변수는 바꿀 수 없다는 것을 대표한다.
만약 방법에서 우리가 이 매개 변수를 수정했다면, 컴파일러는 당신에게: The final local variable i cannot be assigned를 알려 줄 것입니다.It must be blank and not using a compound assignment.
public class Custom {
public void test(final int i){
//i++; ---final
System.out.println(i);
}
public void test(final Person p){
//p = new Person(); --final
p.setName("chenssy");
}
}
같은final 수식 파라미터는 내부 클래스에서 매우 유용하다. 익명 내부 클래스에서 파라미터의 일치성을 유지하기 위해 있는 방법의 인삼이 내부 클래스에서 사용되어야 할 때 이 인삼은final이어야 한다.5. final과static
final과static를 함께 사용하면 신기한 화학반응이 발생하는데 그들이 동시에 사용할 때 구성원 변수를 수식할 수도 있고 구성원을 수식할 수도 있다.
구성원 변수에 대해 이 변수는 일단 값을 부여하면 바꿀 수 없다. 우리는 그것을'전역 상수'라고 부른다.클래스 이름을 통해 직접 접근할 수 있습니다.
구성원 방법의 경우 상속 및 변경할 수 없습니다.클래스 이름을 통해 직접 접근할 수 있습니다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.