网络编程及反射<课堂笔记>

网络编程(Socket)

一、Java网络编程

     网络编程是指编写运行在多个设备的计算机程序,这些设备都通过网络来连接。

Java.net包中提供了两种常见的网络协议的支持:

   TCP:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP位于IP之上,应用层之下的中间层。

   UDP:UDP位于OSI模型的传输层,一个无连接的协议。

1.Socket编程

套接字使用TCP提供了两台计算机之间的通信机制。

  以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

(1)、服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。

(2)、服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。

(3)、服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。

(4)、Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。

(5)、在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。

   2.Socket整体流程

     Socket编程主要涉及到客户端和服务端,先是服务端创建一个服务器套接字(ServerSocket),并附加到一个端口上,服务器从端口监听连接。

   3、ServerSocket类的方法

      ServerSocket类的四个构造方法:

        public ServerSocket(int port) throws IOExceeption :创建绑定到特定端口的服务器套接字。

        public ServerSocket(int port,int backlog) throws IOException:利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号。

        public ServerSocket(int port, int backlog, InetAddress address) throws IOException:使用指定的端口、侦听backlog和要绑定到的本地IP地址创建服务器。

        public ServerSocket() throws IOException:创建非绑定服务器套接字。

     ServerSocket类的常用方法:

        (1)、public int getLocalProt():返回此套接字在其上侦听的端口。

        (2)、public Socket accept() throws IOException:侦听并接受到此套接字的连接

        (3)public void setSoTimeout(int timeout):通过指定超时值启用或者禁用SO_TIMEOUT,以毫秒值为单位。

        (4)、public void bind(SocketAddress host, int backlog):将ServerSocket绑定到特定地址。

反射

 一、概念

    在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性

   通过反射进行访问信息:

getPackage():返回值类型为Package对象,获取该类存放的路径;

getName():String对象,获取该类的名称;

getSuperclass():Class对象,获取该类继承的类;

getConstructors():Constructor型数组,获取所有权限为public的构造方法。

getDeclaredContruectors():Constructor对象,获取当前所有构造方法

getMethods():Methods 型数组,获取所有权限为 public 的方法

getDeclaredMethods():Methods对象,获取当前对象的所有方法

getFields()Field 型数组,获取所有权限为 public 的成员变量

getDeclareFileds():Field对象,获取当前对象的所有成员变量

反射机制的优缺点:

    优点:能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。

与Java动态编译相结合,可以实现无比强大的功能。

对于Java这种先编译再运行的语言,能够让我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象

   缺点:反射会消耗一定的系统资源,因此,如果不需要动态地创建一个对象,那么就不需要用反射;

反射调用方法时可以忽略权限检查,获取这个类的私有方法和属性,因此可能会破坏类的封装性而导致安全问题。

Java 反射机制在一般的 Java 应用开发中很少使用,即便是 Java EE 阶段也很少使用。

二、反射机制API

   Java.lang.reflect包中所要用到的类:

     Constructor 类:提供类的构造方法信息。

     Field 类:提供类或接口中成员变量信息。

     Method 类:提供类或接口成员方法信息。

     Array 类:提供了动态创建和访问 Java 数组的方法。

     Modifier 类:提供类和成员访问修饰符信息

三、通过反射访问构造方法

   Constructor类的常用方法:

     isVarArgs():查看该构造方法是否允许带可变数量的参数,如果允许,返回 true,否则返回 false

     getParameterTypes():按照声明顺序以 Class 数组的形式获取该构造方法各个参数的类型

     setAccessiable(boolean flag): 如果该构造方法的权限为 private,默认为不允许通过反射利用 netlnstance() 方法创建对象。如果先执行该方法,并将入口参数设置为 true,则允许创建对象。

     getModifiers():获得可以解析出该构造方法所采用修饰符的整数。

四、通过反射执行方法

   动态获取一个对象方法的信息,先需要通过以下的方法之一创建一个Method类型的对象或数组:

  getMethods()

getMethods(String name,Class<?> …parameterTypes)

getDeclaredMethods()

getDeclaredMethods(String name,Class<?>...parameterTypes)

如果是访问指定的构造方法,需要根据该方法的入口参数的类型来访问。

 Method类的常用方法:

   getName():获取该方法的名称

   getParameterType():按照声明顺序以Class数组的形式返回该方法各个参数的类型。

   isVarArgs():查看该方法是否允许带有可变数量的参数,如果允许返回 true,否则返回false

   getModifiers():获得可以解析出该方法所采用修饰符的整数

   getReturnType() Class 对象的形式获得该方法的返回值类型

通过class对象可以获取继承关系:

   class getSuperclass():获取父类类型

   class[] getInterfaces()`:获取当前类实现的所有接口

通过`Class`对象的`isAssignableFrom()`方法可以判断一个向上转型是否可以实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值