>  기사  >  Java  >  Java에서 개인 생성자를 사용하는 방법에 대한 자세한 설명

Java에서 개인 생성자를 사용하는 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-14 10:48:521856검색

이 글에서는 Java 전용 생성자의 의미와 키워드를 주로 소개하고, 사용 방법을 예제를 통해 보여줍니다. 도움이 필요한 친구들은 참고할 수 있습니다.

Java 클래스의 특수 멤버로서 생성자는 제어할 키워드를 설정할 수도 있습니다. 그들의 접근 권한. 대부분의 경우 일반적으로 생성자를 public 멤버, 즉 public으로 설정합니다. 기본적으로 키워드를 작성하지 않으면 해당 액세스 권한도 public입니다. 이런 방식으로 클래스의 새 객체를 생성할 때 생성자는 객체가 생성된 후 자동으로 호출되며, 물론 필드 초기화 프로그램과 초기화가 있는 경우 다른 클래스 멤버가 기본 초기 값으로 설정된 후에 발생합니다. 블록이 있는 경우 생성자에 대한 호출은 이 후에 발생합니다. 생성자의 주요 기능은 new가 객체에 대한 참조를 반환하기 전에 객체를 초기화하는 것입니다.

본론으로 들어가 보겠습니다. 민간 ​​건설업자란 무엇입니까? 소위 프라이빗 생성자란 프라이빗 키워드로 선언된 생성자, 즉 프라이빗 키워드로 선언된 생성자를 말한다. . 일반 public 생성자와 가장 큰 차이점은 접근 권한이 private이기 때문에 이를 포함하는 클래스에서만 접근이 가능하고, 클래스 외부에서는 호출이 불가능하므로 객체 생성을 막을 수 있다는 점이다. 따라서 클래스에 전용 생성자가 하나만 있고 공용 생성자가 없으면 개체가 생성될 수 없습니다.

클래스의 생성자가 비공개이므로 이 클래스는 인스턴스화할 수 없고 상속될 수 없습니다. "효과적인 Java"의 3조: 개인 생성자 또는 열거형을 사용하여 싱글톤 속성을 향상시킵니다. 소위 Singleton 특성은 한 번만 인스턴스화되는 클래스를 나타냅니다. 조항 4: 민간 생성자를 통해 비 인스턴스화 기능을 강화합니다. Java에서 싱글톤을 구현하는 방법에는 두 가지가 있습니다.


public class Elvis {
 public static final Elvis INSTANCE = new Elvis();
 private Elvis() {}
}


public class Elvis {
 private static final Elvis INSTANCE = new Elvis();
 private Elvis() {}
 public static Elvis getInstance() { return INSTANCE;}
}

방법 1: 비공개 생성자는 공개 정적 최종 필드 Elvis.INSTANCE를 인스턴스화하기 위해 한 번만 호출할 수 있습니다. 하나의 Elvis 인스턴스여야 합니다(권한이 있는 클라이언트는 AccessibleObject.setAccessible 메서드를 사용하여 리플렉션 메커니즘을 통해 개인 생성자를 호출할 수 있습니다).

방법 2: 정적 메서드 getInstance를 사용하여 생성되지 않는 동일한 개체에 대한 참조를 반환합니다. 다른 Evlis 인스턴스.

개인 생성자가 필요한 이유는 무엇입니까? 클래스를 인스턴스화할 수 없는 경우 이 클래스의 메서드를 사용하는 방법은 무엇입니까?

개인 생성자가 존재하면 특정 클래스가 인스턴스화되고 하위 클래스화되지 않을 수 있습니다. 이러한 클래스는 일반적으로 java.lang.Math 등과 같은 도구 클래스입니다. 이러한 클래스의 메서드에 액세스하려면 공용 정적 메서드를 정의할 수 있습니다. A.methon()


public class A {
 private A() {}
 public static void methon() {}    
}

java.lang.Math에서 전용 생성자를 사용하는 등의 구현을 위해 전용 생성자를 사용하여 Math 클래스가 final로 정의되고 해당 메소드가 Static임을 알 수 있습니다. , 따라서 해당 메서드를 호출하려면 Math.sin(x)만 필요합니다.


public final class Math {
 private Math() {}
 public static final double E = 2.7182818284590452354;
 public static final double PI = 3.14159265358979323846;
 public static double sin(double a) {
  return StrictMath.sin(a); // default impl. delegates to StrictMath
 } 
 public static double cos(double a) {
  return StrictMath.cos(a); // default impl. delegates to StrictMath
 }
 public static double tan(double a) {
  return StrictMath.tan(a); // default impl. delegates to StrictMath
 }
 ......
 public static float scalb(float f, int scaleFactor) {
  return sun.misc.FpUtils.scalb(f, scaleFactor);
 }
}

위 내용은 Java에서 개인 생성자를 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.