java final

本文详细介绍了Java中final关键字在类、方法和变量层面的应用规则,包括final类、final方法、final变量的特性及使用注意事项。通过具体代码示例,展示了final关键字如何影响类的继承、方法的覆盖以及变量的赋值。此外,还探讨了final关键字与对象引用的关系,以及final关键字在不同类型数据上的应用区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final:

1.修饰:抽象类、非抽象类成员方法变量

2.类是final的,方法也是final的,没有子类

 方法是final的,可以被子类调用,不能被重写,不能修饰构造方法

 变量是final的,静态变量、实例变量和局部变量,只能被赋值一次

 Note:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的

Code:

1.final类

(父)

public final class TestFinalFather  {
	
	public final void Methold(){}
	
}

(子)

public final class TestFinalSon extends TestFinalFather{//*不能被继承


<span style="white-space:pre">	</span>
}
报错

Note:不能被继承



2.final方法

(父)

public class TestFinalFather  {
<span style="white-space:pre">	</span>public final void Methold1(){}
<span style="white-space:pre">	</span>public  void Methold2(){}
<span style="white-space:pre">	</span>private void Methold3(){}
}

(子)

</pre><pre name="code" class="java">public final class TestFinalSon extends TestFinalFather{
	
public final TestFinalSon(){//不能修饰构造方法

}

public void Methold1(){}//*不能被子类的方法覆盖
public void Methold2(){}


public static void main(String args[]){
	TestFinalSon ts=new TestFinalSon();
	ts.Methold1();
	ts.Methold2();
	ts.Methold3();//*final方法可以被子类调用,但是private方法不能被子类调用
	}
}


(报错)

Note:不能修饰构造方法


Note:不能被子类的方法覆盖


Note: final方法可以被子类调用,但是private方法不能被子类调用


3.final变量

public class TestFinalFather  {
	
	public  String args0;
	public final String args1;//可以先声明,而不给初值
	public final String args2="wwww";
	
	 public TestFinalFather(String x) { 
		 args1 = x; //赋值
 } 

	public static void main(String []args){
		TestFinalFather ts= new TestFinalFather("1");
		ts.args0="www";
		ts.args1="www";//*
		ts.args2="www";//*
		System.out.println(ts.args0);
	}
}

(报错)

Note:final类必须初始化,但可以先申明,再初始化


Note:一旦给final变量初值后,值就不能再改变了



深入解析final对象

<pre name="code" class="java"><pre name="code" class="java">public class TestFinal {
    public static void main(String [] args){
        //基本类型
        Integer a1=3;
        int a=3;
        Integer b1=4;
        int b=4;
        Integer c1=a1+1;
        int c=a+1;
        
        //String类型
        String Test="aaa";
//    public String TestPublic="aa";
        String argString="aa";
        String argStringTest="aa";
        final String  argFinal="aa";
        
        String TestString=argString+"a";
        String TestFinal=argFinal+"a";
        
        //对象类型
        TestFinal  tF= new TestFinal();
        TestFinal tF2=new TestFinal();
        final  TestFinal  tF1= new TestFinal();
        TestClass tC= new TestClass();
        
        System.out.println(b1==c1);//值的比较
        System.out.println(b==c);//值的比较
        
        System.out.println(argString==argFinal);//地址比较 true
        System.out.println(argStringTest==argString);//地址比较 true
        System.out.println(TestString==Test);//"+"
        System.out.println(TestFinal==Test);//"+"
        System.out.println(TestFinal.equals(Test)); 
        System.out.println(TestString.equals(Test));
        
        System.out.println(tF==tF2);
        System.out.println(tF.equals(tF2));
        tF2=tF;
//        tF1=tF;//*不能改变final类型所指的对象,可以改变对象的内容(属性)
    }
}


 
 

 

http://www.cnblogs.com/dolphin0520/p/3736238.html

Note:"=="和equals没区别,但是String对equals方法进行了重写

          一般"=="比较的是对象的地址


                  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值