1. 程式人生 > 其它 >關鍵字final和static用法

關鍵字final和static用法

技術標籤:java

1.final

主要用法有以下四種:

  1. 用來修飾資料:變數只能被賦值一次且它的值無法被改變。對於成員變數來講,我們必須在宣告時或者構造方法中對它賦值;

  2. 用來修飾方法引數:在變數的生存期中它的值不能被改變;

  3. 修飾方法:該方法無法被重寫;(不常用)

  4. 修飾類:該類無法被繼承extends。(不常用)

1.1修飾類

以下程式碼編譯器直接報錯

package finalstudy;

/**
 * @author yuguang
 * @date 2021/2/3 10:24
 * @description
 * todo final修飾類無法被繼承
 */
public class TestFinal01 {

    public static void main(String[] args) {
        ManPeople man = new ManPeople();
        System.out.println(man.getAge());
    }
}

class ManPeople extends People {

}

final class People{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

1.2修飾方法

編譯器報錯

package finalstudy;

/**
 * @author yuguang
 * @date 2021/2/3 10:24
 * @description todo final修飾方法無法被重寫override
 */
public class TestFinal02 {

    public static void main(String[] args) {
        People man1 = new ManPeople();
        System.out.println(man1.getNameAndAge());

        ManPeople man = new ManPeople();
        man.setAge(18);
        man.setName("xixi");
        System.out.println(man.getNameAndAge());
    }
}

class ManPeople extends People {

    @Override
    public String getNameAndAge() {
        return "不想告訴你";
    }
}

class People {
    private String name;
    private int age;

    public final String getNameAndAge() {
        return name + " : " + age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

1.3修飾方法

編譯器報錯程式碼

package finalstudy;

/**
 * @author yuguang
 * @date 2021/2/3 10:24
 * @description todo final修飾方法無法被重寫,編譯器直接報錯
 */
public class TestFinal03 {

    public static void main(String[] args) {

        int age = 1;

        System.out.println(age++);

        System.out.println(++age);
        People man1 = new ManPeople();
        System.out.println(man1.getNameAndAge());

        ManPeople man = new ManPeople();
        man.setAge(18);
        man.setName("xixi");
        System.out.println(man.getNameAndAge());

        System.out.println(man.testFinal(18, "xixi"));
    }
}

class ManPeople extends People {

    @Override
    public String getNameAndAge() {
        return "不想告訴你";
    }
}

class People {
    private String name;
    private int age;

    public String testFinal(final int age, final String name) {
        name = "不告訴你";
        age = 18;
        return name + " : " + age;
    }

    //過載
    public String testFinal(final String name, final int age) {
        return name + " : " + age;
    }

    public String getNameAndAge() {
        return name + " : " + age;
    }

    //過載
    public final String getNameAndAge(String name) {
        return name + " : " + age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

1.4修飾變數

package finalstudy;

/**
 * @author yuguang
 * @date 2021/2/3 10:24
 * @description 
 * 包括成員變數和區域性變數,該變數只能被賦值一次且它的值無法被改變。
 * 對於成員變數來講,我們必須在宣告時或者構造方法中對它賦值;
 */
public class TestFinal04 {
    private final String name = null;

    private final int age;

    public TestFinal04() {
        age = 0;
    }


    public static void main(String[] args) {
        //變數只能被賦值一次且它的值無法被改變
        final int age;
        age = 18;
        System.out.println(age);
//        age = 19; //報錯

    }
}