java反射机制
来源:互联网 发布:视频混合软件 编辑:程序博客网 时间:2024/05/19 16:22
JAVA反射机制
在java中使用反射,任何类在你眼里都是裸奔
文章包含内容:
1、反射机制是什么?
2、反射机制的优缺点
3、反射机制得到类的方式
4、反射机制初始化对象
5、Class类的方法举例
6、反射机制示例
一、反射机制是什么?
Java中反射机制是程序在运行过程中,对于任意的类都能得到该类的所有属性和方法;对于任意一个对象,都能调用该类的任意的方法和属性。这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。
二、反射机制的优缺点
优点:增加了程序的灵活性
缺点:影响性能,破坏了oop中的封装
三、反射机制得到类的方式
(1)Class cl1 = Class.forName(“类的路径”);//通过Class的forName()方法得到类
(2)Class cl2 = 类名.class;//通过类的class属性得到类
(3)Class cl3 = 对象名.getClass();//通过对象的getClass方法得到类
四、反射机制初始化对象
对象名.newInstance();//执行类的无参构造
五、Class类的方法举例
(1)getPackage();//获得包名
(2)getName();//获得类名
(3)getDeclaredField(“属性名”);//获得特定属性
(4)getDeclaredFields();//过得所有的属性
(5)getDeclaredConstructors();//获得所有构造
(6)getDeclaredConstructors(参数类型.Class);//获得特定构造方法
(7)getDeclaredMethod(“方法名”);//获得特定的无参方法
(8)getDeclaredMethod(“方法名”,参数类型.Class);//获得特定的带参数方法
(9)getDeclaredMethods();//获得所有的方法
(10)getReturnType();//获得方法的返回值类型
(11)getParameterTypes();//获得方法的参数类型
(12)getSuperclass();//获得父类
(13)getInterface();//获得该类实现的接口
(14)getSimpleName();//获得源码中底层类的简称
六、反射机制实例
(1)实体类
package cn.gson.test;
public class Person {
private String name;//name属性
private int age;//age属性
//无参构造
public Person() {
super();
}
//有参构造
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
//setter/getter方法
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;
}
//无参方法
public void hello(){
System.out.println("hello world!");
}
//带参方法
public void hello(String name){
System.out.println(name+"hello world!");
}
}
(2)测试类
package cn.gson.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception {
//可以通过三种方式获得类
//第一种
//Test person = new Person();
//Class class1 = person.getClass();
//第二种
//Class class3 = Class.forName("cn.gson.test.Person");
//第三种
Class<Person> class2 = Person.class;
Person person = (Person) class2.newInstance();//实例化类
//1.获得类所在包
Package packageName =class2.getPackage();
System.out.println("包:"+packageName);
//2.获得类
String className = class2.getName();
System.out.println("类:"+className);
//3.获得特定属性
Field nameField =class2.getDeclaredField("name");
nameField.setAccessible(true);//设置可以操作私有的属性或方法
nameField.set(person, "学的是梦想啊");//设置属性
System.out.println("属性:"+nameField.get(person));
//4.获得所有属性
Field[] fields = class2.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
System.out.println("所有属性:"+field);
}
//5.获得所有构造方法
Constructor<?>[] constructors = class2.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println("所有构造方法:"+constructor);
}
//6.获得特定的构造方法
Constructor<Person> constructor = class2.getDeclaredConstructor(String.class,int.class);//参数类型
System.out.println("构造方法:"+constructor);
//7.获得特定的无参成员方法
Method methods = class2.getDeclaredMethod("hello");
methods.setAccessible(true);
methods.invoke(person);//执行方法
//8.执行特定的带参数成员方法
Method methods1 = class2.getDeclaredMethod("hello",String.class);
methods1.setAccessible(true);
methods1.invoke(person,"梦想");
//9.获得所有的方法
Method[] methods11= class2.getDeclaredMethods();
for (Method method : methods11) {
System.out.println("所有成员方法:"+method);
}
//10.方法的返回值类型
Class returnType = methods1.getReturnType();
System.out.println("方法的返回值类型:"+returnType);
//11.方法的参数类型
Class parameterType[] = methods1.getParameterTypes();
for (Class class1 : parameterType) {
System.out.println("方法的参数类型:"+class1);
}
}
}
(3)测试结果
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- java 中 native 关键字用法
- rocketmq学习笔记 五 源码之rocketmq-broker
- 二进制中1的个数
- 最大熵
- css图片切割
- java反射机制
- 正则表达式
- 查看jdk Sun /Open Jdk 源码包说明
- 安卓内容提供者
- ubuntu下使用Vim学习C++
- 锋利的jquery初体验--第二章 品牌列表效果
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- log4j初级配置教程
- 在Mac OS X上开启ssh服务