首页 > 代码库 > JavaSE基础笔记十三

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的对象调用其相应的方法,将此资源读取(“下载”)



本文出自 “阿成的博客” 博客,转载请与作者联系!

JavaSE基础笔记十三