乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      談談Java反射機制

       貪挽懶月 2022-06-20 發(fā)布于廣東

      前言:

      JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態(tài)獲取信息以及動態(tài)調用對象方法的功能稱為java語言的反射機制。

      Java反射的使用:

      有如下student類:

      1. public class Student {

      2.    private int age;

      3.    private String name;

      4.        public Student() {

      5.         super();

      6.    }

      7.    public Student(int age, String name) {

      8.        super();

      9.        this.age = age;

      10.        this.name = name;

      11.    }

      12.    public void study() {

      13.        System.out.println("測試反射!");

      14.    }

      15. }

      現(xiàn)在通過反射來獲取student類的信息: 

      一、獲取class對象

       獲取class對象有三種方式,如下: 

      1、方式一:

      1. Class clazz =Class.forName("com.demos.reflect.Student");

      注意:forName里面的參數(shù)是Student的全類名。

      2、方式二:

      1. Class clazz = Student.class;

      3、方式三:

      1. Class clazz = stu.getClass();

      注:這種方法是已有該類的對象時使用,即已有stu對象。

      二、獲取類的信息

      得到了Class對象后,就可以通過Class對象獲取類的信息,部分方法如下: 

      1、獲取屬性:

      1. Field[] fs = clazz.getDeclaredFields();//獲取所有屬性

      2.        for(Field f : fs) {

      3.            //獲取屬性名

      4.            System.out.println(f.getName());

      5.            //獲取屬性的數(shù)據(jù)類型

      6.            Class pp = f.getType();

      7.            System.out.println(pp.getName());//類型帶包名

      8.            //System.out.println(pp.getSimpleName());//不帶包名

      9.        }

      2、獲取類的方法:

      1. //拿單個方法(study方法有參數(shù)的話還得寫上參數(shù)類型,

      2.        //例如:clazz.getMethod("study",String.Class))

      3.        //Method m = clazz.getMethod("study");//獲取單個方法

      4.        //Method[] ms = clazz.getMethods();//包括父類方法

      5.        Method[] ms = clazz.getDeclaredMethods();//不包括父類方法

      6.        for(Method m : ms) {

      7.            //獲取類的方法名

      8.            System.out.println(m.getName());

      9.        }

      三、動態(tài)創(chuàng)建對象,調用方法 

      1.1、創(chuàng)建對象方式一:

      1. Object obj = clazz.newInstance();

      2. System.out.println(obj);

      注意:這種方式創(chuàng)建對象因為沒傳參數(shù),所以Student類必須要有一個無參構造。

      1.2、創(chuàng)建對象方式二:

      1. Constructor cos = clazz.getConstructor(int.class,String.class);

      2.    Object obj2 = (Student)cos.newInstance(20,"張三");

      3. System.out.println(obj2);

      注意:這種方式帶參創(chuàng)建對象,需要有帶參構造。

      2、調用方法: 有了對象就可以調該類的方法,如下:

      1. Method m = clazz.getMethod("study");

      2. m.invoke(obj);

      控制臺輸出輸出"測試反射",正是study方法里打印的那句話。

      總結:

      Java的反射機制應用非常廣泛,像spring、hibernate等框架底層都用到了反射,理解反射機制,可以幫助我們更好的理解這些框架的原理。

        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多