第20天学习Java的笔记-static静态
生活随笔
收集整理的這篇文章主要介紹了
第20天学习Java的笔记-static静态
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
28天
靜態static關鍵字
1.概述
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1rR1rotO-1608259503514)(F:\Java\Learn\day15\day20.assets\image-20201218090551803.png)]
2.靜態static關鍵字修飾成員變量
package Demo2001;public class Student {private int id;private String name;private int age;static String room;//所在教室private static int idCounter = 0;//學號計數器,每當new了一個新對象的時候,計數器++public Student() {this.id = ++idCounter;}public Student(String name, int age) {this.name = name;this.age = age;this.id = ++idCounter;}public int getId() {return id;}public void setId(int id) {this.id = id;}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 Demo2001;/* * 如果一個成員變量使用了static關鍵字,那么這個變量不再屬于對象自己,而是屬于所在的類。多個對象共享同一份數據。 * 共享的意思就是,一旦有一個給它賦值,其他的都可以直接拿來用 * */ //只需要給第一個學生的room賦值,第二個學生可以直接用這個賦值。 public class Demo01StaticField {public static void main(String[] args) {Student stu1 = new Student("xx",19);stu1.room = "101教室";System.out.println("第一個人姓名為:" + stu1.getName()+ "年齡為:" + stu1.getAge() + "教室為:" + stu1.room + "學號為:" + stu1.getId());//第一個人姓名為:xx年齡為:19教室為:101教室Student stu2 = new Student("hh",18);System.out.println("第二個人姓名為:" + stu2.getName()+ "年齡為:" + stu2.getAge() + "教室為:" + stu2.room + "學號為:" + stu2.getId());//第二個人姓名為:hh年齡為:18教室為:101教室} }3.靜態static關鍵字修飾成員方法
package Demo2001;public class MyClass {int num;//成員變量static int numStatic;//靜態變量//成員方法public void method() {System.out.println("這是一個普通的成員方法。");//成員方法可以訪問成員變量System.out.println(num);//成員方法可以訪問靜態變量System.out.println(numStatic);}//靜態方法public static void methodStatic() {System.out.println("這是一個靜態方法。");//靜態方法不可以直接訪問非靜態變量//System.out.println(num);//靜態方法可以訪問靜態變量System.out.println(numStatic);} } package Demo2001;/* * 一旦使用static修飾成員方法,那么這就成為了靜態方法 * 靜態方法不屬于對象,而是屬于類的。 * * 如果沒有static關鍵字,那么必須首先創建對象,然后通過對象才能使用它 * 如果有了static關鍵字,那么不需要創建對象,直接就能通過類名稱來使用它 * * 無論是成員變量,還是成員方法。如果有了static,都推薦使用類名稱進行調用。 * 靜態變量:類名稱.靜態變量 * 靜態方法:類名稱.靜態方法() * * 注意事項: * 1.靜態不能直接訪問非靜態。 * 原因:因為在內存中是先有的靜態內容,后有的非靜態內容。 * “先人不知道后人,但是后人知道先人。” * 2.靜態方法當中不能用this。 * 原因:this代表當前對象,通過誰調用的方法,誰就是對象。 * * */public class Demo02StaticMethod {public static void main(String[] args) {//首先創建對象,然后才能使用沒有static關鍵字的內容MyClass myClass = new MyClass();myClass.method();//對于靜態方法,可以通過對象名進行調用,也可以直接通過類名稱進行調用。myClass.methodStatic();//正確,不推薦。這種寫法在編譯之后也會被javac翻譯成為類名稱。靜態方法名MyClass.methodStatic();//推薦//對于本類當中的靜態方法,可以省略類名稱myMethod();Demo02StaticMethod.myMethod();//完全等效}public static void myMethod() {System.out.println("這是我自己的方法");} }4.靜態static的內存圖
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-049ApoQL-1608259503516)(F:\Java\Learn\day15\day20.assets\image-20201218103008130.png)]
package Demo2001;public class Demo03StaticStudent {public static void main(String[] args) {//首先設置一下教室,這是靜態的東西,應該通過類名稱進行調用。Student.room = "1010";Student stu1 = new Student("xx",19);System.out.println("stu1的id" + stu1.getId());System.out.println("stu1的姓名" + stu1.getName());System.out.println("stu1的年齡" + stu1.getAge());System.out.println("stu1的教室" + Student.room);Student stu2 = new Student("hh",18);System.out.println("stu2的id" + stu2.getId());System.out.println("stu2的姓名" + stu2.getName());System.out.println("stu2的年齡" + stu2.getAge());System.out.println("stu2的教室" + Student.room);} }5.靜態代碼塊
package Demo2001;/** 靜態代碼塊的格式是:** public class 類名稱{* static {* //靜態代碼塊的內容* }* }* 特點:當第一次用到本類時,靜態代碼塊執行唯一的一次。* 第二次及以后,就不執行了。* 靜態內容總是優先于非靜態。* */ public class Person {static {System.out.println("靜態代碼塊被執行");}public Person() {System.out.println("構造方法執行");}} package Demo2001; /** 靜態代碼塊的格式是:** public class 類名稱{* static {* //靜態代碼塊的內容* }* }* 特點:當第一次用到本類時,靜態代碼塊執行唯一的一次。* 第二次及以后,就不執行了。* 靜態內容總是優先于非靜態。** 靜態代碼塊的典型用途:* 用來一次性地對靜態成員變量進行賦值。* */public class Demo04Static {public static void main(String[] args) {Person person1 = new Person();System.out.println("======");Person person2 = new Person();} } /* * 靜態代碼塊被執行 構造方法執行 ====== 構造方法執行 * */總結
以上是生活随笔為你收集整理的第20天学习Java的笔记-static静态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第19天学习Java的笔记-String
- 下一篇: 第21天学习Java的笔记-数学工具类A