Class对象、反射机制、获取Constructor构造方法
- 1、Class对象的三种创建方法(Class首字母大写)
- public class Demo {
- public static void main(String[] args){
- Object obj=new Object();//方法一:先new对象,再调用方法,创建Class对象c1
- Class c1=obj.getClass();
- Class c2=Object.class;//方法二:使用.class属性,无需new对象,直接创建Class对象c2
- try {
- //方法三(推荐):调用Class类的forName方法,不需考虑类是否存在,功能强大。
- Class c3=Class.forName("java.lang.Object");
- System.out.println("c3哈希值:"+c3.hashCode());//哈希值判断是否指向同一对象
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- System.out.println("c1哈希值:"+c1.hashCode());
- System.out.println("c2哈希值:"+c2.hashCode());
- }
- }
Class对象的价值:反射机制。
Class对象可以看作某个类的影子,通过影子,可以获得这个类的方法、属性等。
如下案例中,Demo.java中的Class对象c是Example.java的影子。通过c,获得Examp中的方法类型、参数类型等。
2、获得Constructor构造方法(java.lang.reflect.Constructor包下)
class.getConstructors() 获取所有公有public构造方法。()内带参数,则获取指定的public构造方法。
class.getDeclaredConstructors() 获取所有构造方法。()内带参数,则获取指定构造方法。
构造方法Constructor的一些属性:getModifiers修饰符、getName名字、getParameterTypes参数类型
- public class Demo {
- public static void main(String[] args) {
- try {
- Class c = Class.forName("Example");//创建类对象。同一包下,直接使用
- Constructor cons[] = c.getDeclaredConstructors();//获取Example中的所有构造方法
- for (Constructor con : cons) {//con.getModifiers()返回Int型,所以转字符串
- System.out.print(Modifier.toString(con.getModifiers()) + " ");//获取修饰符
- System.out.println(con.getName());//方法名
- Class paras[] = con.getParameterTypes();//方法中的参数类型
- for (int i = 0; i < paras.length; i++) {
- System.out.println(paras[i].getSimpleName());//参数类型的简化名
- }
- }
- //无参数的构造方法。Example中toString
- Constructor cs1 = c.getDeclaredConstructor();//Example中无参数的构造方法
- Object obj = cs1.newInstance();//实例化
- System.out.println(obj.toString());//调用Example中toString方法
- //1个参数的构造方法。Example中id赋值123
- Constructor cs2 = c.getDeclaredConstructor(int.class);//Example中int型参数的构造方法
- obj = cs2.newInstance(123);//实例化
- System.out.println(obj.toString());//调用Example中toString方法
- //3个参数的构造方法。Example中id、name、price赋值
- Constructor cs3 = c.getDeclaredConstructor(int.class, String.class, double.class);//Example中3参数的构造方法
- cs3.setAccessible(true);//private私有方法无法使用,故获取权限
- obj = cs3.newInstance(123, "反射", 3.14);//实例化
- System.out.println(obj.toString());//调用Example中toString方法
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- }
- public class Example {
- int id;
- String name;
- double price;
- //Alt+Insert,Constructor快速创建构造方法
- public Example() {
- }
- public Example(int id) {
- this.id = id;
- }
- private Example(int id, String name, double price) {
- this.id = id;
- this.name = name;
- this.price = price;
- }
- //Alt+Insert,toString快速创建构造方法
- public String toString() {//返回Example的值
- return "Example{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", price=" + price +
- '}';
- }
- }
Class对象、反射机制、获取Constructor构造方法的更多相关文章
- Day16_89_通过反射机制获取所有构造方法
通过反射机制获取某个特定的构造方法 * 代码 import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; publ ...
- Day16_90_通过反射机制获取某个特定的构造方法
通过反射机制获取某个特定的构造方法 public class ReflectTest13 { public static void main(String[] args) throws ClassNo ...
- java反射机制获取自定义注解值和方法
由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- Day16_91_通过反射机制获取父类和父接口
通过反射机制获取父类和父接口 * 代码: import java.net.InterfaceAddress; public class ReflectTest14 { public static vo ...
- Day15_87_通过反射机制获取某个特定的方法
通过反射机制获取某个特定的方法 反射是通过 方法名+形参列表来区分各个方法的(形参列表要用class类型.加.class) 示例代码 import java.lang.reflect.Method; ...
- Day15_86_通过反射机制获取所有方法(method)
通过反射机制获取所有方法(method) import java.lang.reflect.Field; import java.lang.reflect.Method; import java.la ...
- Day14_83_反射机制获取某个特定属性的各部分
反射机制获取某个特定属性的各部分 * 通过属性名(变量名)来获取一个属性整体 例如: Field userNoField=c.getDeclaredField("userNo"); ...
- Day14_81_反射机制获取Class属性
反射机制获取Class属性 获取属性 方法一: Class对象 . getFields();只能用来获取公开的属性,不能获取有私有的或者受保护的属性 获取属性 方法二: Class对象 . getDe ...
- kettle job如何利用java的反射机制获取执行的sql语句
kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...
随机推荐
- 作业20171116 beta2及beta发布 成绩
申诉 对成绩有疑问或不同意见的同学,请在群里[@杨贵福]. 申诉时间截止2017年12月13日 17:00. 成绩 scrum01 scrum02 scrum03 scrum04 scrum05 sc ...
- 第六周-总结&结对编程
1.结对编程 结对编程的Partner依旧是郑蕊师姐(博客:http://www.cnblogs.com/zhengrui0452/) 我们一起改进的是郑蕊师姐做的“四则运算” 郑蕊师姐之前完成四则运 ...
- 《Linux内核设计与实现》读书笔记 4 进程调度
第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...
- github链接与心得体会
https://github.com/wangyuefang/test 第一次使用github,我觉得github是一个非常人性化的软件,使用起来很方便.而且可以把GitHub作为免费的远程仓库,如果 ...
- 第三个spring冲刺第3天
基本功能跟界面都完成了,今天小组开了个会,基于跟别的小组对比的效果,感觉自己组的效果没别人的好,很多方面还欠缺,所以我们会继续跟进完善.
- Beta 总结
前言 作业发布 组长 成员 贡献分 ★ 530 雨勤 14 311 旭 15 403 俊 16 223 元 14 437 海辉 17 7天 Beta 冲刺站立会议博客链接汇总 Beta 冲刺 (1/7 ...
- ASP.NET MVC应用安全性(一)——自定义错误处理
很多 ASP.NET MVC 开发者都会写出高性能的代码,很好地交付软件,等等.但是却并没有安全性方面的计划. 有一种攻击是攻击者截获最终用户提交的表单数据,将其改变再将修改后的数据发送到服务器. ...
- python pip包安装以及几个包的简单用法
1. centos74 安装完之后默认有python2.7.5 但是没有pip需要自己安装: copy from https://www.cnblogs.com/rain124/p/6196053.h ...
- Linux预处理、编译、汇编、链接和运行的过程(包括一些基本的命令)
转自Quinn0918的博客 一.预编译 1.将所有的#define删除,并展开所有的宏定义: 2.处理所有的预编译指令,例如:#if,#elif,#else,#endif; 3.处理#include ...
- fswatch rsync配置使用 rsync 传输大量细小文件
贴一个脚本这个脚本是rsync远程同步使用的一个脚本 rsync -avz --progress --exclude .git /Users/piperck/Desktop/gogogo/x pipe ...