final关键字的使用

public class FinalDome extends Final{
private final double PI = 3.1415926;//常量,不可改变
private int num = 20;

public void test(){
/*
* 用final修饰引用类型的变量,那么该变量只能始终引用这一个对象。
* 但是可以改变对象的内容。
*/
final FinalDome fDome = new FinalDome();
fDome.num = 100;
FinalDome fDome2 = new FinalDome();
//fDome = fDome2;报错
fDome2 = fDome;
}

/**
* @param args
*/
/*
* 内部类的实例化(new InClass();)存放在堆内存,系统的回收机制会不定时的查看
* ,如长时间没有引用指向他,就回收。
* 而方法的形参 存放在栈内存,当方法运行结束就回收。
* 为了延长形参(局部变量)的生命周期,即用final修饰
* 使得内部类对象的调用参数存在,不报错
*
* */
//定义一个方法,新的JDK8好像不需要用final修饰,内部已经实现这个功能
public void learning(final String str){
//定义一个内部类
class InClass{
//内部类的构造函数
public InClass(){
System.out.println("内部类的final变量:"+str);
}
}
InClass ic = new InClass();//在方法内实话化内部类
}
//父类的final修饰的方法不能被重写,但可以直接通过对象调用
//public final void sleep(){}


public static void main(String[] args) {
// TODO Auto-generated method stub
FinalDome fd = new FinalDome();
fd.learning("TheStar");
fd.sleep();//父类的方法

}

}
class Final{

public final void sleep(){
System.out.println("父类的final修饰的方法");
}
}

原文地址:https://www.cnblogs.com/nn369/p/7403263.html