> Java > java지도 시간 > 본문

Java에서 new와 newInstance의 차이점은 무엇입니까?

不言
풀어 주다: 2018-09-21 16:33:34
원래의
2126명이 탐색했습니다.

이 기사에서는 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에 대한 정적 로딩 메서드를 호출하면 더 나은 유연성을 얻을 수 있으며, 이는 디커플링 수단을 제공합니다.



[보충:]

newInstance: 약한 유형. 무능한. 매개변수가 없는 생성자만 호출할 수 있습니다.

new: 강력하게 입력되었습니다. 상대적으로 효율적입니다. 모든 공개 생성자를 호출할 수 있습니다.
newInstance()는 IOC, 리플렉션, 인터페이스 지향 프로그래밍 및 종속성 반전과 같은 기술적인 방법을 구현하기 위한 불가피한 선택입니다. new는 특정 클래스의 인스턴스화만 구현할 수 있으며 인터페이스 프로그래밍에는 적합하지 않습니다.
내부에서는 이 클래스의 기본 생성자를 통해 객체가 생성됩니다. 기본 생성자가 없으면 InstantiationException이 발생합니다. 기본 생성자에 액세스할 수 있는 권한이 없으면 IllegalAccessException이 발생합니다. 코드 적용:

new와 newInstance가 동일한 효과를 갖는 것을 볼 수 있습니다.

위 내용은 Java에서 new와 newInstance의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿