例如:
package com.q._final;
/*
* final :
* 表示最终的,不可变的 */
public class FinalData {
public final String s = "abc";
public void test(){
final Object obj = new FinalData();
}
}
当final修饰基本数据类型变量时不赋予初始值以及引用变量指向其他对象时就会报错
当final修饰基本数据类型变量被改变时,就会报错
final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。
3.修饰类
使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。
虽然对象被final修饰对象不可被继承,但其内容依然可以被改变
static关键字修饰变量时,会使该变量在类加载时就会被初始化,不会因为对象的创建再次被加载,当变量被static 修饰时就代表该变量只会被初始化一次
package com.q._final;
/*
* final :
* 表示最终的,不可变的 */
public class FinalData {
public final String s = "abc";
public void test(){
final Object obj = new FinalData();
}
public final double a= Math.random();
public static double b= Math.random();
public static final double c= Math.random();
public static void main(String[] args) {
FinalData finalData1 = new FinalData();
FinalData finalData2 = new FinalData();
FinalData finalData3 = new FinalData();
System.out.println(finalData1.a);
System.out.println(finalData2.a);
System.out.println(b);
System.out.println(b);
System.out.println(c);
}
}
例如图中所示,被static修饰的变量j,虽然创建两个对象,对值并没有变化。
final 修饰实例变量 必须在创建对象new 时赋值
原文:https://www.cnblogs.com/mycity/p/final.html