왜 객체를 생성하지 않고 static을 호출할 수 있나요?
객체가 생성되기 전 모든 정적 속성이나 메소드는 메타데이터 영역에 배치되며 정적 속성이나 메서드는 클래스 이름을 통해 호출할 수 있습니다.
예:
public class Cat{ public static String name;//静态的,不创建对象都存在 public String color; //动态的,不创建猫的对象不存在这个属性 }
public class Main{ public static void main(String[] args){ Cat c =new Cat(); c.color = "黑色"; c.name = "喵喵"; Cat c1 = new Cat(); c1.color = "蓝"; System.out.println(c1.name); //正确 这是因为name是静态属性 } }
온라인 교육 비디오 공유: java 교육 비디오
정적 속성의 특징: 이 클래스 아래의 모든 개체는 이 속성을 공유하므로 개체가 생성되지 않은 경우에도 이 속성이 존재하므로 이 속성을 수정할 수 있습니다. 클래스를 통해 수정하면 됩니다. (Cat.name = "小猫")
동적 속성은 생성된 객체에만 존재합니다. 이 속성은 객체가 생성될 때만 존재합니다.
정적 속성과 동적 속성의 차이점:
객체는 스택을 통해 찾을 수 있으므로 메타데이터 영역의 콘텐츠를 호출할 수 있나요? ——예
그러면 힙에 있는 콘텐츠도 클래스를 통해 호출할 수 있나요? ——아니요, 이 과정에는 확실성과 불확실성의 문제가 있기 때문입니다.
클래스를 통해 메타데이터 영역의 콘텐츠를 호출합니다. 개체가 동적이기 때문에 정적 항목을 호출하면 개체가 존재하기 전에 정적 항목이 존재해야 합니다. static , 현재로서는 이 동적 항목이 존재해야 하는지 여부가 확실하지 않습니다.
그래서 동적은 정적을 호출할 수 있지만 정적은 동적을 호출할 수 없습니다.
public class Cat{ public static String name;//静态的,不创建对象都存在 public String color; //动态的,不创建猫的对象不存在这个属性 public Cat(){ } public void foo(){ color = "黑";//正确 name = "喵喵";//正确,一定可以调用静态的 } public static void test(){ color = "黑"; //错误,静态方法无法调用动态的属性 name = "小喵";//正确 foo();//动态的不一定存在 Cat c = new Cat(); c.foo(); //这时再能调用 } }
더 많은 관련 기사와 튜토리얼을 보려면 다음을 방문하세요. Java 시작하기
위 내용은 Java의 정적 속성과 동적 속성의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!