获取构造器并使用构造器创建对象

package Reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

class Student
{
int age;
String name;

public Student()
{
System.out.println("调用无参构造器创建对象");
}
public Student(int age,String name)
{
this.age=age;
this.name=name;
System.out.println("调用有参构造器创建对象");
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}

}
public class ConstructorInvoke {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//传统方式创建对象
//Student stu=new Student(18,"小明");

//利用反射创建对象
//1 先找到被调用构造器的字节码对象
Class<Student> clazz=Student.class;
//2 找到构造器
Constructor<Student> cons=clazz.getConstructor(int.class,String.class);
System.out.println(cons);
//3 调用构造器创建对象
Student stu= cons.newInstance(18,"李三");
System.out.println(stu);

}

}

调用私有构造器 调用带有前缀的declare方法  出现 Class Reflect.ConstructorInvoke can not access a member of class Reflect.Student with modifiers "private"

所以我们还要将这个构造器设置为可访问的.

时间: 2024-10-10 14:24:37

获取构造器并使用构造器创建对象的相关文章

实例构造器和类型构造器

实例构造器,新建对象时,设置对象的初始状态,平时接触的比较多,就不多说了. 类型构造器(静态构造器,类构造器),用来设置类型的初始状态.类型默认没有定义类型构造器,如果定义,也只能定义一个.此外,类型构造器没有参数,代码示例如下: internal sealed class SomeRefType { static SomeRefType() { // SomeRefType被首次访问时,执行这里的代码 } } 类型构造器的定义类似于无参的实例构造器,区别在于必须将其标记为static.此外,类

Scala主构造器和辅助构造器

注:1.本文主要参考自<快学Scala>2.使用jd-gui反编译   Scala的构造方法跟Scala很相似,也可以有任意多的构造器.在Scala中构造器分为主构造器和辅助构造器 在Scala中可以包括一个主构造器和任意多个辅助构造器 主构造器 在Scala中,每个类都有主构造器.而且主构造器的定义是跟类定义交织在一起的. 主构造器的参数是直接放置在类名后面的,如下: class Person(val name:String,val age:Int) { //your code } 主构造器

008-Scala主构造器、私有构造器、构造器重载实战详解

008-Scala主构造器.私有构造器.构造器重载实战详解 Scala主构造器实战 无参数的主构造器 分析 1.name 需要赋初值,一般通过占位符来代表空值 2.private 声明私有的age 生成的getter/setter方法也是私有的;不加则私有的age生成公有的getter/setter方法 3.private[this] 表示是只属于当前的实例本身,别人无法通过实例访问,也就是说再实例化对象也不可以访问此属性 4.def定义辅助构造器(重载构造器),其他的重载构造器必须调用主构造器

类型构造器与实例构造器

比较实例构造器和类型构造器的区别,类型构造器必须是static,并且不允许定义访问修饰符,类型构造器只能被执行一次.: class mybaseclass { public mybaseclass() { Console.WriteLine("基类实例构造器"); } static mybaseclass()//类型构造器不允许出现访问修饰符 { Console.WriteLine("基类类型构造器"); } public void test()//这里如果是pri

请问什么是便利构造器(快速构造器)

今天在查找的时候,发现这个比较浅显易懂,记录下,下面的是人家的回复 http://bbs.itheima.com/thread-112451-1-1.html 1.便利构造器是一种快速创建对象的方式.它本质上是把初始化方法做了一次封装,方便外界使用 2.便利构造器是一个类方法(以+开头) 类似于Java中的构造方法, 指的是在init的时候,同时给属性变量赋值的方法 比如 @interface Person : NSObject{ int _age; NSString *_name; } - (

子类构造器与父类构造器

子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表. 如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器. class SuperClass { private int n; SuperClass(){ System.out.println("SuperClass()"); } Super

Java反射《二》获取构造器

1 package com.study.reflect; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.InvocationTargetException; 5 6 /** 7 * 通过类来反射出构造器. 8 * @ClassName: ConstructorDemo 9 * @author BlueLake 10 * @date 2015年8月13日 下午5:16:07 11 */ 12 public

js之oop &lt;一&gt; 创建对象,构造器(class)

js中除了基本类型,就是对象.可以说在js中处处皆对象. 由于js是弱语言,在编写的过程中很容易混淆 object 和 class 也就是对象和构造器. object(对象):一般对象都由var关键字声明. class(构造器):js中function除了声明函数,也可以声明构造器.故构造器是特殊的函数. 创建对象: 常见创建对象的方法有两种. (1)对象字面量 var obj = { a:1, b:2 }; obj.a; //输出1 对象字面量创建的对象中也可以嵌套对象 var obj = {

java 反射机制获取类名、属性、方法、构造器和反射动态使用

被反射的类: @Table("tb_student") public class Student { @Fields(columnName="id",type="int",length=10) private int id; @Fields(columnName="studentName",type="varchar",length=10) private String studentName; @Fiel