1. 程式人生 > 其它 >回顧方法及加深之靜態和非靜態方法的呼叫(02)

回顧方法及加深之靜態和非靜態方法的呼叫(02)

21.回顧方法及加深----(靜態和非靜態方法)呼叫總結

1. 不同類之間的方法呼叫

建立兩個類	Demo02		Student
//類:學生類
public class Student {
    //學生類下面的方法:此方法為靜態方法,因為加了static
    public static void say(){//為啥不寫引數啊!??
        System.out.println("學生說話了");
    }
    //上面沒寫形參,下面寫了形參 ,注意呼叫的區別
    public static void say1(String a){//為啥寫引數啊
        System.out.println("學生又說話了");
    }


    //學生類下面的方法:此方法為非靜態方法,因為沒有加static
    public void sleep(){
        System.out.println("學生睡覺了");
    }
}
public class Demo02 {
    public static void main(String[] args){
        System.out.println("Hello World !");
		
        //*****************  靜態方法的呼叫  ****************************
        //靜態方法  加了static
        //呼叫法一:類名.方法名()呼叫
        Student.say();
        Student.say1("啊哈哈哈");//因為say1()方法裡寫了String形參,所以此處要給形參傳遞值

        //*****************  非靜態方法的呼叫  ****************************
        //非靜態方法  沒有加static
        //呼叫不能直接通過類名.方法名呼叫
        //法:第一:例項化這個類 new
        new Student();//new Student()就代表把這個類例項化了
        new Student().sleep();//例項化之後就能 .sleep() 呼叫了

        //法二:但是通常寫成下面的方式
        //萬能公式:變數型別 變數名 = 變數的值;
                 //物件型別 物件名 = 物件的值;
        Student student = new Student();    //也是把物件值變為例項化物件的過程
        //然後呼叫 物件名.方法名();
        student.sleep();
        
        
        /**  (適用非靜態的方法)
         * 理解:new Student() :把Student類 例項化了
         * Student student = new Student(); 例項化之後,又賦值給了student這個物件
         * 用student這個物件:所以student這個物件 可以通過 物件名.方法名()呼叫 。即: 					student.sleep();
         * */
		
     

    }
}

2. 同一個類下的方法呼叫

建立一個類,比如Demo03
public class Demo03 {
    public static void main(String[] args){
        System.out.println("Hello World !");
    }

    //定義兩個普通靜態方法a,b
    //此時兩靜態方法c和d可以互相直接呼叫,也能被main方法直接呼叫
    public static void a(){
        b();
    }
    public static void b(){
        a();
    }

    //定義兩個普通非靜態方法c,d
    //此時兩非靜態方法a和b可以互相直接呼叫,但不能被main方法直接呼叫
    public void c(){
        d();
    }
    public void d(){
        c();
    }

    //定義一個靜態方法e,一個非靜態方法f
    //此時靜態方法e不能直接呼叫非靜態方法f ,但是非靜態方法f可以直接呼叫靜態方法e
    public static void e(){
        //f();不能直接呼叫
        //類例項化之後才能呼叫 new
        Demo02 demo02 = new Demo02();
        demo02.f();
    }
    public void f(){
        e();
    }
    
    
    /**
    static 是和類一起載入的(時間片很早:當類存在的適合,它就存在了)
    沒有static的非靜態方法f 是在類例項化之後才存在(是跟物件有關的,物件建立之後才存在)
    所以已經存在了的e()方法 直接呼叫一個不存在的f()方法 會報錯。
    
     * 因為被static修飾的內容會跟隨類的載入而載入,所以靜態化內容可以不用例項化就能被直接呼叫
     * 同時兩靜態方法之間也可以互相直接呼叫
     * */
    
    /**
     * 因為被static修飾的內容會跟隨類的載入而載入,所以靜態化內容可以不用例項化就能被直接呼叫
     * 同時兩靜態方法之間也可以互相直接呼叫
     * */
    
    /**
    *靜態方法只能直接呼叫靜態方法(言外之意 靜態方法可以間接呼叫非靜態方法。如例項化),非靜態方法可以呼叫靜態方法
    */
}