反射

反射:

            JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
 
           要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

 

package wqeqwdad;

public class FanShe {
public static void main(String[] args)throws Exception {
 //获取字节码文件的三种方式
 //方式一
 Xue x=new Xue();
 Class c1 = x.getClass();
 //方式二
 Class c2=Xue.class;
 //方式三
 Class c3=Class.forName("wqeqwdad.Xue");
}
}
class Xue{
 private String name;
 int age;
 public Xue() {}
 public Xue(String name, int age) {
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
}

 

l获取构造方法
getConstructors
getDeclaredConstructors

 

public class FanShe {
public static void main(String[] args)throws Exception {
 Class c=Class.forName("wqeqwdad.Xue");
 //获取构造方法
 //Constructor[] c1 = c.getConstructors(); //获取所有的构造方法(不包括私有的)
 Constructor [] con=c.getDeclaredConstructors();//获取所有的构造方法,包括私有的
 //遍历
 for(Constructor con1:con){
  System.out.println(con1);
 }
 //获取单个的构造方法
 Constructor c1 = c.getConstructor(String.class,int.class);
 Object obj= c1.newInstance("小明",22);
 System.out.println(obj);
}
}
class Xue{
 private String name;
 int age;
 public Xue() {}
 public Xue(String name, int age) {
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String toString(){
  return name+"--"+age;
 }
}

 

 

获取所有成员
getFields,getDeclaredFields
获取单个成员
getField,getDeclaredField
修改成员的值
set(Object obj,Object value)

 

public class FanShe {
public static void main(String[] args)throws Exception {
 Class c=Class.forName("wqeqwdad.Xue");
 //获取成员变量 (所有的包括私有的)
 Field[] f = c.getDeclaredFields();
 //遍历
 for(Field f1:f){
  System.out.println(f1);
 }
 //无参构造创建对象
 Constructor con = c.getConstructor();
 Object obj=con.newInstance();
 //获取单个成员变量
 Field ff = c.getDeclaredField("name");
 //java 不检查
 ff.setAccessible(true);
 ff.set(obj, "小白");
 System.out.println(obj);
}
}
class Xue{
 private String name;
 int age;
 public Xue() {}
 
 public Xue(String name) {
  this.name = name;
 }
 public Xue(String name, int age) {
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String toString(){
  return name+"--"+age;
 }
}

 

 

获取所有方法
getMethods
getDeclaredMethods

public class FanShe {
public static void main(String[] args)throws Exception {
 Class c=Class.forName("wqeqwdad.Xue");
 //获取方法 (所有的包括私有的)
 Method[] m = c.getDeclaredMethods();
 for(Method m1:m){
  System.out.println(m1);
 }
}
}
class Xue{
 private String name;
 int age;
 public Xue() {}
 
 public Xue(String name) {
  this.name = name;
 }
 public Xue(String name, int age) {
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String toString(){
  return name+"--"+age;
 }
 public void kk(){
  
 }
 public void uu(){
  
 }
}

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值