Java final变量、final方法、final类

一、final变量

咋们先看个,例子,再来解释为什么会这样!

public class Main {

    public static void main(String[] args) {
	// write your code her
        final int a[]=new int[2];
        final int b=1;
        a[0]=1;
        System.out.println("a[0]="+a[0]+",b="+b);
        a[0]=9;
        //b=9;    会报错
        System.out.println("a[0]="+a[0]+",b="+b);
    }
}

在此之前是不是坚信final 修饰的变量,地球毁灭都不会被改变?我一开始是这样想的,后面我发现我错了,并不是,原因是:

final 关键词定义基本数据类型的常量,就不能被改变。比如  fianl double PI=3.1415; 后面对PI 改变会报错,就像上面的b一样。

并且,一旦一个对象被修饰为fianl 后,就只能恒定指向这个对象,无法改变指向另外一个对象。但是!这个对象本身的值确实可以改变的。这就好比,两个人结婚了,OK,在户口本上配偶的名字指向了这个对象,但是对象心中的梦中情人却可以随时改变!即得到了你这个人,却没得到你的心(指定了对象不能变,但是对象的值却可以改变)。

使用static final 可以让对象的心死心塌地,宇宙毁灭都不变。static final 占据一段不能改变的存储空间。

 

再看个例子更加明白(心里装可以改变哦!):


public class Main {

    public static void main(String[] args) {
	// write your code her
       final Test test=new Test();
       System.out.println("test.a="+test.a+",test.b="+test.b);
       System.out.println("a+b="+test.add());
       test.a=5;
       test.b=5;
       System.out.println("test.a="+test.a+",test.b="+test.b);
       System.out.println("a+b="+test.add());
    }

    public static class Test {
        int a=2;
        int b=3;
        int add(){
            return a+b;
        }
    }
}

所以想要天长地久宇宙毁灭都不变的爱情,呸,口误,应该是常量,欢迎订购 static final . 你值得拥有,嘿嘿!

 

 

二、final 方法

首先,你要知道,被final定义的方法不能够被重写。所以可以用来防止子类瞎修改。而且你知道吗?private 修饰的方法被隐式指定为final 类型,所以无需再private前面加 final。

 

三、final 类

首先,定义为final 的类不能够被继承。如果希望一个类 不允许任何继承,不允许任何改动,可以定义为final 类。

如果某个类被定义为了 final 形式,则所有方法都隐式设置为 final 形式,但是 其中的成员变量可以被定义为 非final 当然也可以是 final 形式。

/**
 * 总结一下在程序中final数据可以出现的位置
 * 
 * @author pan_junbiao
 *
 */
public class FinalDataTest
{
	// final成员变量不可更改
	final int VALUE_ONE = 6;
 
	// 在声明final成员变量时没有赋值,称为空白final
	final int BLANK_FINALVAULE;
 
	// 在构造方法中为空白final赋值
	public FinalDataTest()
	{
		BLANK_FINALVAULE = 8;
	}
 
	// 设置final参数,不可以改变参数x的值
	int doIt(final int x)
	{
		return x + 1;
	}
 
	// 局部变量定义为final,不可以改变i的值
	void doSomething()
	{
		final int i = 7;
	}
}

OK  今天先到这儿,砥砺前行!

 

 

相关推荐
©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页