`

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保证变量的值在内部类创建后不会改变。 5. **final和效率** 在某些情况下,JVM会进行逃逸分析,如果发现final变量...

    Java 多线程与并发(6-26)-关键字- final详解.pdf

    在Java语言中,final域的访问顺序是:首先访问final域,然后访问非final域。 * final域为基本类型:final域为基本类型时,访问顺序是:首先访问final域,然后访问非final域。 * final域为引用类型:final域为引用...

    java中final和static的总结

    这是因为内部类会捕获封闭作用域中的变量的副本,而`final`确保变量在内部类中不可变。 接下来,我们讨论`static`关键字。`static`主要用于表示与类相关联的成员,而不是类的实例。其主要特性包括: 1. **静态变量...

    java的静态域实例域

    - 对于不变对象(immutable objects),所有域都是final和静态的,这样可以提高性能并防止意外修改。 总之,理解和熟练运用Java的静态域和实例域以及它们与构造方法的关系是Java程序员的基本技能。通过合理的设计和...

    浅析Java中的final关键字Java开发Java经验技

    在这个例子中,`count`变量必须是`final`的,因为线程可能会在创建后才执行,此时外部类的作用域可能已经结束。 总的来说,`final`关键字在Java中起到了关键的约束和保护作用,保证了代码的稳定性和可预测性。理解...

    AD域分页查询全部域用户数据

    因此,"AD域分页查询全部域用户数据"是一种优化查询效率的方法,它允许管理员分批获取用户信息,而不是一次性加载。 首先,我们需要理解AD域分页查询的工作原理。在Java中,我们可以使用JNDI(Java Naming and ...

    Java基于final修饰数据过程解析

    有初始值的 final 域域,即声明为 final 且当场就给定初始值的域。例如 `private final int valueOne = 9;`。final 修饰的基本数据类型变量存储的数值永恒不变。例如 `private final int valueOne = 9;`,你不能再对...

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

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

    java提高篇之关键字final编程开发技术共5页.pdf

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被广泛用于声明不可变的对象、变量和方法,确保代码的稳定性和安全性。在这个"java提高篇之关键字final编程开发技术共5页.pdf"的资料中,我们将会深入...

    java面向对象之final修饰符.docx

    2. final修饰的局部变量需要在定义时或在其作用域内初始化,且一旦初始化后不能改变。final修饰的形参在方法调用时根据传入的参数自动初始化,不能在方法内部再赋值。 ```java public class FinalLocalVariable { ...

    java中final修饰符实例分析

    - **局部变量**:局部变量被`final`修饰后,也必须在声明时或其作用域内显式初始化,之后不能再次赋值。 2. **final方法**: - 当一个方法被`final`修饰时,它不能被子类重写。这有助于确保代码的完整性和一致性...

    Java中final关键字的使用与注意总结

    在Java中,可以将实例域定义为final。在构建对象时必须初始化这样的值。必须确保在每个构造器执行之后,这个域的值被设置,并且在后面的操作中不再对其修改。使用final声明变量之后,这个值就不能修改,一般final...

    Java Persistence API 2.0 FINAL文档

    ### Java Persistence API 2.0 (JPA 2.0) Final Release文档解析 #### 标题:Java Persistence API 2.0 FINAL文档 #### 描述解析:Java Persistence API(JPA)2.0规范概述 Java Persistence API (JPA) 2.0是一个...

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

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

    深入Java Final

    Java 允许在类中定义未初始化的 `final` 域,但必须在每个构造器中对其进行赋值。这提供了一种灵活性,可以根据不同对象的需求在构造期间赋予 `final` 域不同的值。例如: ```java public class JavaBlankFinal { ...

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

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

    Java中final变量使用总结

    当在匿名内部类中引用外部局部变量时,该变量必须是`final`或实际上等效于`final`,因为内部类可能在外部作用域之后被实例化,因此需要一个不可变的引用。 总的来说,`final`关键字在Java中提供了一种强大的工具,...

    final关键字

    当一个匿名内部类引用了一个外部作用域的变量时,若要确保内部类在使用该变量时总是引用其初始值,变量必须声明为`final`。对于lambda表达式,如果捕获了外部的非final或effectively final变量,编译器会抛出错误。 ...

    Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释.doc

    Java 中局部内部类可以访问它所在方法中定义的 final 修饰的局部变量的合理解释 在 Java 中,局部内部类可以访问它所在方法中定义的 final 修饰的局部变量,这是一个非常重要的知识点。这是因为 JVM 在编译时会将 ...

    从java到c++,适合java程序员快速学习c++

    * C++ 中,常量可以在任何地方被定义,使用关键字 const 来定义常量,而 Java 中是 final。 类 * C++ 中对类的定义与 Java 有些不同,其中的 public 和 private 部分是分开的,而 Java 中,每一个元素都必须标明 ...

Global site tag (gtag.js) - Google Analytics