java.lang.Class<T> -- 反射机制

java

1反射机制是什么

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2反射机制能做什么

反射机制主要提供了以下功能: 

  • 在运行时判断任意一个对象所属的类;

  • 在运行时构造任意一个类的对象;

  • 在运行时判断任意一个类所具有的成员变量和方法;

  • 在运行时调用任意一个对象的方法;

  • 生成动态代理。

3反射机制的相关API

通过一个对象获得完整的包名和类名

package edu.pri.lime.test;

public class TestReflect {

public static void main(String[] args){

TestReflect reflect = new TestReflect();

// 通过一个对象获得完整的包名和类名

System.out.println(reflect.getClass().getName());

}

}

实例化Class类对象

package edu.pri.lime.test;

public class TestReflect {

public static void main(String[] args) throws ClassNotFoundException{

Class<?> clazzA = Class.forName("edu.pri.lime.test.TestReflect");

Class<?> clazzB = new TestReflect().getClass();

Class<?> clazzC = TestReflect.class;

System.out.println(clazzA.getName());

System.out.println(clazzB.getName());

System.out.println(clazzC.getName());

}

}

获取一个对象的父类与实现的接口

package edu.pri.lime.test;

import java.io.Serializable;

public class TestReflect implements Serializable{

private static final long serialVersionUID = -3407476067923921222L;

public static void main(String[] args) throws ClassNotFoundException{

Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");

// 获取父类

Class<?> clazzSup = clazz.getSuperclass();

System.out.println(clazzSup.getName());

// 获取所有接口

Class<?> clazzInte[] = clazz.getInterfaces();

for(Class<?> in : clazzInte){

System.out.println(in.getName());

}

}

}

获取某个类中的全部构造函数

package edu.pri.lime.test;

import java.io.Serializable;

import java.lang.reflect.Constructor;

import java.lang.reflect.Modifier;

public class TestReflect implements Serializable{

private static final long serialVersionUID = -3407476067923921222L;

private int id;

private String name;

public TestReflect() {

super();

// TODO Auto-generated constructor stub

}

public TestReflect(int id) {

super();

this.id = id;

}

public TestReflect(String name) {

super();

this.name = name;

}

public TestReflect(int id, String name) {

super();

this.id = id;

this.name = name;

}

public static void main(String[] args) throws ClassNotFoundException{

Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");

// 获取所有构造函数

Constructor<?>[] constructors = clazz.getConstructors();

for(Constructor<?> con : constructors){

// 获取构造函数所有参数类型

Class<?>[] paramTypes = con.getParameterTypes();

System.out.print(Modifier.toString(con.getModifiers()) + " ");

System.out.print(con.getName() + "(");

for(int i = 0;i < paramTypes.length;i++){

if(i < paramTypes.length - 1){

System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1) + ",");

}else{

System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1));

}

}

System.out.println(");");

}

}

}

通过反射机制实例化一个类的对象

以上是 java.lang.Class<T> -- 反射机制 的全部内容, 来源链接: utcz.com/z/394064.html

回到顶部