反射的应用、获取Class类实例
来源:互联网 发布:triz 矛盾矩阵 编辑:程序博客网 时间:2024/05/21 00:14
*准备工作:
包结构:*
=======================
Person.java代码:
package com.atguigu.java;public class Person { String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } public void show(){ System.out.println("我是一个show方法"); }}
=======================
反射的引用:
package com.atguigu.java;import java.lang.reflect.Field;import java.lang.reflect.Method;import org.junit.Test;/* * 反射的应用 * */public class ReflectionTest { /* * 在反射之前,如何实例化Person类,并调用其内部结构 */ @Test public void test1(){ //1.创建Person类的对象 Person p1 = new Person(); System.out.println(p1); //2.调用指定的属性 p1.name = "Tom"; //3.调用指定的方法 p1.setAge(12); p1.show(); System.out.println(p1); } /* * 反射的应用,完成与test1同样的操作 * */ @Test public void test2() throws Exception{ Class clazz = Person.class;// PrintStream ps = System.out; //1.创建Person类的对象 Person p = (Person)clazz.newInstance(); System.out.println(p); //2.调用指定的属性 //Field field1 = clazz.getField("name");会报错 Field field1 = clazz.getDeclaredField("name"); //设置指定的p对象的field1属性的值 //f.set(Object obj,Object fieldValue):将obj对象的f属性设置为fieldValue field1.set(p, "Tom"); System.out.println(p); //f.get(Object obj):获取指定的obj对象的f属性值 System.out.println(field1.get(p)); //3.调用指定的方法 Method m1 = clazz.getDeclaredMethod("setAge",int.class); //m.invoke(Object obj,Object ... paramValues):调用obj对象指定的m方法,将参数值设置为Object ... paramValues m1.invoke(p, 20); System.out.println(p); }}
===================================
获取Class类的实例的几种方式:
/* * java.lang.Class类的理解 * 1.java反射机制的源头 * 2.java程序经过编译(javac.exe)以后,生成一个或多个字节码文件(.class)文件,接着通过 * java.exe命令将.class文件通过JVM的类的加载器加载到内存(缓存)中,一个字节码文件,就对应着一个 * 运行时类。 * 3.此时内存中的运行时类即为Class的一个实例。也就是说:一个Class实例就对应一个java运行时类 * 4.内存中的运行时类,是存放在内存的缓存区,当再次被调用时,不会重新加载。 * * 如何获取java.lang.Class类的实例(掌握) * */ @Test public void test1() throws ClassNotFoundException{ Person p = new Person();//1.将Person类加载到内存中 2.调用其空参的构造器 Person p1 = new Person();//不会重新加载Person类,因为其已经存在于内存中 //方式一:直接调用运行时类的.class属性获取 Class clazz1 = Person.class; System.out.println(clazz1); //方式二:调用Class类的静态方法:forName(String className) --后续使用的较多 String className = "com.atguigu.java.Person"; Class clazz2 = Class.forName(className); System.out.println(clazz2); //方法三:调用运行时类对象的getClass() Class clazz3 = p.getClass(); System.out.println(clazz3); System.out.println(clazz1 == clazz2 && clazz1 == clazz3);//true //方式四:使用类的加载器ClassLoader (了解) Class clazz4 = this.getClass().getClassLoader().loadClass("com.atguigu.java.Person"); System.out.println(clazz4); System.out.println(clazz4 == clazz1); }
阅读全文
0 0
- 反射的应用、获取Class类实例
- 反射应用中获取Class实例的四种方式
- ParameterizedType应用,java反射,获取参数化类型的class实例
- ParameterizedType应用,利用java反射获取参数化类型的class实例
- 反射:Class类Class实例
- 反射获取class有几种方式,怎样得到对应的实例
- JAVA反射机制-class类的获取
- 反射:Class类、反射概念、类中各成员的反射、反射的应用、数组的反射、框架
- (104)反射:获取Class的对象、构造函数、字段、方法。反射实例练习
- 通过反射获取java类的实例
- 实例化反射类class的集中方法
- 类成员的反射,暴力反射,应用实例
- java反射(二):获取Class类的四种方式
- 反射---获取Class类的4种方式
- Class对象使用实例,反射的基本原理
- 反射机制的应用实例
- 反射:Class获取的三种方式
- ReflectHelper 反射(Method,Class的应用一)
- mongodb linux安装 图解(1)
- C++11之左值、纯右值和将亡值
- Cocos2d从入门到睡觉:学习(一)
- Linux内核链表listnode
- 51Nod-1023-石子归并 V3
- 反射的应用、获取Class类实例
- DataServices常见问题处理
- FTPrep, 51 N-Queens
- [Hexo] Hexo更换主题
- 深度学习概论:为什么深度学习会兴起?
- SHiro学习笔记
- [html] div标签
- 51Nod 1081 子段求和(数组/树状数组)
- 51Nod-2006 飞行员配对(二分图最大匹配,匈牙利算法)