转的 java的final关键字——修饰变量

1 篇文章 0 订阅

转至:https://blog.csdn.net/youyaecho/article/details/51198777
一、final修饰变量

final修饰变量不可变,这里是指引用不可变(Java中共提供两种数据类型,原始数据类型8种和引用类型),即它只指向初始时指向的那个对象,而不关心指向对象内容的变化。

final修饰的变量必须初始化。初始化根据变量类型而不同:

1、static变量。只能在定义,或者静态块中初始化。

//定义、声明 --也就是常量
private static final String NAME="abc";
//静态块
private static final String DESC;
static{
	DESC="def";
}

2、普通实例变量。可以在定义,非静态块,构造函数中初始化。

//定义 声明
private final String name="feiniu5566";
//非静态块
private final String age;
{
	age=28;
}
//构造函数
private final sex;
public ClassA(){
	sex="男";
}

3、局部变量。只能在定义时初始化。

//局部变量
public void print(String str){
	final String name="world";
}

注:static变量无法再非静态块和构造函数中初始化,因为静态变量在二者之前加载。同理,实例变量也无法在静态块中初始化,因为静态块加载时实例变量还没有定义。

 public static void main(String[] args) {
    final int aInt = 10;//必须初始化
    aInt = 1;//编译期间错误
    System.out.println("aInt = "+aInt);
    final StringBuffer s = new StringBuffer("Hello");
    s.append(" World!");
    System.out.println(s);//结果为Hello World!
    final StringBuffer s1 = new StringBuffer(" Hello");
    s1 = new StringBuffer("Hello World!"); //编译期间错误,不可以指向别的对象.
    /*
    * 不可变有两层含义:1 引用不可变 2 对象不可变
    * 综上,final指的是引用不可变,只能指向初始时指向的那个对象,而不关心对象内容的变化.
    * */
}

final数据另一种分类方法:

1.一个永不改变的编译时常量,还有static时命名全部大写:public static final int VALUE_ONE = 99;

2.一个在运行时初始化的值,而你不希望它被改变。private int i = (Random)random.nextInt(20);数值在运行时内被初始化时才会显现,编译时不知道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值