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中的反射简单实例的更多相关文章

  1. Java中的反射以及简单运用(原理+例子)

    Java反射 学习内容 1. 为什么要使用反射 2. 反射的概念 3. Java反射加载过程 4. 字节码对象理解 5. 获取字节码对象(.class)的三种方式 6. 反射常用API 8. 反射综合 ...

  2. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  3. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  4. 第89节:Java中的反射技术

    第89节:Java中的反射技术 反射技术是动态的获取指定的类,和动态的调用类中的内容(没有类前就可以创建对象,将对象的动作完成,这就是动态的获取指定的类). 配置文件把具体实现的类名称定义到配置文件中 ...

  5. java笔记十:java中的反射

    Java中,反射是一种强大的工具.它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接.反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而 ...

  6. 【Java基础】java中的反射机制与动态代理

    一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...

  7. java中的反射(三)

    目录 一.反射 1.class类 2.访问字段 3.调用方法 4.调用构造方法 5.获取继承对象 6.动态代理 二.sping中的反射 本篇转自:https://depp.wang/2020/05/0 ...

  8. java中的反射(二)

    java中的反射(一):https://www.cnblogs.com/KeleLLXin/p/14060555.html 目录 一.反射 1.class类 2.访问字段 3.调用方法 4.调用构造方 ...

  9. Java中的反射和注解

    前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...

随机推荐

  1. linux 命令 之判断表达式

    摘自http://www.comptechdoc.org/os/linux/usersguide/linux_ugshellpro.html Tests There is a function pro ...

  2. Bestcoder#5 1002

    Bestcoder#5 1002 Poor MitsuiTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  3. java 反序列化PHP

    由于本人所在开发的项目,前期是由php完成的,这里需要对数据库中php序列化的字符串进行反序列化. 1.引入maven依赖 <!--反序列化 php--> <dependency&g ...

  4. The difference between QA, QC, and Test Engineering

    Tuesday, March 06, 2007 Posted by Allen Hutchison, Engineering Manager and Jay Han, Software Enginee ...

  5. appium 九宫格解锁招商银行手机客户端app

    之前研究了一段时间的appium for native app 相应的总结如下:                                            appium测试环境搭建 :ht ...

  6. Java 基础高级2 网络编程

    1.协议的概念:通信双方事先约定好的通信规则 2七层网络通信协议:应用成,表示层,会话层,传输层,网络层,数据链路层 3.TCP/IP协议:点对点通信,三层握手,安全有保证 4.UDP协议;广播协议, ...

  7. javascript的一些知识

    一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...

  8. Target runtime com.genuitec.runtime.generic.jee60 is not defined

    转载自:http://jingyan.baidu.com/article/d7130635338e3f13fdf47518.html 用eclipse加载别人的工程,报错Target runtime ...

  9. $.extend()、$.fn和$.fn.extend()

      理解$.extend().$.fn和$.fn.extend()   原文链接:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.ht ...

  10. SSM框架总结(1)

    ----------------------20170106-------------------------------------- 1.mabatis.genertor中自动生成文件,需要在ge ...