Java基础之—反射(四)

举报
brucexiaogui 发表于 2021/12/30 00:39:31 2021/12/30
【摘要】 Java基础之—反射(四) 一、概述 主要介绍通过反射创建具体类的对象。 二、创建具体类对象方法 import java.lang.reflect.Constructor; class User{ public User(){} private User(String name){} public String toStri...

Java基础之—反射(四)

一、概述

主要介绍通过反射创建具体类的对象。

二、创建具体类对象方法


  
  1. import java.lang.reflect.Constructor;
  2. class User{
  3. public User(){}
  4. private User(String name){}
  5. public String toString() {
  6. return "User对象";
  7. }
  8. }
  9. public class NewInstanceDemo {
  10. public static void main(String[] args) throws Exception {
  11. //传统方式
  12. //System.out.println(new User());
  13. //使用反射创建 User的 对象
  14. Class<User> clz = User.class;
  15. /**
  16. *
  17. * 该方法创建对象,但是只能用于:
  18. * 必须有一个非私有的无参的构造器;
  19. * T newInstance() 创建此 Class 对象所表示的类的一个新实例。
  20. *
  21. * new 类名();
  22. */
  23. User u = clz.newInstance();//Class pm.NewInstanceDemo can not access a member of class pm.User with modifiers "private"
  24. System.out.println(u);
  25. //调用public User(String name){}
  26. //new User("will");
  27. //先获得需要被调用的构造器
  28. //Constructor<User> con = clz.getConstructor(String.class);
  29. Constructor<User> con = clz.getDeclaredConstructor(String.class);
  30. System.out.println(con);
  31. //现在只需要执行这个构造器
  32. /**
  33. * T newInstance(Object... initargs)
  34. 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
  35. */
  36. //私有的成员是受保护的,不能直接访问
  37. //若要访问私有的成员,得先申请一下
  38. con.setAccessible(true);
  39. //
  40. u = con.newInstance("Will");
  41. System.out.println(u);
  42. //====================================
  43. }
  44. }

创建JFrmeDemo类的对象例子:


  
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.Properties;
  4. import javax.swing.JFrame;
  5. public class JFrameDemo {
  6. public static void main(String[] args) throws Exception {
  7. /*JFrame jf = new JFrame();
  8. jf.setVisible(true);*/
  9. //使用反射来做
  10. //得到JFrame字节码
  11. /*Class<javax.swing.JFrame> clz = (Class<JFrame>) Class.forName("javax.swing.JFrame");
  12. //创建对象
  13. JFrame jf = clz.newInstance();
  14. jf.setVisible(true);*/
  15. new JFrameDemo().newInstance();
  16. }
  17. public void newInstance(){
  18. InputStream in = this.getClass().getClassLoader().getResourceAsStream("obj.properties");
  19. Properties p = new Properties();
  20. try {
  21. p.load(in);
  22. String val = p.getProperty("JFrame");
  23. System.out.println(val);
  24. //使用反射创建对象
  25. Class<JFrame> clz = (Class<JFrame>) Class.forName(val);
  26. JFrame j = clz.newInstance();
  27. j.setVisible(true);
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/95520193

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。