05.26 學習Java基礎知識,打通面試關一

在這裡你可以得到不只是技能,關注即可習得新技能

今天我們開始看下反射與代理還有部分集合的知識。希望大家能滿意。

學習Java基礎知識,打通面試關一

感興趣可以關注我的頭條號,我會在微頭條不定期的發放免費的資料鏈接.

反射

咱們都知道反射在Java語言中是一種基礎功用,在運行狀態中,可以經過反射的方式來知道一個類的一切屬性,辦法,結構方針乃至是修正類的信息等。總結 。反射就是把Java類映射成一個個的Java方針

Class stu = Class.forName("com.love.manage.bean.StudentBean"); Constructor[] constructors = stu.getConstructors(); // 取得結構器的辦法 Object object = stu.newInstance(); //取得一個方針 Method[] methods = stu.getMethods(); //取得其 辦法 Field dec = stu.getDeclaredField("name"); //取得私有字段 dec.setAccessible(true); //暴力反射 解除私有限定 修正其內容 // 而且這個應用嚐盡非常遍及,自愛咱們的日常的開發、測驗 依靠注入等都有用到了。特別是框架中運用反射來做到耐久化數據 //在最新的Java9 中 肯能會將其約束丟掉 改用其他形式

除了咱們在往常中經過反射 取得其辦法屬性結構辦法之外,咱們還有經過反射越過泛型的查看

ArrayList list= new ArrayList(); list.add("content1"); list.add("content2"); //獲取ArrayList的Class方針,反向的調用add()辦法,增加數據 Class listClass= list.getClass(); //得到 list方針的字節碼 方針 //獲取add()辦法 Method m = listClass.getMethod("add", Object.class); //調用add()辦法 m.invoke(list, 100); //遍歷調集 這樣咱們就把泛型的查看去除了 for(Object obj : strList){ System.out.println(obj); }

動態署理

學習Java基礎知識,打通面試關一

在java中署理是一種非常遍及的現象,咱們常常會用到,比方咱們常常用到的Spring 中的AOP 就用到了署理。其間java中的署理主要是經過jdk的署理完成的。當然咱們還有其他動態署理比方cglib ,ASM等。

為什麼會運用動態署理?

咱們都知道在程序中,有一點比較重要的就是解耦。削減程序與程序間的影響。咱們就可以經過署理來完成。運用署理者可以不必瞭解底層是怎樣完成的,只重視自己在運用的時分怎樣運用即可,方便了自己去擴展。

jdk署理

java中的jdk動態署理是經過其內部的反射機制來完成的,這樣在生成類的時分更加高效。可是jdk動態署理的應用條件是必須是方針類根據一致的接口,假如沒有一致的接口那麼jdk動態署理就無法運用

public class Test implements TestImpl { @Override public String getName(String name) { return name; } @Override public int getOld(String id) { return Integer.valueOf(id) + 1; }}public interface TestImpl { public String getName(String name); public int getOld (String id) ;}class InvocationMyHandler implements InvocationHandler{ /** * 被署理者 */ private Object target ; /** * 結構辦法 * @param target 需求署理的方針方針 */ public InvocationMyHandler(Object target) { this.target = target; } /** * 在這裡是需求多署理進行操作的,經過署理者給被署理者進行的操作都在該辦法中 * @param proxy 署理 者 * @param method 被履行的辦法 * @param args 履行該辦法需求的參數 * @return * @throws Throwable */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object object = method.invoke(target,args); return object; }}public class Main { public static void main(String[] args) { Test test = new Test() ; InvocationMyHandler handler = new InvocationMyHandler(test); Test proxy = (Test) Proxy.newProxyInstance(TestImpl.class.getClassLoader(),TestImpl.class.getInterfaces(),handler); System.out.println(proxy.getName("name")); }}

學習Java基礎知識,打通面試關一

該比如用接口來完成了調用其方針方針。來完成署理的,咱們前面也說的了經過接口調用有侷限性,假如沒有完成其接口那麼就不能運用署理了。成果該問題,咱們可以運用cglib這個署理,來幫助咱們其完成署理。

如果對JAVA微服務、分佈式、高併發、高可用、大型互聯網架構技術、面試經驗交流。感興趣可以關注我的頭條號,我會在微頭條不定期的發放免費的資料鏈接,這些資料都是從各個技術網站蒐集、整理出來的,如果你有好的學習資料可以私聊發我,我會註明出處之後分享給大家。歡迎分享,歡迎評論,歡迎轉發!


分享到:


相關文章: