다음 편집기에서는 Java의 정적 및 동적 문제를 자세히 논의하는 기사를 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리도록 하겠습니다. 편집기를 따라 살펴보겠습니다
비정적 필드에 대한 정적 참조를 만들 수 없습니다
정적 메서드는 비정적 멤버 변수 및 메서드를 참조할 수 없습니다
class A { private int a = 1; public sttaic void main(String[] args){ System.out.println(a); } }
인스턴스 변수는 특정 개체 상태여야 하므로 , 먼저 A a = new A(); 그런 다음 System.out.println(a,a);
또는 변수를 static
으로 변경해야 합니다. EventApp4 유형의 엔클로징 인스턴스에 액세스할 수 없습니다. EventApp4 유형의 바깥쪽 인스턴스(예: Inner class. 이것이 문제를 일으키는 이유는 무엇입니까? 정적 메서드와 변수는 클래스가 로드될 때 이미 메모리에 입력되었지만 비정적 메서드와 변수는 인스턴스화 후에만 메모리에 들어갈 수 있으므로 정적 메서드에서 new는 정적 내부 클래스가 아닙니다. 내부 클래스가 아직 존재하지 않기 때문에 오류가 발생합니다. 반대로, 동적 메서드에서 새로운 정적 메서드를 사용하면 오류가 발생하지 않습니다. 같은 이유로 정적 메서드가 비정적 메서드보다 먼저 존재합니다.
Java의 메모리 메커니즘을 분석해 보면 우선 객체를 새로 만들 때 힙에 있는 객체에 대한 메모리 공간을 먼저 열지 않고 먼저 정적 메소드(정적 수정이 포함된 정적 함수)를 추가합니다. 클래스는 메소드 영역이라는 곳에 로드된 후 힙 메모리에 객체가 생성됩니다. 따라서 클래스가 로드될 때 정적 메서드도 로드됩니다. 객체를 새로 만들면 해당 객체는 메모리에 존재하게 됩니다. 일반적으로 this 키워드는 해당 객체를 참조하지만, 새로운 객체가 없으면 클래스 이름을 통해 해당 클래스의 정적 메서드를 호출할 수도 있습니다. 문제가 발생하면 다음 원칙을 따르세요
1. 메인에서는 정적 메소드, 정적 변수, 정적 클래스를 사용합니다. 즉, 변수와 메소드를 정적으로 제한합니다2. , 인스턴스화 이 클래스 또는 다른 클래스(사용할 클래스)3. 이 클래스에 대한 참조를 생성자에서 사용할 수 있으므로 main에 있는 명령문을 생성자에 넣고 이 클래스를 main에서 인스턴스화합니다.
위 내용은 Java 정적 및 동적 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!