java에서 Class.forName의 역할에 대한 간단한 설명

3297 단어 javaClass.forName
Class.forName (xxx.xx.xx) 은 클래스를 반환합니다.
하나.우선 자바에서 어떤class도 가상 컴퓨터에 불러와야 실행할 수 있다는 것을 알아야 한다.
1. forName은 클래스를 불러오는 데 사용됩니다. (new는 메모리에 불러오는 클래스에 따라 실례를 만들어서 구분해야 합니다.)언제 사용할지 이 문제를 고려해 보세요. 문자열 변수를 드릴게요. 이것은 하나의 패키지 이름과 클래스 이름을 대표합니다. 어떻게 실례화합니까?
    A a = (A)Class.forName("pacage.A").newInstance();이것과 A a = new A();같은 효과예요.
2. jvm는 클래스를 불러올 때 클래스의 정적 코드 세그먼트를 실행합니다. 정적 코드는class와 연결되어 있음을 기억하십시오.class 불러오는 데 성공하면 정적 코드를 실행한 것을 나타냅니다. 그리고 앞으로 이 정적 코드를 실행하지 않을 것입니다.
Class.forName(xx.xx.xx)의 역할은 JVM이 지정한 클래스를 찾고 불러오는 것입니다. 즉, JVM이 클래스의 정적 코드 세그먼트를 실행합니다.
3. 사용자가 입력한 문자열에 따라 클래스 대상을 동적으로 불러오고 만듭니다

String str =   

Class t = Class.forName(str);  

t.newInstance(); 

2.하나의 클래스를 초기화하고 하나의 실례를 생성할 때 newInstance () 방법과 new 키워드는 하나의 방법, 하나의 키워드를 제외하고 가장 주요한 차이점은 무엇입니까?
1. 그들의 차이점은 대상을 만드는 방식이 다르다는 것이다. 전자는 클래스 불러오는 메커니즘을 사용하고 후자는 새로운 클래스를 만드는 것이다.
2. 그러면 왜 두 가지 창설 대상 방식이 있습니까?
이것은 주로 소프트웨어의 신축성, 확장성, 중용 등 소프트웨어 설계 사상을 고려한다.Java의 공장 모드는 newInstance () 방법을 사용하여 대상을 만들기 때문에 공장 모드를 왜 사용하는지 구체적인 답을 찾을 수 있습니다.예:

    class c = Class.forName(“Example”);  

    factory = (ExampleInterface)c.newInstance();  

그 중에서 ExampleInterface는 Example의 인터페이스로 다음과 같이 쓸 수 있다

   String className = "Example";  

   class c = Class.forName(className);  

   factory = (ExampleInterface)c.newInstance();  

더 나아가 다음과 같은 형식으로 쓸 수 있다

   String className = readfromXMlConfig;// xml

  class c = Class.forName(className);  

  factory = (ExampleInterface)c.newInstance();  

위의 코드는 이미 Example의 클래스 이름이 존재하지 않는다. 그의 장점은 Example 클래스가 어떻게 변화하든지 상술한 코드는 변하지 않고 심지어는 Example의 형제 클래스인 Example2, Example3, Example4를 교체할 수 있다는 것이다. 그들이 Example Interface를 계승하기만 하면 된다.  3.JVM의 측면에서 볼 때, 우리가 키워드 new를 사용하여 클래스를 만들 때, 이 클래스는 불러오지 않을 수 있습니다.하지만 newInstance() 방법을 사용할 때
반드시 보증해야 한다.
1. 이 종류는 이미 불러옵니다.
2. 이 종류는 이미 연결되어 있다.
위의 두 단계를 완성한 것은 바로 Class의 정적 방법 forName () 에서 완성한 것입니다. 이 정적 방법은 시작 클래스 마운트, 즉 자바 API를 마운트하는 마운트를 호출합니다.이제 알 수 있듯이 new Instance () 는 실제적으로 new라는 방식을 두 단계로 분해한다. 즉, 먼저 Class 불러오는 방법으로 어떤 종류를 불러오고 실례화한다.이렇게 단계별로 나누는 장점은 명백히 알 수 있다.class의 정적 로드 방법 forName을 호출할 때 더 좋은 것을 얻을 수 있습니다
의 유연성은 결합을 낮추는 수단을 제공했다.셋.마지막으로 가장 간단한 설명으로 new 키워드와 newInstance () 방법의 차이를 구분합니다. 1.newInstance: 약한 유형입니다.저효율.무참 구조만 호출할 수 있습니다.    2. new: 강한 타입.상대적으로 효율적이다.모든 퍼블릭 구조를 호출할 수 있습니다.
데이터베이스 개발 경험이 있는 친구는 왜 우리가 데이터베이스 드라이버를 불러올 때 newInstance () 방법을 사용하지 않았는지 발견할 수 있다.
즉 어떤 jdbc가 데이터베이스에 연결된 쓰기 방법은 Class입니다.forName(xxx.xx.xx);일부: 클래스.forName(xxx.xx.xx).newInstance(), 왜 이 두 가지 방법이 있습니까?아까 말씀드렸듯이, Class.forName("");의 역할은 JVM이 지정한 클래스를 찾고 불러오는 것입니다. 클래스에 정적 초기화기가 있으면 JVM은 클래스의 정적 코드 세그먼트를 실행합니다.
그러나 JDBC 규범에서 이 드라이버 클래스는 DriverManager에 자신을 등록해야 한다고 명확히 요구한다. 즉, 모든 JDBC 드라이버의 드라이버 클래스 코드는 다음과 유사해야 한다

    public class MyJDBCDriver implements Driver {
    static {
       DriverManager.registerDriver(new MyJDBCDriver());
   }
   }
  
정적 초기화기에 등록이 되어 있기 때문에 JDBC를 사용할 때 Class만 필요합니다.forName(XXX.XXX);됐어.

좋은 웹페이지 즐겨찾기