1. 程式人生 > >java學習筆記(11-static關鍵字)

java學習筆記(11-static關鍵字)

1.static關鍵字

1.1 說明:

  • 被static修飾的成員變數屬於類,不屬於這個類的某個物件。(也就是說,多個物件在訪問或修改static修飾的成員變數時,其中一個物件將static成員變數值進行了修改,其他物件中的static成員變數值跟著改變,即多個物件共享同一個static成員變數)
  • 被static修飾的成員可以並且建議通過類名直接訪問
  • 靜態的載入優先於物件,隨著類的載入而載入

1.2 簡單使用

package com.daigua11;
/*
 * static:是一個關鍵字,用於修飾成員變數和成員方法
 * static的特點:
 *          被所有的物件所共享
 *          可以使用類名呼叫
 *          靜態的載入優先於物件
 *          隨著類的載入而載入
 * 
 */
public class StaticDemo {
    public static void main(String[] args) {
        Person.graduateFrom = "北京大學";
        
        Person p = new Person();
        p.name = "小蒼同學";
        p.age = 18;
        //p.graduateFrom = "傳智學院";
        p.speak();
        
        Person p2 = new Person();
        p2.name = "小波同學";
        p2.age = 20;
        //p2.graduateFrom = "傳智學院";
        p2.speak();
    }
}

class Person {
    String name;
    int age;
    static String graduateFrom;//畢業院校
    
    public void speak() {
        System.out.println(name + "---" + graduateFrom);
    }
}

1.3 注意點

  • 靜態成員只能直接訪問靜態成員
  • 非靜態成員既可以訪問非靜態成員也可以訪問靜態成員
package com.daigua11;

/*
* static的注意事項:
*           靜態方法:
*               可以呼叫靜態的成員變數
*               可以呼叫靜態的成員方法
*               不可以呼叫非靜態成員變數
*               不可以呼叫非靜態成員方法
*               靜態方法只能呼叫靜態的成員
*           非靜態方法:
*               可以呼叫靜態的成員變數
*               可以呼叫靜態的成員方法
*               可以呼叫非靜態的成員變數
*               可以呼叫非靜態的成員方法
*       
*   靜態的方法中是否有this這個物件?沒有的
*               
* 
*/
public class StaticDemo2 {
    public static void main(String[] args) {
        Student.graduateFrom = "北京大學";
        Student.study();
    }
}

class Student {
    String name;
    int age;
    static String graduateFrom;// 畢業院校

    public static void study() {
         System.out.println(graduateFrom);
         sleep();
         
        // 無法訪問到eat這個方法
        // System.out.println(name);
        // eat();

    }

    public static void sleep() {
        System.out.println("sleep");

    }

    public void eat() {
        System.out.println("eat");

        System.out.println(graduateFrom);
        sleep();

    }

}

1.4 應用-Math類

package com.daigua11;

public class MathDemo {
    public static void main(String[] args) {
        // Math:包含了一些基本的數學運算方法
        // static double PI
        // System.out.println(Math.PI);

        // static double abs(double a) :返回絕對值
        // System.out.println(Math.abs(15));
        // System.out.println(Math.abs(-10));

        // static double ceil(double a) 天花板 向上取整
        // System.out.println(Math.ceil(1.2));
        // System.out.println(Math.ceil(1.6));
        // static double floor(double a) 地板 向下取整
        // System.out.println(Math.floor(1.2));
        // System.out.println(Math.floor(1.6));

        // static long round(double a) :四捨五入
        // System.out.println(Math.round(1.2));
        // System.out.println(Math.round(1.6));

        // static double max(double a, double b)
        // System.out.println(Math.max(3, 4));

        // static double pow(double a, double b) :返回第一個引數的第二個引數次冪
        // System.out.println(Math.pow(3, 2));

        // static double random() :返回一個隨機數,大於零且小於一
        System.out.println(Math.random());

    }
}