Java基础-final关键字

1.final修饰的类无法继承

final关键字
1.final是java语言的一个关键字
2.final表示最终的,不可变的。
3.final可以修饰变量以及方法、还有类
4.final修饰的变量?
5.final修饰的方法?
final修饰的方法无法覆盖,无法重写
6.final修饰的类?
final修饰的类无法继承
final class A{
}
//B类继承A类,相当于对A类的功能进行扩展,如果你不希望别人对A类进行扩展,你可以给A类骄傲final关键字,这样的话A类就无法继承了。
class B extends A{
}
在这里插入图片描述

如String类就是最终类
在这里插入图片描述

2.final修饰的方法无法覆盖

class C{
    
    
	public final void dosome(){
    
    
		System.out.println("c的dosome");
	}
}
class D extends C{
    
    
	public void dosome(){
    
    
		System.out.println("d的dosome");
	}
}

在这里插入图片描述

3.final修饰局部变量

public static void main(String[] args) {
    
    
		//局部变量
		int i=100;
		//重新赋值
		i=200;
		
		//局部变量
		final int k=100;
		//重新赋值
		k=300;
	}

final修饰的局部变量,一旦赋值不能重新赋值

final int m;
		//第一次赋值
		m=200;
		//重新赋值
		m=300;

在这里插入图片描述
重点:final修饰的变量,只能赋一次值。

4.final修饰引用

final修饰的变量,只能赋一次值。
引用是不是一个变量呢???,是的

public class FinalTest02 {
    
    
	public static void main(String[] args) {
    
    
		Person p1=new Person(20);
		System.out.println(p1.age);
		//代码不管怎么变化,p也是一个变量(只不过这里它有一个特殊的名字,引用)
		final Person p=new Person(30);
		p=new Person(30);
	}
}
class Person{
    
    
	int age;
	public Person(){
    
    }
	public Person(int age){
    
    
		this.age=age;
	}
}

在这里插入图片描述
错误:无法为最终变量p分配值
注意:局部变量没有初始值。
final修饰的引用:
该引用只能指向1个对象,并且它只能永远指向该对象。无法再指向其他对象。并且在该方法执行过程中,该引用指向该对象之后,该对象不会被垃圾回收器回收。直到当前方法结束,才会释放空间。
虽然final的引用指向A后,不能再重新指向对象B,但是对象A的数据可以被修改。
在这里插入图片描述

5.final修饰实例变量

final修饰的实例变量
万变不离其宗。final修饰的变量只能赋值一次。(这句话到哪里都好使)
你是否还记得:实例变量如果没有手动赋值的话,系统会赋默认值
java程序设计,甩锅甩的很好。
实例变量在什么时候赋值(初始化)
构造方法执行的过程中赋值(new的时候赋值)

终极结论:
final修饰的实例变量,系统不负责赋默认值,要求程序员必须手动赋值(定义的时候就必须赋值)
这个手动赋值,在变量后面赋值可以,在构造方法中赋值也可以

扫描二维码关注公众号,回复: 12486595 查看本文章
public class FinalTest03 {
    
    
	public static void main(String[] args) {
    
    
		
	}
}
class User{
    
    
	//编译器报错
//	final int age;
	//可以,因为程序员手动赋值了
	final double height=1.8;
	
	//以下这一堆代码全部联合起来,weight变量也是赋值了1次。
	//实例变量
	final double weight;
	//构造方法
	public User(){
    
    
		//只要我赶在系统赋默认值之前赋值就行。
		this.weight=80;
	}
}

6.常量

final修饰的实例变量
final修饰的实例变量一般添加static修饰
终极修饰:
static final联合修饰的变量称为常量
常量名建议全部大写,每个单词之间采用下划线连接
常量:实际上常量和静态变量一样,区别在于:常量的值不能改变,常他们都是存储在方法区,并且都是在类附加时初始化
常量无法重新赋值
常量一般是公开的,是public的

public class FinalTest04 {
    
    
	public static void main(String[] args) {
    
    
		
	}
}
class Chinese{
    
    
	//身份证,每个人都不一样,对象级别的
	String idCard;
	//姓名,对象不同姓名不一样
	String name;
	//国家的值就是一个固定值,"中国"
	//既然这里的值不会改变,还有必要声明为实例变量吗
	//实例变量在堆中,一个对象一份,100个对象100份
	//实例变量既然使用final修饰了,说明该实例变量不会随着对象的变化而变化。
	//该实例变量前面应该添加:static关键字,变为静态的,存储在方法区。
//	static final String country="中国";
	static final String COUNTRY="中国";
	//i永远都是10,创建100个对象,i也是10
	//i是10是永远不会变化的,既然这样,没必要声明为实例变量,最好是静态的,节省内存空间。
			
}
class MyMath{
    
    
	public static final double PI=3.1415926;
}

7.总结:

1、final关键字

  • 1.1、final修饰的类无法继承。
  • 1.2、final修饰的方法无法覆盖。
  • 1.3、final修饰的变量只能赋一次值。
  • 1.4、final修饰的引用一旦指向某个对象,则不能再重新指向其它对象,但该引用
    指向的对象内部的数据是可以修改的。
  • 1.5、final修饰的实例变量必须手动初始化,不能采用系统默认值
  • 1.6、final修饰的实例变量一般和static联合使用,称为常量
    public static final double PI = 3.1415926;

猜你喜欢

转载自blog.csdn.net/qq_39736597/article/details/113829099