나는 Java
을 배우고 있으며 abstract classes and interfaces
은 인스턴스화 할 수 없다는 것을 알고 있습니다. 그러나 java.lang.System
의 문서는 추상적이면서 인터페이스가 아닌 instantiated
이 될 수 없다고 말합니다.
Java의 시스템 클래스
나는 그것에 대해 설명하지 못했습니다. 누군가 설명해 주시겠습니까?
누군가 이러한 클래스를 만들 수 있습니까?
나는 Java
을 배우고 있으며 abstract classes and interfaces
은 인스턴스화 할 수 없다는 것을 알고 있습니다. 그러나 java.lang.System
의 문서는 추상적이면서 인터페이스가 아닌 instantiated
이 될 수 없다고 말합니다.
Java의 시스템 클래스
나는 그것에 대해 설명하지 못했습니다. 누군가 설명해 주시겠습니까?
누군가 이러한 클래스를 만들 수 있습니까?
간단합니다. public 생성자가 없습니다.
final public class Abc {
private Abc() {}
}
클래스를 인스턴스화하려면 보이는 생성자가 필요합니다. 하지만 java.lang.System은이를 제공하지 않습니다.
간편함 : 클래스를 final
으로 만들면 확장 할 수 없으므로 private
생성자가 있으므로 new System()
이 작동하지 않습니다.
이것이 바로 System
의 작동 방식입니다.
당신은 juste 개인 생성자 클래스를 생성하고 최종 그래서 다른 클래스를 확장 할 수 있도록, public 생성자가없는 클래스를 인스턴스화 할 수 없습니다
당신은 자신이 그렇게 할 수 있습니다 그것은 : 당신은 어느 쪽인가 당신을위한 클래스의 객체 (싱글 톤 패턴을 CF), 또는 정적 멤버를 인스턴스화하는 공공 정적 멤버가 필요합니다
public final class MyClass {
private MyClass() {
}
}
참고.
java.lang.System은 Java의 "정적"클래스로, 정적 메서드 만있는 클래스이며 사용되기 전에 인스턴스를 만들거나 허용하지 않습니다.
java는 클래스 정의 (예 : C#)에 키워드 "정적"을 허용하지 않으므로 이러한 정적 클래스를 얻는 가장 좋은 방법은 생성자를 private으로 만드는 것입니다. 예를 들면 다음과 같습니다.
public final class System {
private System() { throw new UnsupportedOperationException(); }
public static void method1() { ... }
...other public static methods
}
이것은 바보 같은 증거는 아닙니다. 컴파일러에 의해 검사되지만 프로그래머가하지 말아야 할 것으로 예상되는 자체 메서드 중 하나에서만 생성되도록 클래스를 제한합니다 (잊지 않으면 예외로 상기시킵니다).