4.3~4.9——反射,网络编程,枚举和泛型,Lambda表达式

1. 反射

1.1 什么是反射?

在程序运行状态中,对于任意一个类可以获得它的属性和方法,对于任意一个对象可以调用它的属性和方法,这种动态获取类的信息和调用对象的功能成为反射。

1.2 使用反射的步骤

获取Class类对象的三种方法:

        (1) 类.class()

        (2) 对象.getClass()

        (3) Class.forName()

注:一个类的类对象,在内存中是唯一的

根据Class类对象获取属性,方法对象:

        (1) 获取字段对象:getFields(), getDeclaredField(), getField();

        (2) 获取方法对象:getMethod(), getMethods(), getDeclaredMethod();

                调用方法:invoke(对象名,参数);

注:getDeclaredXXX可以得到类中声明的全部信息,但是要调用私有的方法或者修改似有字段时要先调用对象.setAccessible()方法


2. 网络编程

2.1 网络编程的三大要素

(1) ip地址,ip地址能够进行网络通讯的一个设备的标识,ip地址用二进制来表示,分为两大类,ipv4和ipv6,ipv4为4个字节32位,ipv6为16个字节128位

(2) 端口, 端口号是应用程序的标识,端口号取值范围0-65535,0-1023端口已经被占用,一般我们使用1024-49151的端口号

(3) 协议, 协议是计算机进行网络通讯的一种规则,它对数据的传输格式,传输效率,传输步骤做了统一的规定,通信双方必须同时遵守才能完成数据交换,常见的网络协议为TCP和UDP

2.2 URL

URL是统一资源定位符,用于指向网上资源的指针。

一个标准的URL包括:协议,主机,端口,路径,查询参数,锚点

如http://www.google.com:80/index.html

2.3 UDP协议

UDP是无连接通讯协议,在传输数据时,数据的发送端和接收端不建立逻辑连接。

UDP协议消耗资源少,通讯效率高,通常用于音频,视频和普通数据的传输

使用步骤:

发送端:

        1.创建数据报套接字对象:

                DatagramSocket datagramSocket = new DatagramSocket(SocketAddress对象);

        2.创建数据报包对象:

                DatagramPacket datagramPacket = new DatagramPacket(数组,长度);

        3.调用datagramSocket.send(datagramPacket);

        4.关闭发送端

接收端:

        1.创建数据包套接字对象:

                DatagramSocket datagramSocket = new DatagramSocket(端口);

        2.创建数据报包对象:

                DatagramPacket datagramPacket = new DatagramPacket(数组,长度);

        3.调用datagramSocket.receive(datagramPacket);

        4.关闭接收端

2.4 TCP协议

TCP是面向连接的通讯协议,即在传输数据前后建立逻辑连接,然后再传输数据,它的数据传输可靠无差别的。

使用步骤:

发送端:

        1.建立套接字对象:Socket socket = new Socket(ip地址,端口号);

        2.使用写入流将数据写入Socket的写入传输流中

BufferedOutputStream bos=new BufferedOutputStream(new InputStreamReader(socket.getInputStream()));

        3.调用bos的写方法

        4.关闭流

接收端:

        1.建立套接字对象:Socket socket = new Socket(端口);

        2.使用读取流将Socket的输出传输流的东西读取出来:

BufferedInputStream bis = new BufferedInputStream(socket.getInputStream));

        3.调用bis的读方法

        4.关闭流

2.5 UDP和TCP的区别

UDP是无连接的,不可靠的数据传输;TCP是面向连接的,可靠的数据传输

UDP是数据不安全的,缺乏数据校验:TCP是数据安全的,有数据校验

UDP的传输效率高,TCP的效率低


3. 枚举和泛型

3.1 枚举

枚举是一个被命名的常量的集合,它继承了java.lang.Enum类,枚举中的每个常量成员都是该枚举的实例对象。

枚举中的常用方法:

valueOf(String) 将字符串转化成枚举类的实例

values() 得到该枚举类的枚举数组

ordinal()获取该枚举实例的序号

3.2 泛型

泛型是参数化的类型,对类型进行约束,在编译期起作用

使用:

        1.泛型类,在类名的后面加上<T>

        2.泛型方法,在权限修饰符和返回值类型中间加上泛型声明<T>

        3.泛型通配符,在泛型中?为泛型的通配符,表示一种未知的数据类型,通常作为方法参数或者返回值类型

        4.上边界泛型,下边界泛型:

                上边界泛型:<? extends Xxx> 规定的数据类型只能是Xxx或者其子类

                下边界泛型:<? super Xxx> 规定的数据类型只能是Xxx或者其父类

泛型擦除,泛型信息只存在于编译期间,泛型在编译期间规定了某种数据类型,但是在生成字节码文件时是不生成泛型信息的,一般会把泛型信息生成Object类,或者这是一个上边界泛型的话,生成上边界的数据类型


4. Lambda表达式

4.1 什么是LambdaLa

Lambda表达式是函数式接口,即一个接口中只有一个抽象方法,允许把这个方法作为一个参数传入一个方法中。

4.2 Lambda表达式怎么用

基本格式:

1.要有一个函数式接口,即一个接口中只有一个抽象方法

2. () -> {}

        当方法参数为0个或者多个时,要写小括号,当方法中的参数只有一个时,可以把小括号省略,只写参数名

        当方法体里只有一条语句时,可以将大括号省略

4.3 常用的函数式接口

1. 功能型接口:Function<T,R>,T是方法的传入参数,R是方法的返回值

2. 消费型接口:Consumer<T>,该接口的方法有传入参数,没有返回值

3. 供给型接口:Supplier,该接口方法没有传入参数,有返回值

4. 断言型接口:Predicate<T>,该接口方法有传入参数,有boolean值的返回类型

4.4 方法引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值