学习Java第十七天--三个修饰符之final

9.3 final

9.3.1 什么是最终

  • 概念:最后的,不可更改的;
  • fianl可修饰的内容:
    类(最终类)
    方法(最终方法)
    变量(最终变量、常量)

9.3.2 fianl类

  • fianl修饰类:此类不能被继承;
  • String、Math、System均为final修饰的类,不能被继承;
  • final修饰方法:此方法不能被覆盖;
  • 意为最终方法,不支持子类以覆盖的形式修改;
public class TestFinalKeyword {

	public static void main(String[] args) {
		
		final int a = 10;//最终变量(常量),不可改变值
		
		System.out.println(Math.PI);
	}

}

/*final*/ class Super{//final修饰的类为最终类
	
	public /*final*/ void method() {//final修饰的方法为最终方法
		
	}
}

class Sub extends Super{//不能继承最终类
	
	public void method() {//不能覆盖最终方法
		
	}
}

9.3.3 final变量

  • final修饰变量:此变量值不能被改变(常量);
  • 所有final修饰的变量只能赋值一次,值不允许改变;

9.3.4 实例常量

  • 实例常量不再提供默认值,必须手动赋予初始值;
  • 赋值时机:显示初始化、动态代码块、构造方法;
  • 注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值;

9.3.5 静态常量

  • 静态常量不再提供默认值,必须手动赋予初始值;
  • 赋值时机:显示初始化,静态代码块
public class TestFinalVariable {

	public static void main(String[] args) {
		MyClass mc1 = new MyClass();
		System.out.println(mc1.num);
		
		MyClass mc2 = new MyClass(40);
		System.out.println(mc2.num);

	}

}

class MyClass{
	
	final int num;//常量必须显示初始化
	
	{
		//num = 20;//动态代码块中为实例常量赋值
	}

	public MyClass() {
		num = 30;//构造方法中为实例常量赋值
	}
	public MyClass(int i) {
		num =i;
	}
	
	static final int snum;//=1;显示初始化
	static{
		snum = 2;//静态代码块为静态常量赋值
	}
}

9.3.6 对象常量

  • final修饰基本类型:值不可改变;
  • final修饰引用类型:地址不可改变;
public class TestFinalObject {

	public static void main(String[] args) {
		final int a = 10;//a中的值不可变
		
		final int[] nums = new int[] {11,22,33};//nums中的地址不可变

		nums[0] = 1;
		
		//nums = new int[]{1,2,3,4,5}; //nums中的地址不可变
		
		final Student s1 = new Student();
		
		//s1.name = "jack"; //实例常量不可变
		//s1 = new Student(); //s1的地址不可变
		System.out.println(s1.name);
	}

}
class Student{
	final String name="tom";
}

9.3.7 总结

  • final修饰类:此类不能被继承;
  • final修饰方法:此方法不能被覆盖;
  • final修饰变量:此变量值不能改变。(无初始值,只允许赋值一次)
    局部常量:显示初始化;
    实例常量:显示初始化、动态代码块、构造方法;
    静态常量:显示初始化、静态代码块;
    基本数据类型常量:值不可改变;
    引用数据类型常量:地址不可变;
发布了34 篇原创文章 · 获赞 7 · 访问量 1299

猜你喜欢

转载自blog.csdn.net/weixin_44257082/article/details/104497261