>Java >Java인터뷰 질문들 >면접관: 최종 키워드의 역할과 정적 키워드와의 차이점을 자세히 설명해 주세요.

면접관: 최종 키워드의 역할과 정적 키워드와의 차이점을 자세히 설명해 주세요.

王林
王林앞으로
2021-03-08 10:27:404574검색

면접관: 최종 키워드의 역할과 정적 키워드와의 차이점을 자세히 설명해 주세요.

서문:

역시 지난 면접에서 면접관님이 이런 질문을 또 하셨습니다. 최종 키워드의 구체적인 의미를 알려주시며, 역할과 static과의 차이점을 자세히 설명해 주시겠습니까? 인터뷰에 응하는 모든 사람이 이 질문에 집중할 수 있도록 답변은 참고용으로 특별히 편집되었습니다.

1. final 키워드의 의미

final의 표면적 의미는 C 언어의 const 키워드와 유사하며, 변경할 수 없는 수량을 의미하며 이는 정적 스칼라 static과 다릅니다. 예, 정적 변수는 하나의 저장 공간만 참조하며 값은 변경될 수 있습니다. final을 사용하는 이유는 소프트웨어 설계 관점에서 보면 다른 사람들이 final이라는 키워드를 보면 그것이 무엇을 의미하는지 알게 되고 그것을 이해하는 효과를 얻게 되기 때문이다. 오용을 방지하려면 프로그래밍에 주의해야 합니다.

Java에서 최종 수정 사항은 상수이며 변수 이름은 대문자로 시작해야 합니다.

Math 클래스: public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846;
...Java 소스에는 많은 변수가 있습니다. code 모두 final

2으로 수정됩니다. final

final의 역할은 수정 위치에 따라 다릅니다. 세 가지 상황의 경우:

(1) final로 수정되는 변수는 초기화되고 할당되어야 합니다. 나중에 다시 할당할 수 없습니다.

참고: 지역 변수 자체에는 범위가 있고 개인 및 공개와 같은 단어로 수정되지 않기 때문에 지역 변수는 우리 논의 범위에 포함되지 않습니다.

(2) 수정된 메소드, final로 수정된 메소드는 다시 작성할 수 없다는 의미입니다.

(3) 수정된 클래스, final로 수정된 클래스는 상속할 수 없습니다.

참고: 최종 수정된 클래스의 경우 클래스의 모든 멤버 메서드는 암시적으로 최종 메서드로 지정됩니다.

2.1. 최종 수정된 변수

final로 수정된 변수는 명시적으로 초기화되어야 합니다. 1) 정의 시 초기화, 2) 생성자에서 값 설정, 3) 비정적 블록에서 . 최종 인스턴스 변수가 값을 설정합니다.

최종 수정 변수는 이 변수가 초기화된 후에는 변경될 수 없다는 것을 의미합니다. 여기서 불변성은 기본 유형의 경우 해당 값이 변경 불가능하고 개체 변수의 경우 해당 참조가 변경 불가능함을 의미합니다. 즉, 다른 개체를 가리킬 수 없습니다. . 물체.

public class Test01{    
    final int x1= 10000;    
    final int x2;    
    final int x3;
    {
       x2 = 20000;
        }
    Public exe3(){        
        this.x3 = 3000;
        }
}

final에 의해 수정된 변수가 객체 유형인 경우 unchangeable은 변수가 다른 객체를 가리킬 수 없지만 객체의 값은 변경될 수 있음을 의미합니다.

final Operate operate = new Operate() ;// operate有一个普通变量i初始化为10operate.i = 11;
operate.i = 12;
System.out.println(operate.i); //输出12上述是自定义类,即便是数组,List等集合类型,所保存的值也是可以更改的。

3 final과 static의 차이.

정적은 멤버 변수에 대해 작동하여 하나의 복사본만 저장되었음을 나타내는 반면 final은 변수가 변경 불가능함을 확인하는 데 사용됩니다. 온라인에서 예제를 살펴보세요:

public class Test {
    public static void main(String[] args)  {
        MyClass myClass1 = new MyClass();
        MyClass myClass2 = new MyClass();
        System.out.println(myClass1.i);
        System.out.println(myClass1.j);
        System.out.println(myClass2.i);
        System.out.println(myClass2.j);
 
    }
}
class MyClass {
    public final double i = Math.random();
    public static double j = Math.random();
}
//运行结果,两次打印,j的值都是一样的,j是static类型的属于类,因此两次值相同。i不是static的因此属于对象,但是i的值是不可变的。

(동영상 공유 학습: java 비디오 튜토리얼)

4. 기타 최종 관련 지식

(1) final 키워드를 사용합니다. 컴파일러가 컴파일 단계에서 변수의 값을 결정할 수 있으면 컴파일러는 해당 변수를 컴파일 타임 상수로 사용합니다. 런타임에 이를 결정해야 하는 경우 컴파일러는 관련 코드를 최적화하지 않습니다.

public class Test {    
    public static void main(String[] args)  {
        String a = "hello2";  
        final String b = "hello";
        String d = "hello";
        String c = b + 2;  
        String e = d + 2;
        System.out.println((a == c));
        System.out.println((a == e));
    }
}
    //final类型,在编译阶段能够确定值。
    //非final类型在编译阶段确定不了
    输出:
        true
        false
    public class Test {    
            public static void main(String[] args)  {
            String a = "hello2";  
            final String b = getHello();
            String c = b + 2;  
            System.out.println((a == c));
 
        }     
    public static String getHello() {        
        return "hello";
    }
}
//即便是final类型,编译阶段也确定不了值。输出false

(2) final을 finally, finalize() 등과 혼동하지 않도록 주의하세요.

(3) 클래스, 메소드, 변수를 final로 선언하면 성능이 향상되어 JVM이 추정하고 최적화할 수 있는 기회를 갖게 됩니다.

(4) 인터페이스의 변수는 모두 공개 정적 최종입니다.

관련 추천: Java 인터뷰 질문 및 답변

원본 링크: http://www.cnblogs.com/liun1994/p/6691094.html

원저자: Suifenglangzi90

위 내용은 면접관: 최종 키워드의 역할과 정적 키워드와의 차이점을 자세히 설명해 주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제