Java中的靜態聲明和非靜態聲明是使用關鍵字來實現的。靜態聲明使用static關鍵字,在實例化對象之前就已經存在;而非靜態聲明則是在實例化對象后才存在。
靜態聲明可以用于方法、屬性和內部類。靜態方法可以直接通過類名來調用,而不需要先實例化對象。靜態屬性也可以直接通過類名來訪問,也可以在靜態塊中初始化。靜態內部類可以在沒有外部類實例的情況下創建。
public class StaticExample { public static int staticCount = 0; public int instanceCount = 0; public StaticExample() { staticCount++; instanceCount++; } public static void staticMethod() { System.out.println("This is a static method."); } public void instanceMethod() { System.out.println("This is an instance method."); } public static class StaticNestedClass { public void nestedMethod() { System.out.println("This is a static nested class method."); } } public static void main(String[] args) { StaticExample obj1 = new StaticExample(); StaticExample obj2 = new StaticExample(); System.out.println("Static variable count: " + StaticExample.staticCount); System.out.println("Instance variable count (object 1): " + obj1.instanceCount); System.out.println("Instance variable count (object 2): " + obj2.instanceCount); StaticExample.staticMethod(); StaticExample.StaticNestedClass nestedObj = new StaticExample.StaticNestedClass(); nestedObj.nestedMethod(); } }
非靜態聲明必須在創建對象后才能使用。非靜態屬性和方法只能通過對象來訪問,不能直接通過類名來訪問。非靜態屬性可以在構造函數中初始化。可以通過static關鍵字來聲明一個靜態常量。
public class NonStaticExample { public int count = 0; public void method() { System.out.println("This is a non-static method."); } public static void main(String[] args) { NonStaticExample obj = new NonStaticExample(); obj.count = 10; obj.method(); } }
總的來說,靜態聲明在程序執行時就已經存在,可以直接通過類名訪問;而非靜態聲明則是在對象創建時才存在,只能通過對象來訪問。根據具體的需求,開發者可以選擇使用靜態聲明或非靜態聲明。