이 기사에서는 Java에서 new와 newInstance의 차이점이 무엇인지 설명합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
클래스를 초기화하고 인스턴스를 생성할 때 newInstance()와 new의 차이점은 무엇인가요?
newInstance를 사용하는 것과 new를 사용하는 것은 차이점이 있습니다. 전자는 클래스를 사용하는 방식입니다. 로딩 메커니즘, 그렇다면 객체를 생성하는 방법이 두 가지인 이유는 무엇입니까? 이는 확장성, 확장성, 재사용성 등 소프트웨어 개념의 관점에서 설명해야 합니다.
Java의 팩토리 패턴은 newInstance를 사용하여 객체를 생성하는 경우가 많기 때문에 팩토리 패턴을 사용해야 하는 이유에 대한 구체적인 답변도 찾을 수 있습니다.
예:
Class c = Class.forName(“A”); factory = (AInterface)c.newInstance();
여기서 AInterface는 A의 인터페이스입니다. 이렇게 작성하면 다음과 같이 이해할 수 있습니다.
String className = “A”; Class c = Class.forName(className); factory = (AInterface)c.newInstance();
또한 아래에 작성하면 다음과 같이 이해할 수 있습니다.
String className = readfromXMlConfig;//从xml 配置文件中获得字符串 Class c = Class.forName(className); factory = (AInterface)c.newInstance();
위 코드는 클래스를 제거합니다. A 이름, 장점: 클래스 A가 어떻게 변경되더라도 위의 코드는 변경되지 않고 그대로 유지되며 A인터페이스를 상속하는 한 A의 형제 클래스 B, C, D... 등을 대체할 수도 있습니다.
JVM의 관점에서 new를 사용할 때는 new 클래스를 로드할 필요가 없습니다.
그러나 newInstance를 사용할 때는 다음 사항을 확인해야 합니다.
1. 이 클래스가 로드되었습니다. 이 수업이 연결되었습니다. 위의 두 단계를 완료하는 것은 클래스의 정적 메서드 forName()입니다. 이 정적 메서드는 시작 클래스 로더(즉, Java API를 로드하는 로더)를 호출합니다.
JVM에 대한 위의 이해를 바탕으로 newInstance는 실제로 새 메서드를 두 단계로 분해한다고 말할 수 있습니다. 즉, 먼저 클래스 로딩 메서드를 호출하여 특정 클래스를 로드한 다음 인스턴스화합니다.
이 단계별 접근 방식의 이점은 분명합니다. 클래스의 Name에 대한 정적 로딩 메서드를 호출하면 더 나은 유연성을 얻을 수 있으며, 이는 디커플링 수단을 제공합니다.
[보충:]
new: 강력하게 입력되었습니다. 상대적으로 효율적입니다. 모든 공개 생성자를 호출할 수 있습니다.
newInstance()는 IOC, 리플렉션, 인터페이스 지향 프로그래밍 및 종속성 반전과 같은 기술적인 방법을 구현하기 위한 불가피한 선택입니다. new는 특정 클래스의 인스턴스화만 구현할 수 있으며 인터페이스 프로그래밍에는 적합하지 않습니다.
내부에서는 이 클래스의 기본 생성자를 통해 객체가 생성됩니다. 기본 생성자가 없으면 InstantiationException이 발생합니다. 기본 생성자에 액세스할 수 있는 권한이 없으면 IllegalAccessException이 발생합니다. 코드 적용:
new와 newInstance가 동일한 효과를 갖는 것을 볼 수 있습니다.
위 내용은 Java에서 new와 newInstance의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!