Java反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3248字,纯文字阅读大概需要5分钟。
内容图文
![Java反射](/upload/InfoBanner/zyjiaocheng/646/6d31b7227e3e49a6bd2ed2fa61c3e818.jpg)
目录
3.1、最常用的方式: 可以利用 Class 类的静态方法: forName(className)
3.2、如果已经存在对应的对象, 则可以调用其 getClass() 方法
3.3、可以直接利用 类 的 class 静态属性: 该种方式不会使静态代码块执行.
一、什么是反射
反射其实是获取类的字节码文件,也就是.class文件。反射是学习 Java 框架的基础. Java 框架的底层实现都是基于反射
二、Class
1、 Class 是一个类型.
2、当一个 .class 文件被加载到 JVM 时, 在 JVM 内部会创建唯一的一个 Class 对象, 它对应 .class 文件。
三、如何得到 Class 对象
3.1、最常用的方式: 可以利用 Class 类的静态方法: forName(className)
String className = "com.atguigu.reflection.Person";
clazz = Class.forName(className);
3.2、如果已经存在对应的对象, 则可以调用其 getClass() 方法
Object object = new Person();
clazz = object.getClass();
3.3、可以直接利用 类 的 class 静态属性: 该种方式不会使静态代码块执行.
clazz = Person.class;
3.4、Class 对象的作用
Class 是反射的核心, 一切反射都是从 Class 开始的
四、如何使用反射调用构造方法
4.1、无参构造
Class<?> aClass = Class.forName("com.example.reflection.Person");
//调用无参构造
Object o = aClass.newInstance();
System.out.println(o);
//this is 无参构造 person()
//Person{name='tempName', age=18}
4.2、无参构造
Class<?> aClass = Class.forName("com.example.reflection.Person");
//调用无参构造
Constructor<?> constructor = aClass.getConstructor();
var o = constructor.newInstance();
System.out.println(o);
//this is 无参构造 person()
//Person{name='tempName', age=18}
4.3、有参构造
Class<?> aClass = Class.forName("com.example.reflection.Person");
// 调用有参构造
Constructor<?> constructor = aClass.getConstructor(String.class);
Object o3 = constructor.newInstance("张三");
System.out.println(o3);
//this is 有参构造 person(name)
//Person{name='张三', age=18}
五、如何使用反射调用方法
Class<?> aClass = Class.forName("com.example.reflection.Person");
Object o = aClass.newInstance();
//获取到public方法
Method method = aClass.getMethod("setName", String.class);
System.out.println(o);//Person{name='tempName', age=18}
//调用public方法
Object name = method.invoke(o,"zs");
System.out.println(o);//Person{name='zs', age=18}
//获取到private方法
Method method2 = aClass.getDeclaredMethod("privateMethod");
//使方法能够被调用
method2.setAccessible(true);
//调用方法
Object name2 = method2.invoke(o);
System.out.println(name2);
六、如何使用反射调用属性
Class<?> aClass = Class.forName("com.example.reflection.Person");
Object o = aClass.newInstance();
Field field = aClass.getField("age");
Object age = field.get(o);
System.out.println("public 属性age:" + age);//public 属性age:18
field.set(o, 28);
Object age2 = field.get(o);
System.out.println("变更后的public 属性age:" + age2);//变更后的public 属性age:28
Field field2 = aClass.getDeclaredField("name");
field2.setAccessible(true);
Object name = field2.get(o);
System.out.println("private 属性name:" + name);//private 属性name:tempName
field2.set(o, "张三");
Object name2 = field2.get(o);
System.out.println("变更后的private 属性name:" + name2);//变更后的private 属性name:张三
anhao78 发布了12 篇原创文章 · 获赞 0 · 访问量 126 私信 关注
内容总结
以上是互联网集市为您收集整理的Java反射全部内容,希望文章能够帮你解决Java反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。