日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

121 项目 023 笔记向 反射

發(fā)布時間:2025/5/22 编程问答 88 豆豆
生活随笔 收集整理的這篇文章主要介紹了 121 项目 023 笔记向 反射 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

反射

Class對象

Class 類是一切反射的根源

得到Class類的對象有一種方式:

  • Object.getClass()
  • 類.class
  • Class.forName()
  • package com.laolang.se.fanshe;import com.laolang.se.fanshe.domain.User;public class Main {public static void main(String[] args) throws ClassNotFoundException {User laolang = new User(1001L,"laolang",23);User xiaodaima = new User(1001L,"laolang",23);Class laolangClazz = laolang.getClass();Class xiaodaimaClazz = xiaodaima.getClass();System.out.println(laolangClazz == xiaodaimaClazz );Class userClazz = User.class;System.out.println(userClazz == laolangClazz );Class userForName = Class.forName("com.laolang.se.fanshe.domain.User");System.out.println(userClazz == userForName );} }

    通過Class實例化對象

    • 調(diào)用無參構(gòu)建

    public T newInstance() throws InstantiationException.IllegalAccessException

    此時類中必須聲明無參構(gòu)造方法

    • 調(diào)用有參構(gòu)建

    public Constructor<?>[] getConstructors() throws SecurityException

    package com.laolang.se.fanshe;import com.laolang.se.fanshe.domain.User;import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException;public class Main {public static void main(String[] args) {Class<User> userClazz = User.class;// 調(diào)用無參構(gòu)造User user = null;try {user = userClazz.newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}System.out.println(user);// 調(diào)用帶參構(gòu)造// 獲取當(dāng)前類的所有構(gòu)造方法Constructor<?>[] constructors = userClazz.getConstructors();for (Constructor<?> constructor : constructors) {System.out.println(constructor.getName());Class<?>[] parameterTypes = constructor.getParameterTypes();for (Class<?> parameterType : parameterTypes) {System.out.println(parameterType);}}// 獲取指定的構(gòu)造方法try {Constructor<User> constructor = userClazz.getConstructor(Long.class,String.class,Integer.class);User laolang = constructor.newInstance(1L,"laolang",23);System.out.println(laolang);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}} }

    通過Class類取得類信息

    • 取得類所在包

    public Package getPackage() // 得到一個類所在包 public String getrName() // 得到名字

    • 取得一個類中的全部方法

    public Method[] getMethods() public int getModifiers() // Modifier.toString(moe); // 還愿修飾符 public Class<?> getReturnType() public Class<?>[] getParameterTypes() public Class<?>[] getExceptionTypes() public static String toString(int mod)

    • 取得一個類中的全部屬性

    public Field[] getFields() public Field[] getDeclaredFields() public Class<?> getType() public int getModifiers() public String getName()

    package com.laolang.se.fanshe;import com.laolang.se.fanshe.domain.User;import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier;public class Main {public static void main(String[] args) {Class<User> userClazz = User.class;// 包名Package packages = userClazz.getPackage();System.out.println(packages.getName());// 得到類全名System.out.println(userClazz.getName());System.out.println("--- 得到所有的公有方法,包括父類的-----------------------------");// 得到方法// 所有的公有方法,包括父類的Method[] methods = userClazz.getMethods();for (Method method : methods) {System.out.println(method.getName());}System.out.println("--- 得到當(dāng)前類所有聲明的方法-----------------------------------");// 得到所有聲明的方法,但不包括父類的methods = userClazz.getDeclaredMethods();for (Method method : methods) {System.out.println("方法名:" + method.getName() + " 修飾符:" + Modifier.toString(method.getModifiers()));}System.out.println("--- 得到所有屬性-----------------------------------");Field[] fields = userClazz.getDeclaredFields();for (Field field : fields) {System.out.println(field.getName());}} }

    通過Class類調(diào)用屬性或方法

    • 調(diào)用類中的方法

    調(diào)用類中的方法,傳入實例化對象,以及具體參數(shù)內(nèi)容

    public Object invoke(Object obj, Object... args)

    • 直接調(diào)用屬性

    1.取得屬性

    public Object get(Object obj)

    2.設(shè)置屬性

    public void set(Object obj, Object value)

    3.讓屬性對外可見

    public void setAccessible(boolean flag)

    package com.laolang.se.fanshe;import com.laolang.se.fanshe.domain.User;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class Main {public static void main(String[] args) {Class<User> userClazz = User.class;try {User user = userClazz.newInstance();System.out.println(user);// 調(diào)用公有方法Method method = userClazz.getMethod("setName", String.class);method.invoke(user,"laolang");System.out.println(user);// 調(diào)用公有方法method = userClazz.getDeclaredMethod("say");// 跳過修飾符的檢查method.setAccessible(true);method.invoke(user);// 開啟修飾符的檢查method.setAccessible(false);//method.invoke(user);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}} }

    動態(tài)代理

    所謂動態(tài)代理,即通過代理類:Proxy的代理,接口和實現(xiàn)類之間可以不直接發(fā)生聯(lián)系,而可以在運行期實現(xiàn)動態(tài)關(guān)聯(lián)

    java動態(tài)代理主要是使用java.lang.reflect包中的兩個類

    • InvocationHandler類

    public Object invoke(Object obj, Method method, Object[] obs)

    第一個參數(shù)obj指的是代理類,method是被代理的方法,obs是指被代理的方法的參數(shù)組。此方法由代理類來實現(xiàn)

    • Proxy 類
    protected Proxy(InvocationHandler h); static Class getProxyClass(ClassLoader loader, Class[] interfaces); static Object newProxyInstance(ClassLoader loader, Class[] interfaces , InvocationHandler h );

    動態(tài)代理其實是運行時生成class,所以我們必須提供一組interface,然后告訴他class已經(jīng)實現(xiàn)了這些interface,而且在生成Proxy的時候,必須給他提供一個handler,讓他來接管的實際的工作

    user

    package com.laolang.se.fanshe.domain;import org.slf4j.Logger; import org.slf4j.LoggerFactory;/*** 被代理類*/ public class User implements Subject{private static final Logger log = LoggerFactory.getLogger(User.class);public User() {log.info("調(diào)用無參構(gòu)造函數(shù)");}public User(Long id, String name, Integer age) {log.info("調(diào)用帶參構(gòu)造函數(shù)");this.id = id;this.name = name;this.age = age;}private String say(){return name;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}private Long id;private String name;private Integer age;@Overridepublic void miai() {System.out.println("正在相親中...");} }

    subject

    package com.laolang.se.fanshe.domain;/*** 要代理的主題接口*/ public interface Subject {/*** 相親*/public void miai(); }

    DynaProxy

    package com.laolang.se.fanshe.domain;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method;/*** 動態(tài)代理類*/ public class DynaProxy implements InvocationHandler {public DynaProxy(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object o = null;before();// 正在調(diào)用業(yè)務(wù)方法o = method.invoke(target,args);after();return o;}/*** 相親之前做的事*/private void before(){System.out.println("為代理人匹配對象");}/*** 相親之后做的事*/private void after(){System.out.println("本次相親結(jié)束");}/*** 被代理對象*/private Object target; }

    Main

    package com.laolang.se.fanshe;import com.laolang.se.fanshe.domain.DynaProxy; import com.laolang.se.fanshe.domain.Subject; import com.laolang.se.fanshe.domain.User;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class Main {public static void main(String[] args) {User user = new User(1L,"老狼",23);DynaProxy dynaProxy = new DynaProxy(user);// 動態(tài)生成代理對象(類加載器,被代理接口,InvocationHandler)Subject subject = (Subject) Proxy.newProxyInstance(user.getClass().getClassLoader(), user.getClass().getInterfaces(), dynaProxy);subject.miai();} }

    轉(zhuǎn)載于:https://my.oschina.net/iamhere/blog/858885

    總結(jié)

    以上是生活随笔為你收集整理的121 项目 023 笔记向 反射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 免费人成在线观看网站 | 日日摸日日 | 天堂二区 | 亚洲成熟少妇视频在线观看 | 国产专区一区二区三区 | 久青草资源福利视频 | 亚洲精品乱码久久久久99 | 成年人黄色在线观看 | 亚洲产国偷v产偷v自拍涩爱 | 综合久久久久综合 | 香蕉久久网站 | 中文日韩欧美 | 免费视频久久 | 一区二区三区中文字幕在线观看 | 黄色成人小视频 | 亚洲aⅴ| 成人欧美一区二区三区在线播放 | 色啦啦视频 | 在线观看av网站 | 欧美日韩在线国产 | 日本高清有码 | 亚洲最新在线视频 | 一区二三区 | 成人免费在线网址 | 国产小视频网址 | 欧美无玛| 在线观看亚洲免费视频 | 欧美干| 亚洲成人av免费观看 | 亚洲一区免费观看 | 青青草老司机 | 免费大黄网站 | 欧美在线观看一区二区三区 | 欧美三日本三级少妇三 | 天天亚洲| 黄片毛片在线 | 在线视频1卡二卡三卡 | 黄色小说在线视频 | 国产精品第二十页 | 久青草免费视频 | 精品国产一区二区三区av性色 | 国产日韩91 | 欧美 日韩 综合 | 黄色刺激视频 | 国产精品久久久久毛片大屁完整版 | 久久av免费看 | 亚洲成人av电影网站 | 亚洲九九 | 色偷偷888欧美精品久久久 | 日产国产亚洲精品系列 | 日批视频网站 | 黄色国产片 | 天天干天天操天天射 | 亚洲激情成人 | 热热久 | 一级片视频免费看 | 亚洲美女中文字幕 | 欧美aa大片 | 国产精品一级二级 | 国产免费观看av | 欧美色999 | 麻豆传媒在线免费 | 黄色刺激视频 | 亚洲精品免费在线 | 亚洲综合在线第一页 | 国产美女又黄又爽又色视频免费 | 国产三区在线视频 | 欧美一区二区三区成人精品 | 国产黄色影视 | 日韩有码一区二区三区 | 青青伊人av | 日本护士体内she精2xxx | 亚洲精品婷婷 | 国产成人精品一区二区三区在线观看 | 日韩成人在线影院 | 日本在线观看网站 | 中文字幕日韩无 | 日韩草逼 | 尤物网址在线观看 | 国产男男网站 | 国产在线欧美 | 亚洲色图第一页 | 天堂av2014 | √资源天堂中文在线视频 | 欧美亚州国产 | 欧美性猛交xxx乱久交 | 销魂奶水汁系列小说 | 琪琪午夜伦理影院7777 | 乖疼润滑双性初h | 人人做| 免费国产精品视频 | 中文字幕精品在线视频 | 九一在线观看免费高清视频 | 欧美精品久久久久久久免费 | 麻豆av影院| 国产综合视频在线观看 | 成人欧美一区二区三区黑人一 | 精品人妻一区二区三区免费看 | 欧美成人精品一区二区三区在线观看 |