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. python smtp 群发邮件

    最近工作中遇到使用脚本处理问题并发送结果邮件,使用python的smtp模块很简单的完成了实现.今天遇到一个问题,根据脚本的测试结果需要群发邮件,但是发送邮件的py文件只有首个地址收到了邮件.仔细排查 ...

  2. PopupWindow 使用

    昨天马失前蹄,为了做一个小键盘,耽误了两个小时,记录一下心路历程 1.关于需求与选择 需求: 点击一个按钮,弹出一个小键盘(类似于输入法键盘) 选择: (1)方案一:KeyboardView 这是百度 ...

  3. php数组array_push()和array_pop()以及array_shift()函数

    <?php /** * array_push()将一个或多个单元压入数组的末尾(入栈) */ $stack = array("Java", "Php", ...

  4. User space 与 Kernel space

    学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间). 简单说,Kernel space 是 Linux 内核的运行空间,User spa ...

  5. 3d转换-正方体-Html5Css3-遁地龙卷风

    (-1) 写在前面 我用的是chrome49,这个案例是从网上看到的,向这位同行致敬,建议大家在记录自己学习感悟时,向我一样加上笔名,被转载的时候还能留下点东西. 在研究slice-box.js的时候 ...

  6. MarkdownPad 2 在win10下出错:HTML 渲染错误(This view has crashed) 的解决办法 + MarkdownPad2.5 注册码

    首先附上MarkdownPad2.5的注册码. 邮箱:Soar360@live.com 授权密钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImD ...

  7. 关于JavaScript初级的知识点一(持续更新 )

    自己刚开始接触JS这是自己一个多月以来的一些总结和回顾. 一.什么是js? js是一种弱类型的脚本语言,是HTML的3大组成部分之一.HTML标签 CSS样式 JS脚本. 二.js的5种基本数据类型 ...

  8. word20161218

    QoS, Quality of Service / 服务质量 QoS Admission Control Service / QoS 许可控制服务 Quality of Service, QoS / ...

  9. 【项目】百度搜索广告CTR预估

    -------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...

  10. Qt 二维码

    1.生成二维码 利用第三方库qrencode ,将qrencode源码添加到自己的程序中,直接调用使用. 参考http://blog.csdn.net/zhangxufei/article/detai ...