`

java final域

阅读更多

参考: http://liyuan2005.iteye.com/blog/209206

 

1.
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变

2.
其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中这两个 地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。

 

3.

引用对象 can never be changed to point to another object.
However, 引用对象 can be modified;

 

 

public class Bat {
	final double PI = 3.14; // 在定义时便给址值
	final int i; //称为"Blank final",因为要在构造函数中进行初始化,所以此处便不可再给值
	final List list; // 此变量也与上面的一样

	Bat() {
		//PI=3.14;  不能同时既在定义时给了值,又在构造函数中给另外的值
		i = 100;
		list = new LinkedList();
	}

	Bat(int ii, List l) {
		i = ii;
		list = l;
	}

	public static void main(String[] args) {
		// 1. 默认的构造函数
		Bat b = new Bat();
		System.out.println(b.i + "->" + b.list.getClass());

		// 不论是i的 值或是list的类型,一旦初始化,无法再更改
		// b.i=25;
		// b.list=new ArrayList();

		// 2.带参数的构造函数
		Bat b2 = new Bat(10, new ArrayList());
		System.out.println(b2.i + "->" + b2.list.getClass());
		// 可以通过重新初始化来指定i的值或list的类型
		
		
		//引用对象 can never be changed to point to another object. 
		//However, the object can be modified;
		b2.list.add("aaa");
	}
}
 
分享到:
评论

相关推荐

    深入理解Java final变量的内存模型

    对于 final 域,编译器和处理器要遵守两个重排序规则:  在构造函数内对一个 final 域的写,与随后把这个构造对象的引用赋值给一个变量,这两个操作之间不能重排序  初次读一个包含 final 域的对象的引用,与...

    深入理解Java内存模型.程晓明(带书签文字版).pdf

    写 final 域的重排序规则 56 读 final 域的重排序规则 57 如果 final 域是引用类型 60 为什么 final 引用不能从构造函数内“逸出” 63 final 语义在处理器中的实现 65 JSR-133 为什么要增强 final 的语义 65 ...

    深入理解java内存模型

    写final域的重排序规则 读final域的重排序规则 如果final域是引用类型 为什么final引用不能从构造函数内“逸出” final语义在处理器中的实现 JSR-133为什么要增强final的语义 总结 处理器内存模型 JMM,处理器内存...

    深入理解Java内存模型??final

    与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:  1、在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个...

    JAVA对接AD域集成

    private final String URL = "ldap://ip:端口";//地址,根据对方文档进行修改 private final String BASEDN = "OU=XX集团,DC=gemdale,DC=com"; //要搜索的上下文或对象的名称,根据对方文档进行修改 private final ...

    Java岗面试核心MCA版

    java核心面试题汇总,包含问题和答案!! 普通类和抽象类有哪些区别? 普通类不能包含抽象方法,抽象类可以包含抽象方法。 抽象类不能直接实例化,普通类可以直接实例化。 抽象类能使用 final 修饰吗? 不能,定义...

    java基础入门教程

    第 一 章 Java概 述 § 1.1 Java语 言 出 现 的 背景 、 影 响 及 应 用 前 景 一 、 背 景 最 近 一 年 多 来 ,在 Internet上 出 现 的 特 别 吸 引 人 的 事 件 就是 Ja va语 言 和 用 Java编 写 的 浏 览 器...

    Java并发编程实战

    3.4.1 Final域 3.4.2 示例:使用Volatile类型来发布不可变对象 3.5 安全发布 3.5.1 不正确的发布:正确的对象被破坏 3.5.2 不可变对象与初始化安全性 3.5.3 安全发布的常用模式 3.5.4 事实不可变对象 3.5.5 ...

    java 编程入门思考

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    java面试真题整理

    3.static:存放在静态域中和类属于同一个属性,修饰的方法:类名.static 4.Java多态的体现方式方法的重载,重写,对象的多态性 1.编译时的多态:方法重载(个数、类型、顺序) 2.运行时多态:重写,对象的多态性...

    Java初学者入门教学

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    java联想(中文)

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Java 基础核心总结 +经典算法大全.rar

    向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类...

    java面试过程当中遇到的一些题目

    2. 作用域public,protected,private,以及不写时的区别? 9 3. 编程输出如下图形。 9 4. JAVA的事件委托机制和垃圾回收机制 10 5. 在JAVA中,如何跳出当前的多重嵌套循环? 10 6. 什么是java序列化,如何实现java序列...

    有关Java中关键字final的理解

    一、final数据  在Java编程语言中,有时候需要告知编译器一段数据是不变的编译期常量。对于这种情况,编译器可以将此常量值带入需要用到它...  通常,对于一个既是static又是final的域只占一段不能改变的存储空间。

    Java常见面试题208道.docx

    4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String(“i...

    JAVA_Thinking in Java

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Thinking in Java简体中文(全)

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

Global site tag (gtag.js) - Google Analytics