我是靠谱客的博主 安静斑马,最近开发中收集的这篇文章主要介绍反射机制——获取Class中的构造函数一、通过反射实例化无参对象二、通过反射实例化有参对象三、Person类四、关键点,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
2019独角兽企业重金招聘Python工程师标准>>>
一、通过反射实例化无参对象
/***
* * @Title: createNewObject
* @Description: 反射实例化无参对象
* @param
* @throws
* Exception
* @return void
* @throws
*/
public static void createNewObject() throws Exception {
// 早期:
// new 的时候,先根据被new的类的名称寻找该类的字节码文件,加载至内存,
// 并创建该字节码文件对象,然后创建该字节码文件对应的Person对象。
// com.lh.reflection.bean.Person p = new
// com.lh.reflection.bean.Person();
// 现在:
String name = "com.lh.reflection.bean.Person";
// 寻找该类名称字节码文件 ,并加载至内存,生成Class对象
Class<Person> clazz = (Class<Person>) Class.forName(name);
// 如何产生该类的对象呢?
// 相当于调用Person类中的无参构造方法
Person person = clazz.newInstance();
}
二、通过反射实例化有参对象
/**
* @throws Exception *
* @Title: createNewObject2
* @Description:
* 反射实例化有参对象
* @param
* @return void
* @throws
*/
private static void createNewObject2() throws Exception {
//
com.lh.reflection.bean.Person p = new com.lh.reflection.bean.Person("小明", 20);
/***
* 当获取指定名称对应类中所体现的对象时,而该对象初始化不使用空参构造函数怎么办呢?
* 既然是通过指定的构造函数进行对象的初始化,所以应该先获取该构造函数,通过字节码文件对象即可完成。
* 该方法是getConstructor(Class<T>.. paramsType)
*
*/
String name = "com.lh.reflection.bean.Person";
// 寻找该类名称字节码文件 ,并加载至内存,生成Class对象
Class<Person> clazz = (Class<Person>) Class.forName(name);
// 获取指定的构造器对象
Constructor<Person> constructor = clazz.getConstructor(String.class, int.class);
// 通过构造器Constructor类中的newInstance()方法进行初始化
Person person = constructor.newInstance("小明", 20);
}
三、Person类
/**
* @Title: Person.java
* @Package com.lh.reflection.bean
* @Description: TODO
* @author Liu
* @date 2018年1月23日 下午3:06:10
* @version V1.0
*/
package com.lh.reflection.bean;
/**
* @ClassName: Person
* @Description: Person实体类
* @author Liu
* @date 2018年1月23日 下午3:06:10
*
*/
public class Person {
private int age;
private String name;
public Person() {
System.out.println("constructor no param run...");
}
public Person(String name,int age) {
this.age = age;
this.name = name;
System.out.println("constructor with param run..." + this.name + ":" + this.age);
}
public void show() {
System.out.println(name + "...show run..." + age);
}
private void method() {
System.out.println("method run");
}
public void paramMethod(String str, int num) {
System.out.println("paramMethod run..." + str + ":" + num);
}
public static void staticMethod() {
System.out.println("static method run...");
}
}
四、关键点
1、无参实例化只需要调用class对象的newInstance()方法即可。
2、有参实例化需要先通过getConstructor(Class<T>.. paramTypes)获取指定Constructor构造器对象,然后调用newInstance(Object.. objs)方法即可。
转载于:https://my.oschina.net/Howard2016/blog/1611962
最后
以上就是安静斑马为你收集整理的反射机制——获取Class中的构造函数一、通过反射实例化无参对象二、通过反射实例化有参对象三、Person类四、关键点的全部内容,希望文章能够帮你解决反射机制——获取Class中的构造函数一、通过反射实例化无参对象二、通过反射实例化有参对象三、Person类四、关键点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复