java反射基础

反射( java.lang.reflect)  :  java 的灵魂  

 

Class forname(类名)    加载类。


反射是什么?

 

反射做什么?

 

反射与动态多态的关系。

 

Java中的方法代码放到内存的代码段中。

 

类模板对象  class 只有一个

 

实例对象 Student 可以有无数个

 

class类加载的时候 记录类的信息。 Jvm使用,只被加载一次。(所以静态代码块值被加载一次。)

 

反射机制API

在运行时探究和使用编译时未知的类。        可以得到这个类的calss对象。

 

先加载到jvm 获得这个类的类模板对象。

 

反射使用步骤:

1.获得你想操作的类的java.lang.calss对象

2.调用诸如getdeaclaredmethods的方法(属性、构造方法等)

3.使用reflection api来操作这些信息

虚拟机只做到第二步

 

反射中获取对象

1.调用实例对象继承于objectgetclass方法

可以得到所有类和数组的class对象。

没有编译时未知,运行时探究的动态效果。

2.利用语法类型名.的方式获取到class对象

Class dogclass= dogbean.class;可以得到intckass'对象,class只能在jdk1.5cl5以后使用。

 

Class intclass =  integer.tyope;

 

2,利用所有类型()都可以得到相应的class对象

没有编译时未知运行时探究的动态效果

Class利用dog ,获取class对象


3.利用class.forName“**************”)获取class对象  -- 动态加载

特点:

不支持基本数据类型、返回类和数组获取相应class对象

唯一有编译时,运行时探究的动态效果

 

 

探究类的信息

 

1.探究类的基本声明部分。

 xxClass.getPackage.getName();探究包名

XxClass.getName();探究类全名,类的限定名。

Xxclass.getSimpleName();类的简单名

XxClass.getModifiers();得到修饰符---范文修饰符和可选修饰符

Modifier.toString(intmod)//使用工具类把整形的修饰符装换成字符串的表示

XxClass.getSuperclass();//得到当前类的父类

XxClass.getInterfaces();//返回一个数组,得到接口

 

2.探究所有属性:--Field

XxClass.getFields();//得到所有的公共属性,包括从父类继承来的公共属性;--返回一个数组;

Allfields = XxClass.getDeclaredFields()’;//得到类中所有申明的属性(不包括来自父类的属性);

Xxclass.getField(“name”);//得到指定的公共属性,包括父类继承而来的。

Xxclass.getdeclaredField(“age”);?/得到指定的申明属性,不包括父类继承而来的。

 

Allfields.getname();属性名

Allfields.gettype().getsimplename();--属性类型

Modifier.tosteing(Allfields.getModifiers)

 

 

构造--constructor

属性--Filed

方法--Method

 

 

探究构造--constructor

 

构造方法全名就是类全名

Xxclass.getConstrictors();、、得到所有公共的构造方法;

Xxclass.Getdeclaredconstructs// 得到所有申明的构造

xxclass.getConstructor();得到指定的公共构造

xxclass.getConstructors();得到指定申明的构造

 

 

 

Modifier.tosString(con.getModifiers);、、构造方法修饰符

Con.getName();//构造方法名

cLass[] xxx = con.getParameterTyoes()//得到形参列表

Class[] xxx = con.getExceptioTypes()、、//的到异常类型

 

探究方法--Method

 

Method[] allpm = xxClass.getMethods();

Method[] allpm = xxClass.getDeclaredMethods();

 

 

3.使用探究到的类的信息

1.使用法术创建对象-- java中第三章创建对象的方法

 根据探究到的constructor对象,产生类的实例对象

好处可以调用类中的任意构造方法,

但是实现过于麻烦。

 

xx.setAccessible(true)//设置某个对象的访问权限为可访--不到万不得已不能用;

 

2.直接利用class对象产生实例对象l

好处:代码非常的简洁。

坏处:只能调用公共无参构造

DogBean dog  = null

dog = (DogBean)dogclasss.newInstance();

 

3.操作属性

Field thePublicFiled = dogClass.getFeild(“name”);//公共属性

Field thePublicFiled = dogClass.getFDclaredeild(“name”)

ThePublicFiled.set.(dog1,”xiaobai”;第一个参个哪个对象的那么属性赋值,第二个参赋值的内容;

ThePublicFiled.get(“dog1”);得到某个对象的值

 

 

 

 4.调用探究到的方法--invoke

Method thepublicf =

 

 

test1,2,346);

Public void testint... Array{

 

}

当数组做形参的时候用该语法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值