问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

各位帮我写一个JAVA final的例子吧 并解释说明final引用不可以改变,但状态可以改变

发布网友 发布时间:2022-05-26 12:32

我来回答

1个回答

热心网友 时间:2023-10-17 04:31

一、final
 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

1、final类
 final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。

2、final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
例如:

public class Test1 {

public static void main(String[] args) {
// TODO 自动生成方法存根
}

public void f1() {
System.out.println("f1");
}
//无法被子类覆盖的方法
public final void f2() {
System.out.println("f2");
}

public void f3() {
System.out.println("f3");
}

private void f4() {
System.out.println("f4");
}
}

public class Test2 extends Test1 {

public void f1(){
System.out.println("Test1父类方法f1被覆盖!");
}

public static void main(String[] args) {
Test2 t=new Test2();
t.f1();
t.f2(); //调用从父类继承过来的final方法
t.f3(); //调用从父类继承过来的方法
//t.f4(); //调用失败,无法从父类继承获得

}
}

3、final变量(常量)
 用final修饰的成员变量表示常量,值一旦给定就无法改变!
 final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
 从下面的例子中可以看出,一旦给final变量初值后,值就不能再改变了。
 另外,final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

package org.leimin;

public class Test3 {
private final String S="final实例变量S";
private final int A=100;
public final int B=90;

public static final int C=80;
private static final int D=70;

public final int E; //final空白,必须在初始化对象的时候赋初值

public Test3(int x){
E=x;
}

/**
* @param args
*/
public static void main(String[] args) {
Test3 t=new Test3(2);
//t.A=101; //出错,final变量的值一旦给定就无法改变
//t.B=91; //出错,final变量的值一旦给定就无法改变
//t.C=81; //出错,final变量的值一旦给定就无法改变
//t.D=71; //出错,final变量的值一旦给定就无法改变

System.out.println(t.A);
System.out.println(t.B);
System.out.println(t.C); //不推荐用对象方式访问静态字段
System.out.println(t.D); //不推荐用对象方式访问静态字段
System.out.println(Test3.C);
System.out.println(Test3.D);
//System.out.println(Test3.E); //出错,因为E为final空白,依据不同对象值有所不同.
System.out.println(t.E);

Test3 t1=new Test3(3);
System.out.println(t1.E); //final空白变量E依据对象的不同而不同
}

private void test(){
System.out.println(new Test3(1).A);
System.out.println(Test3.C);
System.out.println(Test3.D);
}

public void test2(){
final int a; //final空白,在需要的时候才赋值
final int b=4; //局部常量--final用于局部变量的情形
final int c; //final空白,一直没有给赋值.
a=3;
//a=4; 出错,已经给赋过值了.
//b=2; 出错,已经给赋过值了.
}
}

4、final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。

public class Test4 {
public static void main(String[] args) {
new Test4().f1(2);
}

public void f1(final int i){
//i++; //i是final类型的,值不允许改变的.
System.out.print(i);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
铸造铝合金与压铸铝合金差异之处在哪? 冷锻铝和压铸铝的区别 锻铝合金的定义是什么 ...应该根据求职者的个人能力定薪还是根据带给公司的价值定薪?_百度知 ... 皱纱肉有什么美味的做法? 肉类放冰箱急冻可以放多久 冰冻肉类保存期限 肉类急冻可以放多久 肉类急冻保存期限是多久? 牛肉切片切好放急冻会不会肉质很硬 ...in the lifeboats for everybody. 1 room 2 place 3 volume 4... 低温等离子设备 堪称植物界中的吸甲醛之王,吊兰是否真的能吸收甲醛? 吊兰是可以吸收甲醛的吗? 我本月27号在淘宝网购买了一个便携式强光手电筒、发货地竟然是驻马店市上蔡县、这个地方好像是艾滋多发 大庆油田退休职工什么情况可以申请采暖资助? 大庆市杜尔伯特事业单位为什么一月份工资还没有开? 硕士生考大庆让胡路事业单位好吗 大庆市2016年事业单位一月份工资还不发呢 大庆城管单位好吗 一个月能开多少工资 大庆市事业单位的待遇怎么样。大概能拿多少钱。一般的工作环境如何?多谢 柴犬多少钱一只 纯种 柴犬养殖场出售纯种柴犬价格柴犬多少钱一只 一只纯种柴犬大概多少钱 冰箱一直工作不停机冰箱两侧不发热冰箱制冷正常 手机怎么取消root权限 怎么申请呢 保湿霜怎么用使用顺序保湿霜的使用顺序是怎样的 怎样申请新? 怎么注册? 怎么删除微信游戏消息列表中的信息? 怎么申请呢? 吊兰能去除甲醛吗? 什么叫做三叠有一个判断题是“三叠”是指一首词有“ 吊兰真的能除去甲醛吗?还能防辐射。 吊兰吸甲醛吗效果如何? 何为“单调”“双调”“三叠”? 吊兰吸收甲醛效果好吗,如何快速去除甲醛污染? 金边吊兰吸甲醛还是绿萝吸甲醛 三叠词是什么意思 吊兰为啥可以吸甲醛 金边吊兰吸甲醛吗 吊兰和绿萝哪个吸收甲醛好 埃及过去的法老图坦卡芒的简介 什么是分布式光伏?对比集中式光伏发电有什么优势? 户口不在云南,高三回四川读,如果会考没过完,是否还要回云南考?就没有其他办法了么? 现在呢,高3上学期刚结束,去法国可以否?。谢谢。 什么事分散式和分布式发电? 同一个人可以建两个吗?怎么弄? 如果不能并肩同行,那就假装恰好路过出自哪里 手机怎么挂两个? 一个微信可以用两个吗?一个是电信的,一个是移动的,如果我上电信手机号玩微信是不是扣电信流量