final
概述
含義: 最終的
可以修飾的內容
(1)修飾變量(局部變量 成員變量(實例變量 靜態變量(類變量)))
(2)修飾方法(成員方法)(靜態方法)
(3)修飾類(普通類)
1、修飾變量
(1)修飾局部變量
特點:
final 修飾的局部變量只能賦值一次,一旦賦值其值不可以改變
案例:
public class Demo2 {
public static void main(String[] args) {
// final int a = 10;//局部變量
// a = 20;//第二次賦值
// System.out.println(a);
final int a;//聲明
a = 10;//第一次賦值
//a = 20;//報錯
System.out.println(a);
}
}
(2)修飾成員變量
特點:
1.final修飾的實例變量沒有默認值
2.final修飾的實例變量只能賦值⼀次
3.final修飾的實例變量可以在構造⽅法中初始化/構造代碼塊中/直接賦值 ,但是當使用構造方法賦值的時候要保證每個構造都必須能夠為這個變量初始化
案例:
//案例1:關於特點1
public class Demo2 {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.a);//0
}
}
class Test{
final int a ;
}
//案例2: 關於特點2
package com.ujiuye.day11;
public class Demo2 {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.a);//10
//修改值
test.a = 20;
}
}
class Test{
final int a = 10;//也只有一次賦值機會
}
//案例3:
package com.ujiuye.day11;
public class Demo2 {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.a);//10
// test.a++;
}
}
class Test{
//1 直接賦值
//final int a = 10;//也只有一次賦值機會
// 2 構造代碼塊進行賦值
// final int a;//聲明
//
// {
// a = 10;
// }
//3 構造方法賦值
final int a;
public Test() {
a = 10;
}
public Test(int a) {
this.a = a;
}
}
(3)修飾靜態變量
特點:
1.final修飾的類變量沒有默認值
2.final修飾的類變量可以通過靜態代碼塊進⾏初始化/ 也可直接進行初始化
3. 只能賦值一次
案例:
//案例1: 關於特點1
public class Demo2 {
public static void main(String[] args) {
System.out.println(Test.a);
}
}
class Test {
final static int a;//靜態變量
}
//案例2:關於特點2
package com.ujiuye.day11;
public class Demo2 {
public static void main(String[] args) {
System.out.println(Test.a);
}
}
class Test {
final static int a ;//靜態變量
static {
a = 10;
}
}
修飾方法
修飾成員方法和靜態方法
特點:
1.final修飾的成員⽅法&靜態 可以重載
2.final修飾的實例變量只能賦值⼀次
3. final修飾的靜態方法 本來可以形成一個符合重寫語法的方法,但是被final修飾之后,也不能定義符合重寫語法的方法了.
案例:
//案例1: 關於特點1
public class Demo2 {
public static void main(String[] args) {
System.out.println(Test.a);
}
}
class Test {
public final void m1(){
System.out.println("我是成員方法m1");
}
//重載m1
public void m1(int a){
System.out.println("我是重載m1方法");
}
public static void m2(){
System.out.println("我是靜態方法m2");
}
public static void m2(int a){
System.out.println("我是重載靜態方法m2");
}
}
修飾類
語法:
final class Animal{
}
特點:
final修飾的類沒有⼦類 俗稱斷⼦絕孫類 不能被繼承
Java中常見的被final修飾的類 : String Math System
案例:
public class Demo2 {
public static void main(String[] args) {
}
}
final class Test{
}
class TestSub extends Test{//此處報錯
}