java中的反射简单实例
package club.reflection.entity.User;
/**
* 实体类
*
*/
public class User {
public String name;
private Integer age;
private String sex; public User(){ }
public User(String name,Integer age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
} public void eat(){
System.out.println("喜欢吃!!!!");
}
public void show(){
System.out.println("name:"+name);
System.out.println("tage:"+age);
System.out.println("sex:"+sex);
}
public void show(String xxx){
System.out.println("name:"+name);
System.out.println("tage:"+age);
System.out.println("sex:"+sex);
System.out.println(xxx);
}
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import club.reflection.entity.User.User; /**
* 反射实例 通过反射获取实体类中的属性方法
* @author Mr储
*
*/
public class RefDemo { public static void main(String[] args) {
try {
//获得Class对象()方法一通过Class静态方法forNmae();
Class cls1 = Class.forName("club.reflection.entity.User.User");
//通过class属性
Class cls2 = User.class;
//对象中通过Object类的getClass();
Class cls3 = (new User()).getClass();
System.out.println(String.class);
//通过Class的newInstance()获得对象的实例返回Object类型
Object obj = cls3.newInstance();
//强制转换为User类型
User user = (User)obj;
// System.out.println(cls3.getName());//club.reflection.instance.User获得类的完整名字
// System.out.println(cls3.getConstructors());//获得构造方法 for(Field f : cls1.getDeclaredFields()){
System.out.println(f);
}
System.out.println("++++++++++");
for(Field f : cls1.getFields()){
System.out.println(f);
}
/*//初始化一个User对象
User u1 = new User("张三",18,"男"); //获取属性
u1.show();
showField(u1);
u1.show();//属性赋值后的比较 //获取方法
showMethods(u1);*/
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
/**
* 获得类的属性
*/
public static void showField(Object obj){
try {
//将obj转化为Class对象
Class cls = obj.getClass();
Field[] fields = cls.getDeclaredFields();//获得所有的属性
for(Field field : fields){
System.out.println(field.getName()+"\t"+field.getType().getName());//获取属性名和类型
//改变访问权限(使可以赋值)
field.setAccessible(true);
//给类中的属性赋值
if(field.getType().getName().equals("java.lang.String")){
field.set(obj, "名字");
}else if(field.getType().getName().equals("java.lang.Integer")){
field.set(obj, 222);
} }
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
/**
* 获取方法
*/
public static void showMethods(Object obj){
Class cls = obj.getClass();
Method[] methods = cls.getDeclaredMethods();//获取所有方法
for(Method m : methods){
System.out.println("方法:"+m);
System.out.println("方法名称:"+m.getName());
System.out.println("访问修饰符:"+Modifier.toString(m.getModifiers()));
System.out.println("返回值类型:"+m.getReturnType()); //获得参类型
Class[] ClassParameters = m.getParameterTypes();
for(Class c : ClassParameters){
System.out.println("参数类型:"+c.getName());
}
} try {
//获得对象的方法
Method show1 = cls.getMethod("show");
//执行方法
show1.invoke(obj); //获得对象的方法
/**
* "show"要执行的方法名
* String.calss 方法参数的参数类型
*/
Method show2 = cls.getMethod("show",String.class);
//执行方法
show2.invoke(obj, "反射调用传参");
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
java中的反射简单实例的更多相关文章
- Java中的反射以及简单运用(原理+例子)
Java反射 学习内容 1. 为什么要使用反射 2. 反射的概念 3. Java反射加载过程 4. 字节码对象理解 5. 获取字节码对象(.class)的三种方式 6. 反射常用API 8. 反射综合 ...
- 浅说Java中的反射机制(二)
写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...
- 浅说Java中的反射机制(一)
在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...
- 第89节:Java中的反射技术
第89节:Java中的反射技术 反射技术是动态的获取指定的类,和动态的调用类中的内容(没有类前就可以创建对象,将对象的动作完成,这就是动态的获取指定的类). 配置文件把具体实现的类名称定义到配置文件中 ...
- java笔记十:java中的反射
Java中,反射是一种强大的工具.它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接.反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而 ...
- 【Java基础】java中的反射机制与动态代理
一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...
- java中的反射(三)
目录 一.反射 1.class类 2.访问字段 3.调用方法 4.调用构造方法 5.获取继承对象 6.动态代理 二.sping中的反射 本篇转自:https://depp.wang/2020/05/0 ...
- java中的反射(二)
java中的反射(一):https://www.cnblogs.com/KeleLLXin/p/14060555.html 目录 一.反射 1.class类 2.访问字段 3.调用方法 4.调用构造方 ...
- Java中的反射和注解
前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...
随机推荐
- Workflow 中做拒绝操作时强制输入拒绝信息
在做AP发票审批驳回时,客户要求必须强制输入拒绝原因,代码如下: PROCEDURE Validate_Response ( Itemtype IN VARCHAR2, Itemkey IN VARC ...
- C/C++头文件使用 #ifndef #define #endif 的原因
背景 在编译的时候,出现"redefine"的错误,最后检查才发现对应的头文件没有写正确的预编译信息: #ifndef _HeadFileName_H #define _HeadF ...
- linux命令crontab
1.需求 服务端计划任务执行 2.例子 使用crontab命令 参考:http://justjavac.com/other/2013/09/22/linux-scheduled-task-cronta ...
- ubuntu
mongoChef: http://3t.io/mongochef/download/core/platform/#tab-id-3 背景色改成豆沙绿: /usr/share/themes/Ambia ...
- visual studio 2013 中配置OpenCV2.4.13 姿势
首先在path中添加 “C:\OpenCV\opencv\build\x64\vc12\bin” (地址随实际变化) 注:添加的都是*86不使用*64 在visualstudio 2013中配置 ...
- Authorization in Cloud Applications using AD Groups
If you're a developer of a SaaS application that allows business users to create and share content – ...
- 解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。
解决mysql Table 'xxx' is marked as crashed and should be repaired的问题. 某个表在进行数据插入和更新时突然出现Table 'xxx' is ...
- Angular2 NgModule
1. 说明 典型的模块是一个内聚的代码块,用来实现某种单一的功能.Angular2应用程序本质上是有一系列模块组成的,而且Angular 本身就是一组模块库.模块主要是导出一些东西——类,函数,值,供 ...
- strsep和strtok_r替代strtok
char *strtok(char *str, const char *delim) 会修改数据源.外部加锁才线程安全(strtok执行结束再解锁执行另一个strtok循环知道工作完成) 主要是以互斥 ...
- 相机变换与Ray-Casting
p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify; orphans: 0; widows ...