第一种:通过forName()方法;
第二种:类class;
第三种:对象getClass()。
举例如下:
package
test;
public class Demo{
public static void
main(){
Class<> c1 = null;
Class<> c2 =
null;
Class<> c3 =
null;
//三种反射用实例化方式
try{
//最常用的一种形式
c1 =
ClassforName("testX");
}catch(ClassNotFoundException
e){
eprintStackTrace();
}
//通过Object类中的方法实例化
c2
= new X()getClass();
//通过类class实例化
c3 =
Xclass;
Systemoutprintln("类名:" + c1getName());
//得到类名
Systemoutprintln("类名:" + c2getName());
//得到类名
Systemoutprintln("类名:" + c3getName());
//得到类名
}
}
使用getClass方法可以获取一个对象的类型类,然后在调用该类的方法可以获取该类的相关信息,比如父类的名字,该类的名字等等:
package test;import javalangreflectField;
import javalangreflectMethod;
public class Demo2 {
String username = "sss";
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException {
Demo2 t = new Demo2();
if (Demo2class == tgetClass()) {
Systemoutprintln("equal");
}
// 获取类名
Systemoutprintln(tgetClass()getName());
// 获取父类名
Systemoutprintln(tgetClass()getSuperclass());
//获取类中某个属性
Field f = tgetClass()getField("username");
//获取类中某个方法
Method m = tgetClass()getDeclaredMethod("main", String[]class);
}
}
JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。
Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。
扩展资料:
JAVA中反射实例:
1、Class superClass=clazzgetSuperclass();//获取父类。
Systemoutprintln("getSuperclass:"+superClass)。
2、Class[] interfaces=clazzgetInterfaces();//获取实现接口。
Systemoutprintln("getInterfaces:"+interfaceslength)。
3、Constructor[] cons=clazzgetConstructors();//构造方法。
Systemoutprintln("getConstructors:"+conslength)。
参考资料来源:百度百科: JAVA反射机制
1什么是反射
反射就是在运行状态把 Java 类中的各种成分映射成相应相应的 Java 类,可以动态得获取所有的属性以及动态调用任意一个方法。
1)一段java代码在程序的运行期间会经历三个阶段:source-->class-->runtime
2)Class对象在java中用一个Class对象来表示一个java类的class阶Class对象封装了一个java类定义的成员变量、成员方法、构造方法、包名、类名等。
2反射怎么用
1)获得java类的各个组成部分,首先需要获得代表java类的Class对象 获得Class对象有以下三种方式:
Classforname(className) 用于做类加载
objgetClass() 用于获得对象的类型
类名class 用于获得指定的类型,传参用
2)反射类的构造方法,获得实例
Class clazz = 类名class;
Constuctor con = clazzgetConstructor(new Class[]{paramClazz1,paramClazz2,});
connewInstance(params);
内省
什么是内省
通过反射的方式 *** 作JavaBean的属性,jdk提供了PropertyDescription类来 *** 作访问JavaBean的属性,Beantils工具基于此来实现。
2内省怎么用
1) *** 作一个属性
Object obj = new Object();
PropertyDescriptor pd = new PropertyDescriptor(propertyName,Class);
声明属性描述对象,一次只可描述一个属性
Method m = pdgetWriterMethod();//获取setter方法
minvoke(obj,value);
Method m = pdgetReaderMethod();//获取getter方法
Object value = minvoke(obj);
反射机制并没有什么神奇之处。反射与RTTI的本质区别只是检查一个类的class文件的时机不同:
反射:class 文件是在编译时不可获得的,所以在运行时打开和检查未知类的class文件从而变已知。
RTTI: class 文件是在编译时打开和检查。
以上就是关于java中反射的三种方法是全部的内容,包括:java中反射的三种方法是、java 获取对象的数据类型的方法、JAVA中反射是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)