zoukankan      html  css  js  c++  java
  • Java反射机制涉及的类常见方法使用总结

      1 import java.lang.reflect.Constructor;
      2 import java.lang.reflect.*;
      3 
      4 /*Class:代表一个字节码文件的对象,每当有类被加载进内存,JVM就会在堆上给
      5  *        该类创建一个代表该类的对象。每个类的Class对象是的。
      6  *Class类没有构造方法,获得类对应的Class方法有3种
      7  *1.:getClass()、2.类、接口.class 、3.Class.forName("类全名");
      8  *比较推荐使用第3种方式,使用前两种方式程序扩展性不好。
      9  *
     10  *Class类中定义了许多关于获取类中信息的方法:
     11  *1.获得该类的构造方法,属性,方法、实例的方法。包含特定情况的获得
     12  *2.获得该类的父类,实现的接口,该类的类加载器,类名、包名等。
     13  *3.判断该类的具体是接口、类、内部类等
     14  *4.方法中加Declared表示可以获得本类定义的任何方法和属性
     15  *
     16  *注意:关于获得到的方法、属性、构造器的具体操作被封装在import java.lang.reflect包里面
     17  *Method:里面最常用的方法invoke(对象,可变参数列表)--调用指定的方法
     18  *Field:get/set;获取和修改属性值
     19  *Constrcutor:使用newInstance(可变参数列表)--调用指定构造方法创建类的实例
     20  *注意:私有的要调用前先去掉访问权限限制setAccssible()
     21  * */
     22 public class ReflectionWithClass {
     23 
     24     public static void main(String[] args) throws Exception {
     25         
     26         //第一种方式获得Class对象,比较麻烦,要先创建对象,再使用对象调用方法
     27         HelloKitty ht = new HelloKitty();
     28         Class clazz = ht.getClass();
     29         
     30         //第二种方式获得Class对象。使用静态的属性创建
     31         Class clazz1 = HelloKitty.class;
     32         
     33         //使用Class对象的静态方法获得Class对象
     34         Class clazz2 = Class.forName("HelloKitty");
     35         
     36         //获得该类的类加载器
     37         ClassLoader c = clazz2.getClassLoader();
     38         System.out.println(c.toString());
     39 
     40         Class clazz3 = String.class;
     41         System.out.println(clazz3.getClassLoader());
     42         
     43         //获得该类的实例
     44         Object obj = clazz2.newInstance();
     45         //获得该类的构造器---公开的,getDeclaredConstructors()--可以获得私有的
     46         Constructor[] con = clazz2.getDeclaredConstructors();
     47         for(Constructor cc:con){
     48             System.out.print(cc + " ");
     49         }
     50         
     51         //获得类的方法
     52         Method[] mm = clazz2.getDeclaredMethods();
     53         for(Method mmm:mm){
     54             System.out.print(mmm + " ");
     55         }
     56         
     57         System.out.println();
     58         //获取特定的方法
     59         Method m = clazz2.getMethod("walk",null);
     60         System.out.println(m.toString());
     61         
     62         Field[] f = clazz2.getDeclaredFields();
     63         for(Field ff:f){
     64             System.out.print(ff+ " ");
     65         }
     66         
     67         //调用指定的方法---先获取,在调用;注意私有方法先设置访问权限
     68         Method m1 = clazz2.getMethod("walk", null);
     69         System.out.println("hahahhha");
     70         m1.invoke(obj,null);
     71         
     72         //调用指定的构造方法创建类实例;先获取在调用
     73         Constructor cc = clazz2.getConstructor(int.class,String.class);
     74         Object o1 = cc.newInstance(12,"blue");
     75         
     76         //获取和修改对象的属性值
     77         Field ffs = clazz2.getDeclaredField("age");
     78         ffs.setAccessible(true);
     79         ffs.set(obj, 29);
     80         Object oo = ffs.get(obj);
     81         System.out.println(oo);
     82         
     83     }
     84 
     85 }
     86 
     87 class HelloKitty {
     88     private int age;
     89     public String color = "pink";
     90     public HelloKitty() {}
     91     
     92     
     93     public HelloKitty(int age) {
     94         this.age = age;
     95     }
     96     
     97     public HelloKitty(int age,String color) {
     98         this.age = age;
     99         this.color = color;
    100         System.out.println("okokok");
    101     }
    102 
    103     public void walk(){
    104         System.out.println("hhhhhhhhhhhhh");
    105     }
    106     
    107     public void talk(int i){
    108         System.out.println(i + "----------" + age);
    109     }
    110 }
  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/sun1993/p/7828535.html
Copyright © 2011-2022 走看看