精华内容
下载资源
问答
  • Java类类getConstructor()方法及示例

    千次阅读 2020-07-05 01:20:39
    类的类getConstructor()方法 (Class class getConstructor() method) getConstructor() method is available in java.lang package. getConstructor()方法在java.lang包中可用。 getConstructor() method is used to...

    类的类getConstructor()方法 (Class class getConstructor() method)

    • getConstructor() method is available in java.lang package.

      getConstructor()方法在java.lang包中可用。

    • getConstructor() method is used to return a Constructor object that reflects the given public constructor of the class denoted by this Class object.

      getConstructor()方法用于返回一个Constructor对象,该对象反映此Class对象表示的类的给定公共构造方法。

    • getConstructor() method is a non-static method, it is accessible with the class object only and if we try to access the method with the class name then we will get an error.

      getConstructor()方法是一个非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法,则会收到错误消息。

    • getConstructor() method may throw an exception at the time of returning a Constructor object.

      返回一个Constructor对象时, getConstructor()方法可能会引发异常。

      • NoSuchMethodException: In this exception when a specifying method does not exist.NoSuchMethodException :在此异常中,当指定方法不存在时。
      • SecurityException: In this exception, it may raise when the security manager exists.SecurityException :在此异常中,当安全管理器存在时可能会引发此异常。

    Syntax:

    句法:

        public Constructor getConstructor (Class ...paramType);
    
    

    Parameter(s):

    参数:

    • Class ...paramType – represents the parameter array.

      Class ... paramType –表示参数数组。

    Return value:

    返回值:

    The return type of this method is Constructor, it returns Constructor object of the public constructor that meets the given parameter types.

    此方法的返回类型为Constructor ,它返回满足给定参数类型的公共构造方法的Constructor对象。

    Example:

    例:

    // Java program to demonstrate the example 
    // of Constructor getConstructor (Class ...paramType) method of Class 
    
    import java.lang.reflect.*;
    
    public class GetConstructorOfClass {
        public static void main(String[] args) throws Exception {
            // Creating an array of Class type
            Class[] cl = new Class[] {
                String.class
            };
    
            // It return the Constructor object that denotes
            // the public Constructor of the class denoted by
            // the Class object
            Constructor con = String.class.getConstructor(cl);
    
            // Display public Constructor of String Class
            System.out.println("Constructor of the Class: " + con);
        }
    }
    
    

    Output

    输出量

    Constructor of the Class: public java.lang.String(java.lang.String)
    
    
    

    翻译自: https://www.includehelp.com/java/class-class-getconstructor-method-with-example.aspx

    展开全文
  • getConstructor()和getDeclaredConstructor()区别? 通过类对象调用newInstance()方法,适用于无参构造方法,只能调用空参的构造方法: 例如:String.class.newInstance() public class Solution { public ...

    如何通过反射来创建对象?getConstructor()和getDeclaredConstructor()区别?

    1. 通过类对象调用newInstance()方法,适用于无参构造方法,只能调用空参的构造方法

      例如:String.class.newInstance()

    public class Solution {
    
        public static void main(String[] args) throws Exception {
    
            Solution solution = Solution.class.newInstance();
    
            Solution solution2 = solution.getClass().newInstance();
    
            Class solutionClass = Class.forName("Solution");
            Solution solution3 = (Solution) solutionClass.newInstance();
    
            System.out.println(solution instanceof Solution); //true
            System.out.println(solution2 instanceof Solution); //true
            System.out.println(solution3 instanceof Solution); //true
        }
        
    }
    
    1. 通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,适用于无参和有参构造方法

      例如:String.class.getConstructor(String.class).newInstance(“Hello”);

    public class Solution {
    
        private String str;
        private int num;
    
        public Solution() {
    
        }
    
        public Solution(String str, int num) {
            this.str = str;
            this.num = num;
        }
    
        public Solution(String str) {
            this.str = str;
        }
    
        public static void main(String[] args) throws Exception {
    
            Class[] classes = new Class[] { String.class, int.class };
            Solution solution = Solution.class.getConstructor(classes).newInstance("hello1", 10);
            System.out.println(solution.str); // hello1
    
            Solution solution2 = solution.getClass().getDeclaredConstructor(String.class).newInstance("hello2");
            System.out.println(solution2.str); // hello2
    
            Solution solution3 = (Solution) Class.forName("Solution").getConstructor().newInstance(); // 无参也可用getConstructor()
            System.out.println(solution3 instanceof Solution); // true
        }
    
    }
    

    getConstructor()和getDeclaredConstructor()区别:
    getDeclaredConstructor(Class<?>… parameterTypes)
    这个方法会返回制定参数类型的所有构造器,包括public的和非public的,当然也包括private的。
    getDeclaredConstructors()的返回结果就没有参数类型的过滤了。
    但是可以通过

    //去除私有权限
     solution2.setAccessible(true);
    

    再来看getConstructor(Class<?>… parameterTypes)
    这个方法返回的是上面那个方法返回结果的子集,只返回制定参数类型访问权限是public的构造器。
    getConstructors()的返回结果同样也没有参数类型的过滤。

    3.newInstance和new都可以创建对象,他们两有什么区别呢?

    • 类的加载方式不同

      在执行Class.forName(“a.class.Name”)时,JVM会在classapth中去找对应的类并加载,这时JVM会执行该类的静态代码段。在使用newInstance()方法的时候,必须保证这个类已经加载并且已经连接了,而这可以通过Class的静态方法forName()来完成的。
      使用关键字new创建一个类的时候,这个类可以没有被加载,一般也不需要该类在classpath中设定,但可能需要通过classlaoder来加载。

    • 所调用的构造方法不尽相同

      new关键字能调用任何构造方法。
      newInstance()只能调用无参构造方法。

    • 执行效率不同

      new关键字是强类型的,效率相对较高。
      newInstance()是弱类型的,效率相对较低。

    • 既然使用newInstance()构造对象的地方通过new关键字也可以创建对象,为什么又会使用newInstance()来创建对象呢?

      假设定义了一个接口Door,开始的时候是用木门的,定义为一个类WoodenDoor,在程序里就要这样写 Door door = new WoodenDoor() 。假设后来生活条件提高,换为自动门了,定义一个类AutoDoor,这时程序就要改写为 Door door = new AutoDoor() 。虽然只是改个标识符,如果这样的语句特别多,改动还是挺大的。于是出现了工厂模式,所有Door的实例都由DoorFactory提供,这时换一种门的时候,只需要把工厂的生产模式改一下,还是要改一点代码。
      而如果使用newInstance(),则可以在不改变代码的情况下,换为另外一种Door。具体方法是把Door的具体实现类的类名放到配置文件中,通过newInstance()生成实例。这样,改变另外一种Door的时候,只改配置文件就可以了。示例代码如下:
      String className = 从配置文件读取Door的具体实现类的类名;
      Door door = (Door) Class.forName(className).newInstance();
      再配合依赖注入的方法,就提高了软件的可伸缩性、可扩展性。

    展开全文
  • java 反射 getConstructor

    千次阅读 2019-04-09 13:41:57
    import java.lang.reflect.Constructor; public class Test { public static void main(String[] args) { Person p = new Person(1,"刘德华"); System.out.println(p.getClass()); Syste...
    import java.lang.reflect.Constructor;
    
    public class Test {
        public static void main(String[] args) {
            Person p = new Person(1,"刘德华");
            System.out.println(p.getClass());
            System.out.println(p.getClass().getName());
            Object p1 = new Person(1,"刘德华");
            System.out.println(p1.getClass());
            Object a=1;
    
            Class<?>[] clazzs = new Class<?>[2];
            clazzs[0]=a.getClass();
            clazzs[1]="ss".getClass();
            try {
                Constructor con=p1.getClass().getConstructor(int.class,String.class);
                System.out.println(con);
                Person obk=(Person)con.newInstance(1,"aaa");
                System.out.println(obk.getName());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    class Person{
        int id;
        String name;
        public Person(int id, String name) {
            super();
            this.id = id;
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

     

     

    展开全文
  • ********* getConstructor()和getDeclaredConstructor()区别:********* getDeclaredConstructor(Class<?>... parameterTypes) 这个方法会返回制定参数类型的所有构造器,包括public的和非public的,当然也...

    ********* getConstructor()和getDeclaredConstructor()区别:*********

    getDeclaredConstructor(Class<?>... parameterTypes) 
    这个方法会返回制定参数类型的所有构造器,包括public的和非public的,当然也包括private的。
    getDeclaredConstructors()的返回结果就没有参数类型的过滤了。

    再来看getConstructor(Class<?>... parameterTypes)
    这个方法返回的是上面那个方法返回结果的子集,只返回制定参数类型访问权限是public的构造器。
    getConstructors()的返回结果同样也没有参数类型的过滤。

    1. 通过类对象调用newInstance()方法,适用于无参构造方法:

       例如:String.class.newInstance()

     1 public class Solution {
     2 
     3     public static void main(String[] args) throws Exception {
     4 
     5         Solution solution = Solution.class.newInstance();
     6 
     7         Solution solution2 = solution.getClass().newInstance();
     8 
     9         Class solutionClass = Class.forName("Solution");
    10         Solution solution3 = (Solution) solutionClass.newInstance();
    11 
    12         System.out.println(solution instanceof Solution); //true
    13         System.out.println(solution2 instanceof Solution); //true
    14         System.out.println(solution3 instanceof Solution); //true
    15     }
    16     
    18 }

    2. 通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,适用于无参和有参构造方法。

       例如:String.class.getConstructor(String.class).newInstance("Hello");

    public class Solution {
     2 
     3     private String str;
     4     private int num;
     5 
     6     public Solution() {
     7 
     8     }
     9 
    10     public Solution(String str, int num) {
    11         this.str = str;
    12         this.num = num;
    13     }
    14 
    15     public Solution(String str) {
    16         this.str = str;
    17     }
    18 
    19     public static void main(String[] args) throws Exception {
    20 
    21         Class[] classes = new Class[] { String.class, int.class };
    22         Solution solution = Solution.class.getConstructor(classes).newInstance("hello1", 10);
    23         System.out.println(solution.str); // hello1
    24 
    25         Solution solution2 = solution.getClass().getDeclaredConstructor(String.class).newInstance("hello2");
    26         System.out.println(solution2.str); // hello2
    27 
    28         Solution solution3 = (Solution) Class.forName("Solution").getConstructor().newInstance(); // 无参也可用getConstructor()
    29         System.out.println(solution3 instanceof Solution); // true
    30     }
    31 
    32 }

     

    展开全文
  • 今天在使用反射创建java对象的时候,遇到了点小问题,查看API文档关于getConstructor()和getDeclaredConstructor()方法写的解释模糊不清,就写了几个测试,验证了getConstructor()与getDeclaredConstructor()方法的区别:...
  • java getConstructor 抛出NoSuchMethodException

    千次阅读 2018-10-14 15:21:08
    当构造函数声明为private的时候获取不到构造器 //用XML解析技术得到类的权限名称 ...Object object=clz.getConstructor().newInstance(); //给username设置属性 //获取属性描述器 BeanInfo beanInf...
  • Constructor 匹配无参构造函数,getConstructor(Class... parameterTypes) 匹配和参数配型相符的构造函数
  • nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister at org.springframework.beans.factory.support....
  • ConstructorInfo constructorInfoObj = myType.GetConstructor(BindingFlags.Instance | BindingFlags.Public, // null,CallingConventions.HasThis, types, null); // CustomBinder customBinder = new ...
  • 既然有了parameterTypes,换回原来的Constructor con = cls.getConstructor(Test1.class);完整代码如下 import java . lang . reflect .*; public class Test1 {   public static void main ( ...
  • Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister at org.hibernate.persister.internal.PersisterFactoryImpl.createEnti....
  • getConstructor、getDeclaredConstructor区别 getDeclaredConstructor:返回指定参数类型、所有声明的(包括private)构造函数 getConstructor:返回指定参数类型、具有public访问权限的构造函数 1、 /** *...
  • 初学Hibernate 框架,在练习数据库的关联关系映射实验测试中出现了Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister错误。 由此引出的的错误提示: Could not parse ...
  • 参考学习:...import java.lang.reflect.Constructor; public class Demo { public static void main(String[] args) thr...
  • java 反射机制 之 getConstructor获取有参数构造函数 然后newInstance执行有参数的构造函数
  • 问题: 直接通过Class类中的newInstance()和获取getConstructor()有什么区别? newInstance()方法, 只能通过空参的构造方法创建对象 getConstructor(Class&lt;T&gt;… parameterTypes)方法, 方...
  • Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister  at org.hibernate.persister.internal.PersisterFactoryImpl.create...
  • 通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,适用于无参和有参构造方法。例如:String.class.getConstructor(St
  • Hibernate的自学,是艰苦的。...今天写一对多Demo的时候遇到错误Could not get constructor for org.hibernate.persister.entity 检查了老半天映射文件还是没解决,感觉非常苦脑,于是就百度了一翻
  • 再来看getConstructor(Class<?>... parameterTypes) 这个方法返回的是上面那个方法返回结果的子集, 只返回制定参数类型访问权限是public的 构造器。 getConstructors()的返回结果同样也没有参数类型的过滤。 ...
  • 我的出现原因这个异常出现的原因我的比较复杂,一开始我是HQL的概念不清晰和SQL搞混后,纠正了发现在映射文件*.hbm.xml中有个属性在数据库是author,打成了auther造成的,然后修改后,在java bean类中也忘记修改。...
  • getConstructor()返回指定参数类型public的构造器。 getDeclaredConstructor()返回指定参数类型的private和public构造器。对于getDeclaredConstructor方法获得的构造器需要先设置可访问,在实例化对象。public ...
  • getDeclaredConstructor返回指定参数类型、所有声明的包括private的构造函数。 ...getConstructor返回指定参数类型、具有public访问权限的构造函数。   最后欢迎大家访问我的个人网站:1024s...
  • 2. 通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,适用于 无参和有参 构造方法。  例如:String.class.getConstructor(String...
  • getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 获取参数列表匹配的公共构造器 public Constructor<T> getDeclaredConstructor(Class<?>... ...
  • Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister" 哎哟喂,这个弟弟我还是头一次见,英文通俗易懂,但是看完了还是.....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 259,716
精华内容 103,886
关键字:

getconstructor