- 1.修飾類(lèi)時(shí)
- 2.修飾方法時(shí)
-
3.修飾屬性和局部變量時(shí)
- 3.1修飾局部變量時(shí)
- 3.2修飾成員變量時(shí)
- 3.3修飾類(lèi)變量時(shí)
- 4.final與普通變量的區(qū)別
- 5.final用于引用
1.修飾類(lèi)時(shí)
1.只能是公共的(public)就算不寫(xiě)也是public
2.被final修飾的類(lèi)不可以被繼承
//前面默認(rèn)有個(gè)public 寫(xiě)不寫(xiě)都行
final class A{
}
2.修飾方法時(shí)
1.方法不能不能覆蓋
2.被final修飾的方法,JVM會(huì)嘗試將其內(nèi)聯(lián),以提高運(yùn)行效率
3.修飾屬性和局部變量時(shí)
3.1修飾局部變量時(shí)
1.要賦值
2.不能被改變
public class Test01 {
public static void main(String[] args) {
go();
}
public static void go(){
// 方式一:初始化的時(shí)候賦值
// final int age = 10;
// 方式二:先初始化后賦值
final int age;
age = 10;
System.out.println(age);
}
}
3.2修飾成員變量時(shí)
1.必須在系統(tǒng)賦默認(rèn)值之前賦值
2.不可更改
public class Test01 {
// 1.寫(xiě)法一報(bào)錯(cuò)未在創(chuàng)建時(shí)聲明對(duì)象
// final int a;
// a =10;
// 2.寫(xiě)法二正確
// final int a = 10;
// 3.寫(xiě)法三正確
final int a;
// 趕在系統(tǒng)賦默認(rèn)值之前賦值就行,系統(tǒng)賦默認(rèn)值在構(gòu)造方法執(zhí)行的時(shí)候
public Test01() {
this.a =0;
}
}
final String name = "qy";
//報(bào)錯(cuò)
name = "ym";
final Object obj = new Object();
//報(bào)錯(cuò)
obj = new Object();
3.3修飾類(lèi)變量時(shí)
1.與static結(jié)合使用修飾的變量是常量
2.常量要符合命名規(guī)范,全部大寫(xiě),可以用下劃線連接
3.被final修飾的常量,在編譯階段會(huì)存入常量池中
public class Main {
// final 放前放后都一樣
// final static double PI = 3.1415926;
static final double PI = 3.1415926;
}
4.final與普通變量的區(qū)別
public class Test1 {
public static void main(String[] args) {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
String e = d + 2;
System.out.println((a == c));
System.out.println((a == e));
}
}
//結(jié)果
//true
//false
public class Test2 {
public static void main(String[] args) {
String a = "hello2";
final String b = getHello();
String c = b + 2;
System.out.println((a == c));
}
public static String getHello() {
return "hello";
}
}
//結(jié)果
//false
通過(guò)上面兩個(gè)例子,我們可以發(fā)現(xiàn)在Test1中被final修飾的變量在進(jìn)行字符串串接的時(shí)候,地址沒(méi)變,但是在Test2中通過(guò)方法調(diào)用后就變了,也就是說(shuō)間接的賦值會(huì)改變地址。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-749997.html
5.final用于引用
如果修飾引用,那么表示引用不可變,引用指向的內(nèi)容可變。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-749997.html
public class Test02 {
public static void main(String[] args) {
final Student stu = new Student("小芊",18);
//可以修改里面的值
stu.setName("芊崳");
// 不能再new
// stu = new Student("ff",5);
}
}
到了這里,關(guān)于final關(guān)鍵字的作用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!