Java final 修饰符

final 修饰符
final可修饰类、方法、变量,用于表示它所修饰的类、方法、变量不可改变
1、final修饰变量
表示该变量一旦获得初始值就不可被改变;final可修饰成员变量(类变量、实例变量)、局部变量、形参;
final修饰的成员变量必须由程序员显示指定初始值:
类Field:必须在静态初始化块中或声明该Field时指定初始值
实例Field:必须在非静态初始化块、声明该Field或构造器中指定初始值;
注:系统不会对final成员进行隐式初始化;
public class FinalErrorTest {
	final int age; 
	 //初始化块
	{
		System.out.println(age);//编译报错 去除final OK
		age=6;
		System.out.println(age);
	}
	public static void main(String[] agrs){
		new FinalErrorTest();
	}
}
2、final修饰局部变量
系统不会对局部变量进行初始化,必须显式初始化,一旦赋值后不能重复赋值;
public class FinalLocalVariableTest
{
	public void test(final int a)
	{
		// 不能对final修饰的形参赋值,下面语句非法
		// 形参由系统根据传入的参数来完成初始化
		a = 5;
	}
	public static void main(String[] args)
	{
		//定义final局部变量时指定默认值,则str变量无法重新赋值
		finall String str = "hello";
		//下面赋值语句非法
		str = "java";
		//定义final局部变量时没有指定默认值;则d变量可进行一次赋值
		final double d;
		d = 5.4;
		//对final变量d重复赋值,语法错误
		d = 4.3;
		test(3);
	}
}
3、final修饰基本类型变量和引用类型变量区别
final 修饰基本类型变量时,不能对基本类型变量重新赋值,故基本类型变量不能被改变;
但对于引用类型变量,其保存的是一个引用,final只保证这个引用类型变量所引用的地址不会改变,
即一直引用同一个对象,但这个对象内容完全可以改变;
class Person
{
	private int age;
	public Person(){}
	public Person(int age)
	{
		this.age = age;
	}
	...省略setter、getter
}
public class FinalReferenceTest
{
	public static void main(String[] args)
	{
		final int[] Arr = {5,6,12,9};
		//修改对象内容,合法
		Arr[2] = -8;
		//修改对象引用,非法
		Arr = null;
		final Person p = new Person(12);
		//改变Person对象age Field,合法
		p.setAge(23);
		// 对p重新赋值,非法
		p = null;
	}
}
4、final方法
final 修饰的方法不可被重写
对一个private方法,因其只能在当前类中可见,其子类无法访问,故子类无法重写该方法;
若子类定义一个与父类private方法有相同方法名、形同形参列表、相同返回值类型的方法,
不是方法重写,而是重新定义了一个方法;
public class PrivateFinalMethodTest
{
	private final void test(int a){}
}
class Sub extends PrivateFinalMethodTest
{
	//重新定义一个方法
	public void test(int a){}
}


final 修饰的方法仅仅不能重写,但可以重载
public class FinalOverload
{
	public final void test(){}
	public final void test(Stirng arg){}
}
5、final类
final 修饰的类不可有子类,即不能被继承
public final class FinalTest{}
// 下面子类定义 出现编译错误
class Sub extends FinalTest{}

































  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值