`
cakin24
  • 浏览: 1389908 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

final成员变量和final局部变量

    博客分类:
  • java
阅读更多

一 final变量简介

1 final修饰变量时表示该变量一旦获得初始值之后就不可能改变。

2 final既可修饰成员变量,也可修饰局部变量。

 

二 final修饰成员变量

1 final修饰成员变量时,必须由程序员显示地指定初始值。

2 类变量:必须在静态初始化块中指定初始值或声明该变量时指定初始值,而且只能在两个地方的其中之一指定。

3 实例变量:必须在非静态初始化块中,声明该实例变量或构造器中指定初始化值,而且只能在三个地方其中之一指定。

4 代码示例一正确用法

public class FinalVariableTest
{
	// 定义成员变量时指定默认值,合法。
	final int a = 6;
	// 下面变量将在构造器或初始化块中分配初始值
	final String str;
	final int c;
	final static double d;
	// 既没有指定默认值,又没有在初始化块、构造器中指定初始值,
	// 下面定义的ch实例变量是不合法的。
	// final char ch;
	// 初始化块,可对没有指定默认值的实例变量指定初始值
	{
		//在初始化块中为实例变量指定初始值,合法
		str = "Hello";
		// 定义a实例变量时已经指定了默认值,
		// 不能为a重新赋值,因此下面赋值语句非法
		// a = 9;
	}
	// 静态初始化块,可对没有指定默认值的类变量指定初始值
	static
	{
		// 在静态初始化块中为类变量指定初始值,合法
		d = 5.6;
	}
	// 构造器,可对既没有指定默认值、有没有在初始化块中
	// 指定初始值的实例变量指定初始值
	public FinalVariableTest()
	{
		// 如果在初始化块中已经对str指定了初始化值,
		// 构造器中不能对final变量重新赋值,下面赋值语句非法
		// str = "java";
		c = 5;
	}
	public void changeFinal()
	{
		// 普通方法不能为final修饰的成员变量赋值
		// d = 1.2;
		// 不能在普通方法中为final成员变量指定初始值
		// ch = 'a';
	}
	public static void main(String[] args)
	{
		FinalVariableTest ft = new FinalVariableTest();
		System.out.println(ft.a);
		System.out.println(ft.c);
		System.out.println(ft.d);
	}
}

5 运行结果

6

5

5.6

6 结果分析

请参考注释掌握final用法。

7 代码示例一错误用法

 

public class FinalErrorTest
{
	// 定义一个final修饰的实例变量
	// 系统不会对final成员变量进行默认初始化
	final int age;
	{
		// age没有初始化,所以此处代码将引起错误。
		System.out.println(age);
		age = 6;
		System.out.println(age);
	}
	public static void main(String[] args)
	{
		new FinalErrorTest();
	}
}

 

8 代码分析

如果打算在构造器,初始化块中对final成员变量进行初始化,则不要在初始化之前就访问成员变量的值。

 

三 final局部变量

1 使用final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。

2 给局部变量赋初始值时,只能一次,不能重复。

3 代码示例

public class FinalLocalVariableTest
{
	public void test(final int a)
	{
		// 不能对final修饰的形参赋值,下面语句非法
		// a = 5;
	}
	public static void main(String[] args)
	{
		// 定义final局部变量时指定默认值,则str变量无法重新赋值
		final String str = "hello";
		// 下面赋值语句非法
		// str = "Java";
		// 定义final局部变量时没有指定默认值,则d变量可被赋值一次
		final double d;
		// 第一次赋初始值,成功
		d = 5.6;
		// 对final变量重复赋值,下面语句非法
		// d = 3.4;
	}
}

4 代码分析

上面程序还示范了final修饰形参的情形。因为形参在调用该方法时,由系统根据传入参数来完成初始化,困此使用final修饰的形参不能被赋值。

0
1
分享到:
评论

相关推荐

    final修饰成员变量和局部变量.md

    本文章是关于final部分知识所作的自我总结,内容为final对成员变量和局部变量修饰的简要解答,除了对自我java学习的一个小结,也希望能够帮助到在java路上对该内容疑惑的同行

    局部变量用final的讨论

    总结来说,"局部变量用final的讨论"涵盖了Java编程中`final`关键字的使用,包括其在变量不变性、代码优化、多线程安全、代码可读性和函数式编程中的作用。通过学习这个主题,开发者可以提升代码质量和效率,理解Java...

    Java成员变量类变量局部变量的区别共5页.pdf.zip

    5. 是否共享:成员变量和类变量可能被多个对象共享,而局部变量仅在声明它的作用域内独立存在。 了解这些基本概念有助于写出更加合理、高效的Java代码。在实际编程中,根据需求选择适当的变量类型,可以帮助优化...

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

    ### Java中局部内部类可以访问它所在方法...- 非final局部变量不能被局部内部类访问,因为它们可能在方法执行过程中发生变化。 - 这种设计保证了局部内部类的灵活性和安全性,同时也展示了Java语言对内部类的强大支持。

    JavaSE之final关键字与成员变量的类型

    // 错误,final变量不能再次赋值 final Student stu1 = new Student("张"); // stu1 = new Student("程"); // 错误,final引用变量的地址值不能改变,但对象内容可以改变 // stu1.setName("程"); // 正确,对象...

    局部内部类和匿名内部类使用局部变量为什么要final1

    这种情况下的阅读和运行结果不一致,为了避免这种混淆,Java规定局部变量必须是final的,确保一旦赋值就不能更改,从而保证内部类的成员变量(实际上是局部变量的副本)与原始变量保持一致。 4. **final关键字的...

    java_中的_final_变量[文].pdf

    它可以修饰成员变量、局部变量和类(静态)变量。对于成员变量,`final`变量在构造函数中或初始化块中赋值,静态`final`变量则通常在类加载时初始化。如果未显式赋值,系统会赋予默认值,例如`int`类型的默认值是0。...

    final类,方法,变量

    同样,在Java 8及更高版本中,`final`局部变量可以作为lambda表达式的捕获变量,保证了lambda表达式只能读取而不能修改这些变量。 在工具方面,IDEs如Eclipse和IntelliJ IDEA提供了很好的支持来使用`final`关键字。...

    【Java语言基础】final关键字

    final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例变量),也可以修饰局部变量,形参。 final修饰成员变量 类变量:当类初始化时,系统会为类变量分配内存,...

    动力节点老杜Java基础入门视频教程——final修饰局部变量

    012-JavaSE进阶-final修饰局部变量

    Eclipse设置保存时自动给变量加final

    在这个特定的情况下,用户可能希望在保存代码时,Eclipse能自动将符合条件的局部变量声明为`final`。`final`关键字在Java中用于声明不可变的变量,这有助于提高代码的可读性、可维护性和安全性。 在Eclipse中实现这...

    day11 04 final关键字用于修饰局部变量

    day11_04_final关键字用于修饰局部变量

    final和static用法详解JAVA

    final 修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前...

    Java final关键字

    // final局部变量 System.out.println(local); } public static void main(String[] args) { final int argFinal = Integer.parseInt(args[0]); // final方法参数 } } ``` 在上面的例子中,`constant`、`...

    Java关键字final、static使用总结

    被 static 修饰的成员变量和成员方法独立于该类的任何对象,可以在它的任何对象创建之前访问,无需引用任何对象。 1、static 变量(静态变量) static 变量是独立于该类的任何对象的,可以在它的任何对象创建之前...

    Java类变量和方法.doc

    方法中的变量有不同作用域:成员变量在整个类内有效,局部变量只在其定义的方法或块内有效,方法参数在其所属的方法或构造器内有效,而异常处理参数则局限于特定的异常处理代码。 构造方法是与类同名的方法,用于...

    Java中final的深度剖析

    在创建匿名内部类时,如果需要访问外部类的非final局部变量,该变量必须声明为final。这是因为匿名内部类可以看作是外部类的子类,而局部变量的作用域仅限于方法,所以必须通过final保证变量的值在内部类创建后不会...

    final关键字和static_用法

    静态方法中不能访问非静态成员变量和非静态成员方法,因为这些成员是在创建对象之后才存在的,而静态方法并不依赖于任何特定的对象实例。 示例代码: ```java public class Test4 { public static void main...

Global site tag (gtag.js) - Google Analytics