이 질문에는 이미 답변이 있습니다.
나는 클래스가 선언 된 것으로 보아왔다.static
...에서java
, 그러나 혼란스러워 :
클래스는 객체를 만드는 데 사용되기 때문에 다른 객체는 다른 메모리 할당을 갖습니다.
그럼 뭐야?"static"
클래스를 선언 할 때 사용됩니까?member variables
모두static
?
이게 말이 돼?
첫째, 최상위 클래스를 정적으로 만들 수 없습니다. 중첩 클래스를 정적으로 만 만들 수 있습니다. 중첩 클래스를 정적으로 만들면 기본적으로 중첩 클래스의 인스턴스가 외부 클래스 / 최상위 클래스에서 사용할 필요가 없다고 말합니다.
예:
class Outer {
static class nestedStaticClass {
//its member variables and methods (don't nessarily need to be static)
//but cannot access members of the enclosing class
}
public void OuterMethod(){
//can access members of nestedStaticClass w/o an instance
}
}
또한 덧붙이 자면, 상수가 아니라면 내부 클래스 안에 정적 필드를 선언하는 것은 불법입니다 (다른 말로하면,static final
). 정적 중첩 클래스는 내부 클래스가 아니므로양철통정적 멤버를 여기에 선언하십시오.
클래스는 중첩 클래스에 중첩 될 수 있습니까?
한마디로, 그렇습니다. 아래를 보아라.Test
중첩 된 내부 클래스와 중첩 된 정적 클래스는 둘 다 중첩 된 클래스를 가질 수 있습니다. 그러나 최상위 클래스 내에 정적 클래스 만 선언 할 수 있다는 것을 기억하십시오. 내부 클래스 내부에 선언하는 것은 불법입니다.
public class Test {
public class Inner1 {
public class Inner2 {
public class Inner3 {
}
}
}
public static class nested1 {
public static class nested2 {
public static class nested3 {
}
}
}
}
level
?, 중첩 클래스 (정적 / 비 정적)는 단순히 최상위 클래스의 멤버입니다. :) - PermGenErrorstatic
회원. - user207421
중첩 클래스 (클래스 내의 클래스)만이 정적으로 선언 될 수 있습니다. 따라서 중첩 클래스에 액세스하기 위해 부모 클래스를 인스턴스화 할 필요가 없습니다.
좋은 예제 코드가 있습니다.이 대답
이 클래스와 포함하는 클래스의 관계를 설명합니다.
내부 수업다른 클래스의 범위 내에서 정의 된 클래스입니다. 내부 클래스의 인스턴스는 컨테이너 클래스 (인스턴스가 만들어진 인스턴스)의 특정 인스턴스에 연결됩니다.
정적 중첩 클래스중첩 된 클래스이지만 static으로 정의됩니다. 정적 멤버와 마찬가지로 특정 인스턴스와 관련이 없습니다. 그들은 단지 포함하는 클래스에 속합니다. 중첩 클래스에서는 특정 인스턴스가 연결되어 있지 않기 때문에 포함하는 클래스의 정적이 아닌 멤버 / 메서드를 참조 할 수 없습니다.