【反射之构造器(constructor)】

■如何获取到.class文件字节码对象:

  使用Class类的静态方法forName()方法,其参数:类名前(Person)必须加上包名(reflect)

 Class<?> personClass = Class.forName("reflect.Person");

■获取字节码对象的构造器分为两种:

  第一种:获取所有的构造器,只能获取公有的构造器,而不能获取到私有的构造器

Constructor<?>[] constructors = personClass.getConstructors();

  第二种:获取字节码的指定构造器,其参数为:传入构造器的参数类型加上“.class”

Constructor<?> constructor = personClass.getConstructor(String.class, int.class);

■如何使用构造器创建对象:

  使用构造器调用newInstance(),传入相应的参数。

Object p = constructor.newInstance("周娟娟", 23);

代码:

 1 package reflect_constructor;
 2
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.InvocationTargetException;
 5
 6 import reflect.Person;
 7
 8 public class ConstructorDemo {
 9
10     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
11         // 使用Class获取.class文件字节码对象。类名前(Person)必须加上包名(reflect)。
12         Class<?> personClass = Class.forName("reflect.Person");
13
14         // 获取对象的所有构造器(只能获取到公有的,不能获取到私有构造器)
15         Constructor<?>[] constructors = personClass.getConstructors();
16         for (Constructor<?> constructor : constructors) {
17             System.out.println(constructor);
18         }
19
20         // 使用字节码对象获取指定构造器
21         Constructor<?> constructor = personClass.getConstructor(String.class, int.class);
22         System.out.println(constructor);
23
24         // 使用构造器创建实例对象
25         Object p = constructor.newInstance("周娟娟", 23);
26         System.out.println(p);
27     }
28
29 }
 1 package reflect;
 2
 3 public class Person {
 4
 5     private String name;
 6     private int age;
 7
 8     public Person() {
 9     }
10
11     private Person(int age) {
12
13     }
14
15     public Person(String name, int age) {
16         super();
17         this.name = name;
18         this.age = age;
19     }
20
21     public String getName() {
22         return name;
23     }
24
25     public void setName(String name) {
26         this.name = name;
27     }
28
29     public int getAge() {
30         return age;
31     }
32
33     public void setAge(int age) {
34         this.age = age;
35     }
36
37     @Override
38     public String toString() {
39         return "Person [name=" + name + ", age=" + age + "]";
40     }
41
42 }
时间: 2024-08-07 04:31:32

【反射之构造器(constructor)】的相关文章

原型prototype、原型链__proto__、构造器constructor

创建函数时,会有原型prototype,有原型链__proto__,有constructor.(构造函数除外,没有原型) . prototype原型:是对象的一个属性(也是对象),使你有能力向对象添加属性和方法. __proto__原型链:指向创建它的函数对象的原型对象prototype. constructor构造器:返回创建此对象的函数. 创建一个函数 这个函数的constructor返回的是js底层的函数Function,它的原型链__proto__是function.__proto__是

java中构造器(Constructor)

构造器是一个创建对象时被自动调用的特殊方法,为的是初始化.构造器的名称应与类的名称一致. 当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null. 构造器可以改变这种默认的初始化. 构造器的作用:是创建Java对象的重要途径,是不是说构造器完全负责创建java对象? 答:是创建java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不是完全由构造器负责创建的. 首先要注意的

Java之反射 — 用法及原理

Java之反射 - 用法及原理 定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制. 用途 在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量.方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法.当然,也不是所有的都适合反射,有时可能会碰到一些情况无法正确的反射,是因为经过

【反射】Class Field Method Constructor

Class public final class java.lang.Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement 类型参数 T:由此 Class 对象建模的类的类型.例如, String.class 的类型是 Class<String>.如果将被建模的类未知,则使用 Class<?>. Instances of the class

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

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

js高级构造函数,实例对象和原型对象——prototype、__proto__和constructor构造器

一.前言 了解JavaScript面向对象,需要先了解三个名词: 构造函数,实例对象和原型对象. 注意:JavaScript中没有类(class)的概念,取而代之的是构造函数,两者类似却又有很大的差别. 先上代码,最常用的: function Person(name, age) { this.name = name; this.age = age; this.eat= function() { alert('吃西红柿') } } var person1 = new Person('小米', 28

java反射的用法

反射(运行时的类信息),在java里面得到了大量的使用,尤其是在一些框架里面(注解等等),多多少少都会用到反射,了解java的反射,对我们以后学习框架和写框架都会起到非常的重要! Class类与java.lang.reflect类库一起对反射的概念进行了支持,该类库包括了FieId.Method以及Constructor类.这些类型的对象是由JVM在运行时创建的,用以表示未知类里对应的成员.这样你就可以使用Constructor创建新的对象,用get()和set()方法读取和修改与FieId对象

Java反射—运用反射生成jdk动态代理

1.  核心类&接口 在Java的java.lang.reflect包下提供一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成jdk动态代理类或动态代理对象. Proxy是所有动态代理类的父类,它提供了两个静态方法来创建动态代理类和动态代理对象,如下: ?  static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces) ?  static Objec