>Java >java지도 시간 >newInstance() 메소드와 Java의 new 키워드 간의 차이점 소개

newInstance() 메소드와 Java의 new 키워드 간의 차이점 소개

黄舟
黄舟원래의
2017-09-02 10:33:171531검색

이 글은 Java에서 newInstance() 메소드와 new 키워드의 차이점에 대한 관련 정보를 주로 소개합니다. 이 글을 통해 해당 메소드의 차이점과 사용법을 익힐 수 있기를 바랍니다. (Java에서) 메소드와 new 키워드

* 차이점은 객체를 생성하는 방식에 있습니다. 전자는 클래스 로딩 메커니즘을 사용하는 반면 후자는 새 클래스를 생성합니다. * 그렇다면 객체를 생성하는 방법이 두 가지인 이유는 무엇입니까? 이는 주로 소프트웨어의 확장성, 확장성 및 재사용성과 같은 소프트웨어 설계 아이디어를 고려합니다.

* new 키워드를 사용하여 클래스를 생성할 때 클래스가 로드되지 않을 수 있습니다. 그러나 newInstance() 메서드를 사용할 때

*는 다음을 확인해야 합니다. 1. 이 클래스가 로드되었습니다. 2. 이 클래스가 연결되었습니다.
* newInstance()는 실제로 새 메서드를 두 단계로 분해합니다. 즉, 먼저 클래스 로딩 메서드를 호출하여 특정 클래스를 로드한 다음 인스턴스화합니다.
* 이 단계별 접근 방식의 이점은 분명합니다. 클래스의 Name에 대한 정적 로딩 메소드를 호출하면 더 나은 유연성을 얻을 수 있습니다.
*는 분리(결합 정도를 낮추는) 수단을 제공합니다.
* 마지막으로 가장 간단한 설명을 사용하여 new 키워드와 newInstance() 메서드의 차이점을 구별합니다.
* newInstance: 약한 유형입니다. 무능한. 매개변수가 없는 생성자만 호출할 수 있습니다.
* 신규: 강한 유형. 상대적으로 효율적입니다. 모든 공개 생성자를 호출할 수 있습니다.


코드는 다음과 같습니다.

import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 
import java.lang.reflect.Field; 
 
public class testInvoke { 
  public void work(){ 
    System.out.println("-----------"); 
  }  
  public testInvoke work(String a,Integer b){ 
    System.out.println(a + b); 
    return this; 
  } 
  public void work(Integer b, int c ){ 
    System.out.println(b + c); 
  } 
   
  public static void main(String[] args) throws SecurityException, NoSuchMethodException, InstantiationException,     IllegalAccessException, IllegalArgumentException, InvocationTargetException{ 
    Class<?> clazz = testInvoke.class; 
    //Class<?> clazz = Class.forName("invoke.testInvoke"); 
    //testInvoke tinvoke = new testInvoke(); Class<?> clazz = tinvoke.getClass();  
    System.out.println(clazz); 
    //如果源类的方法没有参数,则要用new Class[]{} 
    Method method1 = clazz.getMethod("work", new Class[]{}); 
    Method method2 = clazz.getMethod("work", new Class[]{String.class, Integer.class});  
    Method method3 = clazz.getMethod("work", new Class[]{Integer.class, int.class}); 
    Object invokeTest = clazz.newInstance(); 
    /* 
     * Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,<br/> 
     * 如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,<br/> 
     * 如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回<br/> 
     */ 
    //invoke方法的第一个参数是源类的实例,第二个参数是实例的值 
    Object result1 = method1.invoke(invokeTest, new Object[]{}); 
    Object result2 = method2.invoke(invokeTest, new Object[]{"aaaa",new Integer(10)}); 
    Object result3 = method3.invoke(invokeTest, new Object[]{3,new Integer(4)}); 
    System.out.println(result1); 
    System.out.println(result2); 
    System.out.println(result3); 
 
    Method[] methods = clazz.getMethods(); 
    for(Method method : methods){ 
      System.out.println(method.getName()); 
    } 
     
    Field[] fileds = clazz.getFields(); 
    for(Field filed: fileds){ 
      System.out.println(filed.getName()); 
    } 
  } 
}

콘솔 정보:


class invoke.testInvoke
-----------
aaaa10
7
null
invoke.testInvoke@de6ced
null
work
[Ljava.lang.Class;@c17164
work
[Ljava.lang.Class;@1fb8ee3
work
[Ljava.lang.Class;@61de33
main
[Ljava.lang.Class;@14318bb
wait
[Ljava.lang.Class;@ca0b6
wait
[Ljava.lang.Class;@10b30a7
wait
[Ljava.lang.Class;@1a758cb
equals
[Ljava.lang.Class;@1b67f74
toString
[Ljava.lang.Class;@69b332
hashCode
[Ljava.lang.Class;@173a10f
getClass
[Ljava.lang.Class;@530daa
notify
[Ljava.lang.Class;@a62fc3
notifyAll
[Ljava.lang.Class;@89ae9e

위 내용은 newInstance() 메소드와 Java의 new 키워드 간의 차이점 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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