Java基础之—反射(四)
【摘要】
Java基础之—反射(四)
一、概述
主要介绍通过反射创建具体类的对象。
二、创建具体类对象方法
import java.lang.reflect.Constructor; class User{ public User(){} private User(String name){} public String toStri...
Java基础之—反射(四)
一、概述
主要介绍通过反射创建具体类的对象。
二、创建具体类对象方法
-
import java.lang.reflect.Constructor;
-
-
-
class User{
-
-
public User(){}
-
private User(String name){}
-
public String toString() {
-
return "User对象";
-
}
-
}
-
public class NewInstanceDemo {
-
-
public static void main(String[] args) throws Exception {
-
//传统方式
-
//System.out.println(new User());
-
//使用反射创建 User的 对象
-
-
Class<User> clz = User.class;
-
-
-
/**
-
*
-
* 该方法创建对象,但是只能用于:
-
* 必须有一个非私有的无参的构造器;
-
* T newInstance() 创建此 Class 对象所表示的类的一个新实例。
-
*
-
* new 类名();
-
*/
-
-
User u = clz.newInstance();//Class pm.NewInstanceDemo can not access a member of class pm.User with modifiers "private"
-
System.out.println(u);
-
-
//调用public User(String name){}
-
-
//new User("will");
-
//先获得需要被调用的构造器
-
//Constructor<User> con = clz.getConstructor(String.class);
-
Constructor<User> con = clz.getDeclaredConstructor(String.class);
-
System.out.println(con);
-
//现在只需要执行这个构造器
-
/**
-
* T newInstance(Object... initargs)
-
使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
-
*/
-
-
//私有的成员是受保护的,不能直接访问
-
-
//若要访问私有的成员,得先申请一下
-
-
con.setAccessible(true);
-
-
//
-
u = con.newInstance("Will");
-
-
System.out.println(u);
-
-
//====================================
-
-
-
}
-
}
创建JFrmeDemo类的对象例子:
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.util.Properties;
-
-
import javax.swing.JFrame;
-
-
-
public class JFrameDemo {
-
public static void main(String[] args) throws Exception {
-
-
/*JFrame jf = new JFrame();
-
jf.setVisible(true);*/
-
-
//使用反射来做
-
-
//得到JFrame字节码
-
/*Class<javax.swing.JFrame> clz = (Class<JFrame>) Class.forName("javax.swing.JFrame");
-
//创建对象
-
JFrame jf = clz.newInstance();
-
jf.setVisible(true);*/
-
-
new JFrameDemo().newInstance();
-
}
-
-
public void newInstance(){
-
InputStream in = this.getClass().getClassLoader().getResourceAsStream("obj.properties");
-
-
Properties p = new Properties();
-
-
try {
-
p.load(in);
-
String val = p.getProperty("JFrame");
-
System.out.println(val);
-
//使用反射创建对象
-
-
Class<JFrame> clz = (Class<JFrame>) Class.forName(val);
-
-
JFrame j = clz.newInstance();
-
j.setVisible(true);
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
-
-
-
-
}
-
}
文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。
原文链接:brucelong.blog.csdn.net/article/details/95520193
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)