1. 程式人生 > >java的關鍵字 this、super、final、static、

java的關鍵字 this、super、final、static、

使用 實參 原來 創建過程 列表 clas 必須 attribute ceshi

1、this關鍵字
(1)成員變量和局部變量同名
可以在成員變量名前面加上this.來區別成員變量和局部變量

package com.oracle.demo03;

public class person {
            private  String name;
            private int age;
            public person(String name, int age) {
                super();
                this.name = name;
                this.age =
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; } }

(2)調用構造方法
在構造方法中調用本類的其他構造方法this()【根據參數列表區分】
必須放在本構造方法的第一行

package com.oracle.demo01;

public class Demo02 {
    private String name;
    private  int age;
    public Demo02(String name,int age){
        this.name = name;
        this.age = age;
    }
    public  Demo02(){
        //在構造方法中調用本類的其他構造方法this()
        //必須放在本構造方法的第一行
this("zhangsan",18); }
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; } }

測試類:

package com.oracle.demo01;

public class Demo01 {
     public static void main(String[] args) {
         Demo02   d = new Demo02();
         System.out.println(d.getName()+".."+d.getAge());
    }
}

2、super關鍵字
(1)子父類中構造方法的調用
隱式語句:super(); 【默認】
調用父類中的有參數構造方法:super(實參列表);
子類會繼承父類中的內容,所以子類在初始化時,必須先到父類中去執行父類的初始化動作。
當父類中沒有空參數構造方法時,子類的構造方法必須有顯示的super語句,指定要訪問的父類有參數構造方法。

package com.oracle.demo02;

public class person {
    public  person(String name,int age){
            System.out.println("父類構造");
    }
}
package com.oracle.demo02;

public class teacher  extends person{
            String name;
            int age;
            public teacher(){
                super("zhangsan",12);
                /*this("lisi",12);*/   
                System.out.println("子類構造");
            }
            public teacher(String name,int age){
                super( name, age);
            }
}
package com.oracle.demo02;

public class test {
        public static void main(String[] args) {
            teacher   t = new teacher(); 
        }
}

效果如下:

技術分享圖片


(2)子類對象創建過程的細節
只要是構造方法默認第一行都是super();
如果第一行調用了this()構造方法,顯示的super()語句可以間接調用。

package com.oracle.demo02;

public class person {
    public  person(String name,int age){
            System.out.println("父類構造");
    }
}
package com.oracle.demo02;

public class teacher  extends person{
            String name;
            int age;
            public teacher(){
                //super("zhangsan",12);
                this("lisi",12);
                System.out.println("子類構造");
            }
            public teacher(String name,int age){
                super( name, age);
            }
}

package com.oracle.demo02;

public class test {
        public static void main(String[] args) {
            teacher   t = new teacher(); 
        }
}

效果如下:

技術分享圖片

(3)super應用

package com.oracle.demo03;

public class person {
            private  String name;
            private int age;
            public person(String name, int age) {
                super();
                this.name = name;
                this.age = 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;
            }
            
}
package com.oracle.demo03;

public class student extends person{

    public student(String name, int age) {
        super(name, age);    
    }
        
}
package com.oracle.demo03;

public class worker extends person{

    public worker(String name, int age) {
        super(name, age);        
    }
}
package com.oracle.demo03;

public class ceshi {
            public static void main(String[] args) {
                student  s = new student("小明",2);
                System.out.println(s.getAge()+s.getName());
                worker w = new worker("小紅",80);
                System.out.println(w.getAge()+w.getName());
            }
}

效果如下:

技術分享圖片

3、final關鍵字
(1)final修飾的類不能被繼承,但可以繼承其他類

package com.oracle.demo04;
//final 修飾類(太監類)
//不能被繼承,但可以繼承其他類
public final class fu extends Object{
        
}

技術分享圖片

(2)final修飾的成員方法不能重寫,但是不修飾的重寫的可以加final修飾

package com.oracle.demo04;

public class fu2 {
        //被final修飾的方法
        public final void  xiuche(){
            System.out.println("修車");
        }
        public  void maiche(){
            System.out.println("賣車");
        }
}
package com.oracle.demo04;

public class son extends fu2{
    /*public  void  xiuche(){
        System.out.println("車");
    }*/
    public final void maiche(){
        System.out.println("車");
    }
}

(3)被final修飾的成員變量沒有系統默認初始值,需要在創建對象前賦值,否則報錯.

package com.oracle.demo04;

public class zi2 {
        public  void eat(){
            final int i = 2;
            //i = 2;  哪怕是原來的值也不行。
        }
}

註意:

技術分享圖片


(4)被final修飾的局部變量是常量,不能改變,如果是引用數據類型,可以對其屬性進行修改。

package com.oracle.demo04;

public class fu2 {
        String name;
        //被final修飾的方法
        public final void  xiuche(){
            System.out.println("修車");
        }
        public  void maiche(){
            System.out.println("賣車");
        }
}

package com.oracle.demo04;

public class zi2 {
        public  void eat(){
            final  fu2 f= new fu2();
            //f=null;
            f.name = "lisi";
        }
}

4、static關鍵字
(1)被static修飾的成員變量屬於類,不屬於這個類的某個對象【清華大學】

package com.oracle.demo05;

public class student {
        String name;
        int age;
        static String schollname;
}
package com.oracle.demo05;

import javax.print.attribute.Size2DSyntax;

public class test {
    public static void main(String[] args) {
        student   s = new student();
        s.name = "小紅";
        s.schollname = "北京大學";
        student   s1 = new student();        
        s1.name = "小明";
        s1.schollname = "清華大學";
        System.out.println(s.schollname+s1.schollname);
    }
}

效果如下:

技術分享圖片


(2)靜態成員只能調用靜態成員,不能調用非靜態成員,非靜態成員可以調用靜態成員。

package com.oracle.demo05;

public class ceshi {
     
    static  int  a = 1;
     int  b = 2;
    public static void main(String[] args) {
        //靜態成員可以調用靜態成員方法
        eat();
        //靜態成員不可以調用非靜態成員方法
        //study();
        /*Cannot make a static reference to 
        the non-static method study() from the 
         type ceshi*/
        //靜態成員方法可以調用靜態成員變量
        System.out.println(a);
        //靜態成員方法不可以調用非靜態成員變量
        //System.out.println(b);
    }
    public static void eat(){
          
    }
    public  void study(){
        //非靜態成員方法可以調用靜態成員方法
          eat();
          //非靜態成員方法可以調用靜態成員變量
          System.out.println(a);
    }
}

(3)不能使用this/super【this、super屬於對象,而靜態屬於類】

技術分享圖片

(4)定義靜態常量:public static final 修飾變量 【接口】

java的關鍵字 this、super、final、static、