java學習筆記(11-static關鍵字)
阿新 • • 發佈:2019-01-07
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()); } }