Java反射机制总结Word下载.docx
- 文档编号:19187580
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:18.79KB
Java反射机制总结Word下载.docx
《Java反射机制总结Word下载.docx》由会员分享,可在线阅读,更多相关《Java反射机制总结Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
Classc21=Class.forName("
java.lang.String"
Classc22=Class.forName("
ReflectionDemos.MyClass"
Classc23=Class.forName("
OperateFile.CopyFile1"
System.out.println(c21.getSimpleName());
System.out.println(c22.getSimpleName());
System.out.println(c23.getSimpleName());
//3.Classc=String.class;
第三种获取类的方法:
ClassiClass2=int.class;
System.out.println(iClass2.getSimpleName());
//
//4.运用原始包装类中的TYPE方法
//Classc1=Integer.TYPE;
//Classc2=Boolean.TYPE;
//Classc3=Void.TYPE;
//Classc4=Character.TYPE;
第四种获取类的方法:
ClassiClass3=Integer.TYPE;
System.out.println(iClass3.getCanonicalName());
System.out.println(iClass3.getSimpleName());
Output:
Integer
String
MyClass
CopyFile1
int
//显示一个对象的类名
/*
*@method1显示对象的类名
*/
publicstaticvoidprintClassName(Objectobj){
Theclassof"
+obj.getClass().getName());
}
/*
*@testmethod1
*/
ClassTestct=newClassTest();
printClassName(ct);
TheclassofReflectionDemos.ClassTest
获得类的所有属性:
(包括public\private\protected)
/*
*@method2Class<
?
>
Field[]getDeclaredFields()返回Field
*对象的一个数组,这些对象反映此Class对象所表示的类或接口所声明的所有字段。
importjava.lang.reflect.Field;
Field[]fields=Class.forName("
)
.getDeclaredFields();
for(inti=0;
i<
fields.length;
i++){
System.out.println("
属性名:
+fields[i].getName()+"
\t属性类型"
+fields[i].getType());
}
i属性类型int
f属性类型float
s属性类型classjava.lang.String
array属性类型class[Ljava.lang.Object;
//获得类的所有方法
Methodmethods[]=classType.getDeclaredMethods();
methods[0].toString();
//此方法的描述
*@method4Class<
Method[]getDeclaredMethods()返回Method
*对象的一个数组,这些对象反映此Class
*对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Method[]methods=Class.forName("
.getDeclaredMethods();
methods.length;
MyClass类的方法:
+methods[i].getName());
getI
setI
getF
setF
getS
setS
1.Method类的方法:
getModifiers()返回此Method对象所表示方法的Java语言修饰符
getName()以String形式返回此Method对象表示的方法名称
Annotation[][]getParameterAnnotations()
返回表示按照声明顺序对此Method对象所表示方法的形参进行注释的那个数组的数组。
在WebService中也有一种运用Java标注的情况。
Class<
[]getParameterTypes():
按照声明顺序返回Class对象的数组,这些对象描述了此Method对象所表示的方法的形参类型。
Etc:
*@method6Class<
按照声明顺序返回Class对象的数组,这些对象描述了此
*Method对象所表示的方法的形参类型。
下面测试获取方法形参类型:
方法名为:
+method.getName());
//privatestaticvoidsetI(inti,Stringstr)
Class<
[]paramClass=method.getParameterTypes();
paramClass.length;
System.out.println(paramClass[i].getSimpleName());
getReturnType()
返回一个Class对象,该对象描述了此Method对象所表示的方法的正式返回类型。
*@method7Class<
getReturnType()返回一个Class对象,该对象描述了此Method
*对象所表示的方法的正式返回类型。
下面测试方法的返回类型:
returnType=method.getReturnType();
System.out.println(returnType.getSimpleName());
void
Objectinvoke(Objectobj,Object...args)
对带有指定参数的指定对象调用由此Method对象表示的底层方法。
2.方法调用(invoke)及获取指定名称和参数的方法:
A.针对只具有默认构造函数的类:
*运用反射机制调一个类的方法
*/
publicclassInvokeTester{
inti;
Strings;
//publicInvokeTester(inti,Strings){
//this.i=i;
//this.s=s;
//}
publicintadd(intparam1,intparam2){
returnparam1+param2;
publicStringecho(Stringmsg){
return"
echo:
+msg;
publicstaticvoidmain(String[]args)throwsException{
classType=InvokeTester.class;
//获得该类的一个默认对象(实例),与方法ObjectobjectCopy=classType.getConstructor(new
//Class[]{}).newInstance(newObject[]{});
//等效
ObjectinvokeTester=classType.newInstance();
//注意是默认对象,即InvokeTester类只有默认构造函数
//ObjectinvokeTester=classType.getConstructor(newClass[]{int.class,String.class});
//调用InvokeTester对象的add()方法
MethodaddMethod=classType.getMethod("
add"
newClass[]{int.class,
int.class});
//如果第二个参数为newClass[]{}则表示方法无参数
Objectresult=addMethod.invoke(invokeTester,newObject[]{
newInteger(100),newInteger(200)});
System.out.println((Integer)result);
//调用InvokeTester对象的echo()方法
MethodechoMethod=classType.getMethod("
echo"
newClass[]{String.class});
result=echoMethod.invoke(invokeTester,newObject[]{"
Hello"
});
System.out.println((String)result);
}
300
Hello
B.针对具有带参数构造函数的类:
Java允许一个类拥有多个构造方法,并且可以在构造对象时传入参数用来初始化对象。
比如Employee对象的构造方法需要一个String的参数,用来告诉其id。
public
class
Employee{
private
Stringid;
Employee(Stringid){
this.id=id;
在利用反射创建Employee对象时,我们必需为其创建Constructor对象,用来反映此
Class
对象所表示的类或接口的指定构造方法。
//生成class
Classcls=Class.forName(className);
//参数类型
Class[]types=
new
Class[]{String.class
};
//类数值对象
Object[]values=
Object[]{
001"
//找到指定的构造方法
Constructorconstructor=cls.getDeclaredConstructor(types);
//设置安全检查,访问私有构造函数
constructor.setAccessible(true);
//创建对象
Employeee=(Employee)constructor.newInstance(values);
自己的例子:
importjava.lang.reflect.Constructor;
importjava.lang.reflect.Method;
publicInvokeTester(inti,Strings){
this.i=i;
this.s=s;
//ObjectinvokeTester=classType.newInstance();
//构造函数参数类型
Class[]types=newClass[]{int.class,String.class};
//构造函数参数值
Object[]values=newObject[]{12,"
//找到指定的构造方法
Constructorconstructor=classType.getDeclaredConstructor(types);
//设置安全检查,访问私有构造函数
constructor.setAccessible(true);
//创建对象
InvokeTesterinvokeTester=(InvokeTester)constructor.newInstance(values);
3.在生成对象后直接访问属性:
import
java.lang.reflect.Field;
TestField{
Stringtest;
static
void
main(String[]args){
try
{
Classcls=Class.forName("
TestField"
Fieldf=cls.getField("
test"
TestFieldtf=
(TestField)cls.newInstance();
f.set(tf,
System.out.println(tf.test);
}
catch
(Exceptionex){
System.out.println(ex);
4.获取Field值:
a.创建一个Class对象
b.通过getField创建一个Field对象
c.调用Field.getXXX(Object)方法(XXX是Int,Float等,如果是对象就省略;
Object是指实例).
b.Etc.
importjava.lang.reflect.*;
importjava.awt.*;
classSampleGet{
publicstaticvoidmain(String[]args){
Rectangler=newRectangle(100,325);
printHeight(r);
staticvoidprintHeight(Rectangler){
FieldheightField;
IntegerheightValue;
Classc=r.getClass();
try{
heightField=c.getField("
height"
heightValue=(Integer)heightField.get(r);
Height:
+heightValue.toString());
}catch(NoSuchFieldExceptione){
System.out.println(e);
}catch(SecurityExceptione){
}catch(IllegalAccessExceptione){
AdditionalResource:
Tcast(Objectobj)
将一个对象强制转换成此Class对象所表示的类或接口。
Class<
[]getClasses()
返回一个包含某些Class对象的数组,这些对象表示属于此Class对象所表示的类的成员的所有公共类和接口。
booleanisPrimitive()
判定指定的Class对象是否表示一个基本类型。
*@method5Class<
booleanisPrimitive()判定指定的Class对象是否表示一个基本类型。
System.out.println(Integer.class.isPrimitive());
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 反射 机制 总结