Java基礎-靜態變數(類變數)
阿新 • • 發佈:2022-03-14
package com.hspedu.static_; public class Course374 { public static void main(String[] args) { // 類變數快速入門 // 這樣使用靜態static變數不規範 Child child1 = new Child("白骨精"); child1.join(); child1.count++; Child child2 = new Child("狐狸精"); child2.join(); child2.count++; Child child3 = new Child("蜘蛛精"); child3.join(); child3.count++; // 類變數可以通過 類名.變數名 訪問 System.out.println("現在共有:" + Child.count + " 個加入了"); System.out.println(child1.count); System.out.println(child2.count); System.out.println(child3.count); } }class Child { private String name; // 定義一個類變數(靜態變數),static // 所有的物件都可以共享這個屬性 public static int count; // int預設值是0 public Child(String name) { this.name = name; } public void join() { System.out.println(this.name + "加入了.."); } }
package com.hspedu.static_;public class Course375 { public static void main(String[] args) { // 類變數/靜態變數的記憶體分析 /* * 1、child1、child2、child3物件當中都存放了一個地址, * 這個地址指向了count存放的位置(可能是堆空間、可能是方法區的靜態域) * 靜態變數不管是存放在哪裡,不影響其使用方式,所有物件均指向一個位置 * 2、方法區有個空間叫:靜態域 * 3、靜態變數的存放位置和jdk的版本有關,一般jdk7之前是在方法區中,jdk8以後是在堆空間 * 4、類第一次在載入的時候,方法區會生成類資訊,同時也會在堆空間上生成一個對應的Class物件(反射部分) * * */ Child child1 = new Child("Tom"); Child child2 = new Child("Jack"); Child child3 = new Child("Mary"); } } class Child { private String name; public static int count = 0; public Child(String name) { this.name = name; } public void join() { System.out.println(this.name + "加入了.."); } }
package com.hspedu.static_; public class Course377 { public static void main(String[] args) { // 類變數(靜態變數)訪問細節 /* * 1、使用靜態變數的需求:所有物件共享一個屬性值(例如統計) * 2、靜態變數和例項變數區別:靜態變數是所有物件共享、例項變數是每個物件獨有 * 3、訪問方式:類名/物件.變數名(前提是滿足訪問許可權) * 4、例項變數不能通過類.變數名的方式訪問 * 5、類載入了,不需要例項化也可以使用靜態變數 * 6、靜態變數的宣告週期是隨著類的載入開始,類的消亡而銷燬 * */ A a = new A(); System.out.println(A.n2); // System.out.println(A.n1); System.out.println(B.address); } } class A { // 類變數/靜態變數 public static String name = "韓順平教育"; // 普通屬性/普通成員變數/非靜態變數/例項變數 private int num = 10; public int n1 = 100; // 不能通過A.n1訪問 public static int n2 = 200; } class B { public static String address = "北京"; }