java反射机制

Java反射机制    https://www.cnblogs.com/Eason-S/p/5851078.html

Class 这是一个类 他可以去得到其他类的引用,也就相当于得到其他类

三种方式获得类

Employee e = new Employee();

 

Class c1  =  Class.forName(“Employee”);

Class c2 = Employee.Class;

Class c3 = e.getClass();

 

这三种方式都可以得到运行时的Employee类的引用(在堆中只有一个Employee,所以c1,c2,c3指向同一个引用地址)

 

利用反射机制的工厂模式

 

可变长参数

Class Student {

Public void add (int... a){

//这里可以把a当做数组用,去循环获取他的值

//可变长参数等同于数组,也就是说当我们调用的时候也可以传一个数组过去

a={1,2,3,4,5}

Add(a)  

}

Public void add(int a){

//当有确定参数参数的同名函数时,会优先调用确定的参数

}

Public void add(int a,int...b){

//当出现可变参合确定参时,确定参时必须放在前面,可变参数在最后面

}

Public void add(int... a,int... b) //这种情况不允许出现,不能出现多个可变参

}

 

properties加载文件中的key value类型数据(对于属性文件是有要求的,必须按照要求写)

 

当然应该想把办法将文件中的key value 放在map或者set数据类型中。

 

 

反射机制中 怎么通过一个字符串去创建一个类对象

 

****通过反射机制获取类中的属性

//首先获取那个类。

Class c = Class.forName(“User”);

Field[] field = c.getFields();  // 这是获取那个public属性

Field[] field = c.getDeclaredFields(); //这是获取全部的属性方法。

Field field = c.getDeclaredField(String name) //里面传入一个属性名,然后或获取这个属性的应用 Field

 

 

 

//获取属性的类型和属性名

Class type = field.getType()  //

Type.getSimpleName();   // 返回的是属性的数据类型  String int float之类的

Filed.getName() // 得到属性名

 

//获取属性前的修饰符  public private protected

Int i = Field.getmodifier();  //返回的是一个int类型的数据

String modify = Modifier.toString(i); // 返回修饰符 但是当里面有对个修饰符也可以返回,比如 里面有 public static

 

反射机制打破了封装性,导致不安全。***************重点***********

因为反射机制里面有一个方法可以打破封装然后可以去访问私有的属性

获取属性名为id的属性, idf.setAccessible(true);这就打破封装,然后就可以去对idf进行set和get方法的调用。  idf.set(o,”123”);  idf.get(o);

 

................通过反射获取类中的方法Method

Method[] ms = c.getDeclareMethods();  //获取这个方法对象,然后这些有关于方法的属性都在里面

 

 

Class returnType = m.getReturnType(); // 返回类型是一个对象 获取返回类型

returnType.getSimpleName()  //返回 返回类型 字符串

Modifier.toString(m.getModifiers()); //返回方法的修饰符

Class[] parameterType = m.getParameterTypes();  //获取参数列表 是一个对象

parameterType.getSimpleName(); //获取参列表的数据类型

 

 

 

 

通过反射调用里面的方法。

 

通过反射获取构造方法:

//获取无参构造方法的时候

Class c = Class.forName(“User”);

Object o = c.newInstance();

//获取有参构造方法需要传入参数,需要用一个类 Constructor

Constructor con = c.getDeclaredConstructor(“String.class”,”int.class”);

Object o = con.newInstance();

 

通过反射获取父类和父接口.

Class c = Class.forName(“User”);

Class superClass = c.getSuperClass();  //这是获取父类

superClass.getName(); //

 

Class[] superInters = c.getInterfaces()  //获取父接口

superInters.getName();      //

 

 

反射机制的缺点:

反射机制打破了封装性,因为可以访问private里面的属性

反射机制的性能底,远不及直接去创建对象来的快。

反射机制会模糊程序内部的逻辑,对于程序的维护上是一个问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值