博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java反射机制demo(二)—通过Class实例化任意类的对象
阅读量:5301 次
发布时间:2019-06-14

本文共 2295 字,大约阅读时间需要 7 分钟。

 Java反射机制demo(二)—通过Class实例化任意类的对象

上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例。

任意一个类,UserInfo,

1 package com.aaron.reflect; 2  3 public class UserInfo{ 4     private int userId; 5     private String name; 6     private int age; 7      8     public int getUserId() { 9         return userId;10     }11     public void setUserId(int userId) {12         this.userId = userId;13     }14     public String getName() {15         return name;16     }17     public void setName(String name) {18         this.name = name;19     }20     public int getAge() {21         return age;22     }23     public void setAge(int age) {24         this.age = age;25     }26     @Override27     public String toString() {28         return "UserInfo [userId=" + userId + ", name=" + name + ", age=" + age + "]";29     }30     31 }32  

 

 使用newInstance方法,通过调用默认的无参构造来实例化一个UserInfo的对象

1 package com.aaron.reflect; 2  3 public class Demo1 { 4     public static void main(String[] args) { 5         Class
c = UserInfo.class;//获得Class类实例 6 UserInfo userInfo = null; 7 8 try { 9 userInfo = (UserInfo) c.newInstance();//通过Class类的实例获得UserInfo的实例10 } catch (InstantiationException e) {11 e.printStackTrace();12 } catch (IllegalAccessException e) {13 e.printStackTrace();14 }15 16 userInfo.setUserId(1);17 userInfo.setName("Squee,Spleen and Goblin");18 userInfo.setAge(10);19 20 System.out.println(userInfo);21 }22 }23  

 

 如果了解Java虚拟机,应该知道,一个对象在new之前,堆里是不会分配内存的。因此这个UserInfo的实例是通过Class的实例得到的。

运行结果:

 

UserInfo [userId=1, name=Squee,Spleen and Goblin, age=10]

 

注意事项:

newInstance()调用的是无参的空构造,如果只有参数的构造函数:如下:

private int userId;private String name;private int age;	public UserInfo(int userId, String name, int age) {	super();	this.userId = userId;	this.name = name;	this.age = age;}

运行Demo,抛出异常:

java.lang.InstantiationException: com.aaron.reflect.UserInfoat java.lang.Class.newInstance(Class.java:359)at com.aaron.reflect.Demo1.main(Demo1.java:9)Exception in thread "main" java.lang.NullPointerExceptionat com.aaron.reflect.Demo1.main(Demo1.java:16

此时,要定义一个空的构造函数(显式地声明一个空的构造函数)。 

所以,显式声明空的构造函数有时候也是一种很好的习惯。当你要使用反射时,一定不要忘记空的构造。

 

转载于:https://www.cnblogs.com/AaronCui/p/4911479.html

你可能感兴趣的文章
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>