final关键字

: final关键字修饰类,不可以被继承。即final类没有子类;

: final 关键字修饰方法,方法不可被重写;

: final 关键字修饰属性(变量)时,变量不可再被赋值;


final 修饰属性(变量)

final修饰属性(变量)时,此时的属性称之为常量;

java中用final定义常量时,命名规范全部用大写;

常量在java内存常量池中的地址不可以改变,但是地址中的值(即对象中的属性)可以改变;

此处先插入一下对变量扩展,此处一直比较迷糊,引用一篇其他人简洁的博客http://blog.sina.com.cn/s/blog_ae96abfd0101kvcp.html

摘抄其中比较精简的文字:

java中数据类型分为两大类:基本数据类型与复合数据类型

相应地,变量也有两种类型:基本类型与引用类型

Java的8中基本类型的变量称为基本类型变量,而类、接口和数组变量是引用类型变量


再简单插入下java内存中常量池的扩展:

常量池在java虚拟机启动的时候加载,即常量池在代码编译的时候被确定,保存在.class中;

常量池中基本类型值已经在编译的时候确定,存放引用类型的引用变量的地址;


所以上面横线的那句话可以拆分成两句:

1、如果常量是基础数据类型的,则值不能被改变;

2、如果常量是引用类型的,则引用地址不能被改变,但是地址中的值可以被改变;


样例:

定义一个类

package main.test;


public class FinalDemo {
private String str;

public FinalDemo(String str){
this.str = str;
}


public String getStr() {
return str;
}


public void setStr(String str) {
this.str = str;
}
}


--定义常量

package main.test;


public class FinalTest {


public static void main(String[] args) {

final FinalDemo f1 = new FinalDemo("1");
final FinalDemo f2 = new FinalDemo("2");
fa=f2;

}
}

//编译报错:The final local variable f1 cannot be assigned. It must be blank and not using a compound assignment

可以看到引用地址不可以再被改变


package main.test;


public class FinalTest {


public static void main(String[] args) {

final FinalDemo f1 = new FinalDemo("1");
f1.setStr("2");
System.out.println(f2.getStr());
}
}

//运行结果是2,说明引用地址中的值是可以改变的,即引用内容可以被改变



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值