final修饰成员变量的具体内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了final修饰成员变量的具体内容相关的知识,希望对你有一定的参考价值。

final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。

引用本身的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误

引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过

可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。
理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。其实那是徒劳的。
参考技术A final修饰成员变量意思是此成员变量值是不可改变的
比如 private final static String aa = "xxxxx";
aa的值永远不可改变
参考技术B final 关键词,代表在程序的执行过程中,此变量值不可以修改;
private static final int number = 0; “= 0” 是给变了“number”赋值!注意变量类型!
参考技术C private static final String number = 0; (对于static 和final 位置可以相互调换)追问

为什么最后要加那个“=0”啊。

追答

sorry写错了(把String类型改为Integer类型)也可以不写0 只要是数字就行,因为你要定义常量,这样后面必须有值,否则会报语法错误。这样加也主要是因为常量,基本上就不会再运用的过程中呗修改成其他的值,所以后面一定要加一个值!

本回答被提问者采纳

我的学习之路_第三章_匿名内部类

final:
final是最终修饰符,可以修饰类、成员方法、变量。
final修饰的类无法被继承。
final修饰的方法无法被重写。
final修饰的变量无法被再次赋值,变为了常量。

final修饰的引用数据类型变量,可以修改对象里面的属性内容,不可改变地址值
final修饰的成员变量,不能使用默认值,没有意义,必须在创建对象之前完成赋值。


static:
静态修饰符,被static修饰的内容属于类不专属于某个对象,多个对象共享使用这一个成员
使用static修饰的成员可以用类名直接访问,建议这样使用:
类名.静态方法名(参数);
类名.静态属性名;
静态修饰的成员只能直接访问静态修饰的成员,不能出现this、super,因为类是优于对象产生


内部类的概念:定义在一个类的内部的一个类叫内部类 分为:成员内部类与局部内部类
匿名内部类:
是局部内部类的一种
匿名内部类完成两件事:
1:定义了一个类型的匿名子类
2:定义类后,即刻创建了该类对象

目的:为了创建某个类的子类对象
格式:new 父类/接口() {
重写方法
};

包:软件组织文件的基本方式,用于将相同功能的类放到同一个包下,方便管理
在类的最前边使用package定义类所在包,注意:声明的package包必须与这个文件所在的文件夹一致
包的访问:(前提 类用public修饰)
同一个包下,随意访问
不同包下:
可以直接使用全名使用
为了方便,可以选择导包后,再直接使用类名本身,不加包名 在package后,class前使用import导入类
如果是lang包下的类,可以不导包,直接使用
访问权限:
见文档表格
代码块:一块执行代码的区域
构造代码块:每次创建对象调用
静态代码块:第一次创建对象调用,再创建其他对象时不再重复调用
第一次访问静态成员 也会调用

类加载就会执行一次

以上是关于final修饰成员变量的具体内容的主要内容,如果未能解决你的问题,请参考以下文章

java中final关键字

final 关键字:用来修饰类,方法,成员变量,局部变量

final成员变量

Java反射机制可以动态修改实例中final修饰的成员变量吗

怎么确保一个集合不能被修改

成员变量和局部变量