日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

談?wù)凧ava反射機(jī)制

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

前言:

JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意方法和屬性;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為java語(yǔ)言的反射機(jī)制。

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("測(cè)試反射!");

  14.    }

  15. }

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

一、獲取class對(duì)象

 獲取class對(duì)象有三種方式,如下: 

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();

注:這種方法是已有該類的對(duì)象時(shí)使用,即已有stu對(duì)象。

二、獲取類的信息

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

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. //拿單個(gè)方法(study方法有參數(shù)的話還得寫上參數(shù)類型,

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

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

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

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

  6.        for(Method m : ms) {

  7.            //獲取類的方法名

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

  9.        }

三、動(dòng)態(tài)創(chuàng)建對(duì)象,調(diào)用方法 

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

  1. Object obj = clazz.newInstance();

  2. System.out.println(obj);

注意:這種方式創(chuàng)建對(duì)象因?yàn)闆]傳參數(shù),所以Student類必須要有一個(gè)無(wú)參構(gòu)造。

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

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

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

  3. System.out.println(obj2);

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

2、調(diào)用方法: 有了對(duì)象就可以調(diào)該類的方法,如下:

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

  2. m.invoke(obj);

控制臺(tái)輸出輸出"測(cè)試反射",正是study方法里打印的那句話。

總結(jié):

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

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多