java反射

有這麼一種情景:

那麼,反射是什麼呢?

java類反射:

java字段反射:

java方法反射:

java構造函數反射:

java反射對象創建:

https://www.w3cschool.cn/java/java-create-objects.html

java反射字段訪問:

java數組反射:

https://www.w3cschool.cn/java/java-array-reflection.html

 

反射實例:

package com.zhouyajuan;

import com.zhouyajuan.entity.Customer;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class testReflect {

    public static void main(String[] args) {
        try {
            Class customerClass=Class.forName("com.zhouyajuan.entity.Customer");
            //正常情況下,使用反射並不知道反射的具體對象是什麼,所以用Object接收
            Object customer=  customerClass.newInstance();
            System.out.println(customer.toString());

            if(customer instanceof  Customer){
                System.out.println("是customer對象");
            }

            //Field[] fields=customerClass.getFields();
            Field fi=customerClass.getDeclaredField("name");

            fi.setAccessible(true);
            System.out.println(fi.toString()+"???????????????");

            //獲取所有聲明瞭的字段
            Field[] fields=customerClass.getDeclaredFields();
            for(Field field:fields){
                System.out.println(field.toString()+"==========================");
            }


            //獲取非私有字段
            Field[] fieldsnotprivate=customerClass.getFields();
            for(Field field:fieldsnotprivate){
                System.out.println(field.toString()+"==========================");
            }


            //通過getMethods()可以獲取該對象的所有方法
            Method[] methods=customerClass.getMethods();
            for(Method method:methods){
                System.out.println("========"+method.toString());
            }

            //通過反射方法給對象賦值
            Method getNamemethod=customerClass.getDeclaredMethod("setName",String.class);
            getNamemethod.invoke(customer,"zhouyajuan");
            //System.out.println(customer.getName());
            System.out.println(customer.toString());



            //通過反射調方法
            Method getoutput=customerClass.getDeclaredMethod("getOutput");
            //用result接收getOutput方法的返回值
            String result= (String) getoutput.invoke(customer);
            System.out.println(result);


            //反射應用
            //1.有全類名
            //2.有方法名
            //3.有參數
                    //參數:要是傳同類型的參數,參數位置,對應問題
                    //‘name=’+name+‘,age’+age
                    //方法一般不帶參,但是name,age爲屬性,
            // 把要傳遞的參數定義成屬性,然後設置對應的set,get方法
            //


//前端調後臺,想自己封裝一個方法,前端可以直接調該方法訪問後臺數據,然後獲取數據
//ajax 調 url(servlet) 然後 servlet 通過反射 創建對應想創建的對象,執行對應方法,返回對應值










            //

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }
}

啦啦啦啦~~~~反射筆記完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章