final关键字

47 篇文章 1 订阅

b站学习视频以及笔记-尚硅谷_Java零基础教程

java入门必备-适合初学者的全套完整版教程(宋红康主讲)

final关键字:最终的

1. 可以用来修饰:类、方法、变量

2. 具体的:

2.1 final 用来修饰一个类:此类不能被其他类所继承。

比如:String类、System类、StringBuffer类

2.2 final 用来修饰方法:表明此方法不可以被重写

比如:Object类中getClass();

2.3 final 用来修饰变量:此时的"变量"就称为是一个常量

2.3.1 final修饰属性:

可以考虑赋值的位置:显式初始化、代码块中初始化、构造器中初始化。

不能采用方法赋值,通过方法去赋值,是会报错的,因为方法太晚了,构造器一旦调用完成,对象就造出来了,在堆空间相应的属性就加载了,属性就应该有值了,我们通过对象去调方法,只是都属性值进行修改,但是由于是常量,无法修改。所以不使用方法赋值。

2.3.2 三种赋值的具体使用

使用情况:

  • 显示初始化,当要属性的的值都一样时。
  • 当这个值不是简简单单的值,而是调的另外一个方法,而且这个方法还抛异常,就只能在代码块中赋值。
  • 构造器赋值,多个对象,大家拥有的属性值都不一样。
  • 注意:如果有多个构造器,只在构造器中赋值的常量必须在每个构造器都要赋值,否则会报错,因为我们用不同的构造器造对象时,属性都要被重新赋值。
2.3.3 final修饰局部变量:

尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。

2.3.4 static final:

用来修饰属性:全局常量

3. 代码实现

public class FinalTest {
	
	//编译出错,不能默认初始化
//	final int tao;
	
	//显示初始化,当属性的值都一样时,
	//比如此处的WIDTH、LEFT、RIGHT都为0时,采用显式初始化赋值
	final int WIDTH = 0;
	final int LEFT;
	final int RIGHT;
//	final int DOWN;//通过方法去给DOWN赋值是不靠谱的
	
	
	//当这个值不是简简单单的值,而是调的另外一个方法,而且这个方法还抛异常,就只能在代码块中赋值
	{
		LEFT = 1;
	}
	
	
	//构造器赋值,多个对象,大家拥有的属性值都不一样
	public FinalTest(){
		RIGHT = 2;
	}
	//如果有多个构造器,只在构造器中赋值的常量必须在每个构造器都要赋值,否则会报错,
	//因为我们用不同的构造器造对象时,都RIGHT都要被重新赋值
	public FinalTest(int n){
		RIGHT = n;
	}
	
	//通过方法去赋值,是会报错的,因为方法太晚了,构造器一旦调用完成,对象就造出来了,在堆空间相应的属性就加载了,
	//属性就应该有值了,我们通过对象去调方法,只是都属性值进行修改,但是由于是常量,无法修改。所以不使用方法赋值。
//	public void setDown(int down){
//		this.DOWN = down;
//	}
	
	
	public void doWidth(){
//		width = 20;
	}
	
	
	public void show(){
		final int NUM = 10;//常量
//		NUM += 20;常量不能改变值,只能赋一次值
	}
	
	public void show(final int num){
		//num = 20;//编译不通过,我们在调用该方法时,传递实参给形参,给常量形参赋一个实参。一旦赋值 以后,
				//就只能在方法体内使用此形参,但不能进行重新赋值。
		System.out.println(num);
	}
	
	
	public static void main(String[] args) {
		
		int num = 10;
		
		num = num + 5;
		
		FinalTest test = new FinalTest();
//		test.setDown(3);
		
		test.show(10);
	}
}


final class FinalA{
	
}

//class B extends FinalA{
//	
//}

//class C extends String{
//	
//}

class AA{
	public final void show(){
		
	}
}

class BB extends AA{
	
//	public void show(){
//		
//	}
}

4. native关键字:

本地的,调用底层的C、C+++,具体调用在Java中隐藏起来了

5. final关键字的应用举例

public final class Test {
    public static int totalNumber = 5;
    public final int ID;
    public Test() {
        ID = ++totalNumber; // 可在构造器中给final修饰的“变量”赋值
    }
    public static void main(String[] args) {
        Test t = new Test();
        System.out.println(t.ID);//6
        Test t1 = new Test();
        System.out.println(t1.ID);//7,以后每创建一个无参构造函数id就会加一
        final int I = 10;
        final int J;
        J = 20;
        J = 30; // 非法
    }
}
public class Something {
    public static void main(String[] args) {
        Other o = new Other();
        new Something().addOne(o);
    }
    public void addOne(final Other o) {
        // o = new Other();不合法
        o.i++;//合法。变量o是常量,但是它的属性不是常量可以变。
        //比如说你找了一个女朋友,他是你的final,她是你最后的老婆了,
        //然后她是你最后一个老婆不会变,但是她的容貌会随着时间的流逝
        //而变化,所以属性是可以变化的。
    }
}
class Other {
    public int i;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值