java final关键字

final关键字的含义是什么?

final关键字通常指“这是无法改变的”。主要用于设计或者优化。但是随着java的发展,优化的功能基本无效了。

final关键字的用法有哪些?

  1. final数据:数据具有只读性。
  2. final方法:方法不可被覆盖。(private方法隐含final效果)
  3. final类:类不可被继承。

final关键字具体怎么用?

final关键字用法如下:Test0507.java

class Value{//final数据具有只读性。
	int i;
	Value(int i){this.i=i;}
}
public class Test0507{
	String id;
	Test0507(String id){this.id=id;}

	final int i=1;//编译期常量
	static final int VALUE_I=2;//编译期常量

	final int j=(int)(Math.random()*100)+1;//每次初始化都给变量随机赋值
	static final int VALUE_J=(int)(Math.random()*100)+1;//static成员只会初始化一次,所以值不会变

	final Value k=new Value(3);//final使引用恒定不变,但其自身可以被修改
	static final Value VALUE_K=new Value(4);
	
	public String toString(){
		return id+": j= "+j+",VALUE_J= "+VALUE_J;
	}
	public static void main(String[] args){
		Test0507 t1=new Test0507("t1");
		System.out.println(t1);
		Test0507 t2=new Test0507("t2");
		System.out.println(t1);
		System.out.println(t2);		
		//t1.i=2;//错误:无法为最终变量i指定值
		//VALUE_I=3;//错误:无法为最终变量VALUE_I指定值
		//t1.k=new Value(5);//错误:无法为最终变量k指定值
		//VALUE_K=new Value(5);//错误:无法为最终变量VALUE_K指定值
		System.out.println("t1.k.i= "+t1.k.i);
		System.out.println("t1.VALUE_K.i= "+t1.VALUE_K.i);
		t1.k.i=2;//final使引用恒定不变,但其自身可以被修改
		t1.VALUE_K.i=3;
		System.out.println("t1.k.i= "+t1.k.i);
		System.out.println("t1.VALUE_K.i= "+t1.VALUE_K.i);
	}
}
class Value{//空白final的用法
	static int i;
	Value(int i){this.i=i;}
}
public class Test0507{
	final int i=1;
	//final int j;//空白final必须在每个构造器中得到赋值,不然无法通过编译
	final int z;//空白final
	final Value v;//空白final
	Test0507(){//在构造器中给所有空白final赋值
		z=2;
		v=new Value(2);
		System.out.format("z=%d,v=%s,v.i=%d\n",z,v,v.i);
	}
	Test0507(int i){//在构造器中给所有空白final赋值
		z=i;
		v=new Value(i);
		System.out.format("z=%d,v=%s,v.i=%d\n",z,v,v.i);
	}
	public static void main(String[] args){
		new Test0507();
		new Test0507(3);
	}
}
class Value{//fianl参数不能修改参数,主要用来向匿名内部类传递数据。
	void f(){}
}
public class Test0507{
	void with(final Value v){
		//v=new Value();//不能指定最终参数v
	}
	void without(Value v){
		v=new Value();
		v.f();
	}
	public static void main(String[] args){
	}
}
class Person extends Test0507{//final方法不可被覆盖
	void f(){System.out.println("Person.f()");}//错误:Person中的f()无法覆盖Test0507中的f(),被覆盖的方法为final。
}
public class Test0507 {
	final void f(){System.out.println("Test0507.f()");}//final方法
}
class Person extends Test0507{//private方法隐含final效果
	void f(){System.out.println("Person.f()");}//编译能通过,但不能覆盖方法,而是产生一个新方法f()
	void g(){System.out.println("Person.g()");}
}
public class Test0507{
	private void f(){System.out.println("Test0507.f()");}
	void g(){System.out.println("Test0507.g()");}
	public static void main(String[] args){
		Test0507 t=new Person();
		t.f();//Test0507.f()
		t.g();//Person.g()
		new Person().f();//Person.f()
	}
}
final class Person{//final类不可被继承
	static int i=1;//静态变量
}
//class Teacher extends Person{}//错误:无法从最终Person进行继承
public class Test0507{
	public static void main(String[] args){
		int i=Person.i;
		System.out.println("i="+i);
		int j=Person.i=2;//变量不受影响
		System.out.println("i=j="+j);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值