JavaSE基礎筆記十三

第十三章 java反射機制


1.如何創建Class的實例

   1.1過程:源文件經過編譯(javac.exe)後,得到一個或多個.class文件, .class文件經過運行(java.exe),就需要進行類的加載(通過JVM的類的加載器),記載到內存中的緩存,每一個放入緩存中的.class文件就是一個Class的實例

   1.2Class的一個對象,對應着一個運行時類,相當於一個運行時類本身充當了Class的一個實例。

   1.3java.long.Class是反射的源頭。接下類涉及到反射的類都在java.long.reflect子包下。

   1.4實例化Class的方法:

①調用運行時類的.class屬性  

Class clazz = Person.class

②通過運行時類的對象,調用其getClass()方法  

Person p = new Person; 

Class clazz  = p.getClass();

③調用Class的靜態方法forName(String className) 。此方法報ClassNotFoundException

String className = "person";

Class clazz = Class.forName(className);


2.有了Class實例以後,可以做什麼 

2.1創建對應的運行時類的對象

①調用無參構造器創建

Object obj = Class.newInstance();

Person p = (Person)obj;

②調用指定構造器創建(帶參,非public--->Declared)

Constructor cons = clazz.getDeclaredConstuctor(形參類型.class,形參類型.class  等等);

cons.setAccessible(true);

Person p = (Person)cons.newInstance("Tom",10);

    

2.2調用查詢獲取對應的運行時類的完整的類的結構:屬性、方法、構造器、包、父類、接口、泛型、註解、異常、內部類

如:Method[] m1 = clazz.getMethods();獲取到對應的運行時類中聲明的權限爲public的方法(包含父類中聲明的public方法)

        Method[] m2 = clazz.getDeclaredMethods();獲取到對應的運行時類中所有的方法(不含父類)


2.3調用對應的運行時類中指定的結構(某個指定的屬性、方法、構造器)

①調用指定屬性

非public屬性:

Field f1 = clazz.getDeclaredField("name");//屬性名

f1.setAccessible(true);

f1.set(a,“Jerry”);//對象 屬性


public屬性:

Field f2 = clazz.getField("age");//屬性名

f2.set(a,9);//對象 屬性


static屬性:

Field f3 = clazz.getDeclaredField("desc");//屬性名

f3.get(null/對象/類名.class);

②調用指定方法:

調用非public方法:

Method m1 = clazz.getDeclaredMethod("getAge");//方法名 形參類型

m1.setAccessible(true);

int age = (Integer)m1.invoke(p);//方法的返回值類型  名稱       obj,args對象 形參或無


調用public方法:

Method m2 = clazz.getMethod("show",String.class);//方法名 形參類型

Object returnVal = m2.invoke(p,"帥哥");//對象 形參 返回值爲方法的


調用static方法:

Method m3 = clazz.getDeclaredMethod("getAge");//方法名 形參類型

m3.setAccessible(true);

m3.invoke(p/Person.class/null);//對象 類 null


3.java動態代理

代理模式設計原理:使用一個代理將對象包裝起來,然後用該代理對象取代原始對象,任何對原始對象的調用都要通過代理,代理對象決定是否以及何時將方法調用轉到

原始對象上

靜態代理:要求被代理類和代理類同時實現相應的一套接口,通過代理類的對象調用重寫接口的方法時,實際上執行的是被代理類的同樣的方法的調用。

動態代理:在程序運行時,根據被代理類及其實現的接口,動態的創建一個代理類,當調用代理類的實現的抽象方法時,就發起對被代理類同樣的方法的調用

涉及到的技術點:

①提供一個實現了InvocationHandler接口實現類,並重寫其invoke()方法

②Proxy.newInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),h);//obj:被代理類對象 h:實現了InvocationHandler接口實現類的對象


動態代理與AOP


第十四章 網絡編程


1.要想實現網絡傳輸,需要考慮的問題有哪些?

   1.1如何才能準確的定位網絡上的一臺主機?

   1.2如何才能進行可靠的、高效的數據傳輸?


2.Java如何實現的網絡通信

   2.1使用IP地址---定位一臺主機  使用端口號---定位一個應用 ===>InetAddress類

   如何創建一個InetAddress的對象?getByName(**);比如:InetAddress Inet = InetAddress.getByName(*192.168.10.165*);

   如何創建本機的一個InetAddress的對象?getLocalHost()

   域名:getHostName()     IP:getHostAddress()

   2.2對應有協議:

   OSI參考模型:應用層 表示層 會話層 傳輸層 網絡層 數據鏈路層 物理層

   TCP/IP參考模型:應用層 傳輸層 網絡層 物理+數據鏈路層

   對於傳輸層而言:

   TCP協議:

   使用TCP協議前,須先建立TCP連接,形成傳輸數據通道

   傳輸前,採用“三次握手”方式,是可靠的

   TCP協議進行通信的兩個應用進程:客戶端、服務端

   在連接中可進行大數據量的傳輸

   傳輸完畢,需釋放已建立的連接,效率低

   UDP協議:

   將數據、源、目的封裝成數據包,不需要建立連接

   每個數據報的大小限制在64K內

   因無需連接,故是不可靠的

   發送數據結束時無需釋放資源,速度快

   

TCP的編程:Socket ServerSocket

例子:

1.客戶端發送內容給服務端,服務端將內容打印到控制檯上。

2.客戶端發送內容給服務端,服務端給予反饋。

3.客戶端發送內容給服務端,服務端保存到本地,並返回“發送成功”給客戶端,並關閉相應的連接。


UDP的編程:DatagramSocket  DatagramPacket


URL的編程:統一資源定位符 一個URL的對象,對應着互聯網上的一個資源

                      我們可通過URL的對象調用其相應的方法,將此資源讀取(“下載”)



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