Java代码审计(3)Java基础(下)

3. java集合

  • Java 集合就像一种容器,可以把多个对象的引用放入容器中。
  • Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组
  • Java 集合可分为 Set、List 和 Map 三种体系
(1)Set:无序、不可重复的集合 

(2)List:有序,可重复的集合

(3)Map:具有映射关系的集合 key value
  • 在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,
    把所有对象都当成 Object 类型处 理;
  • 从 Java5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型

3.1 Set集合

  • Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。
  • Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法
  • 对于引用数据类型比较的是地址
    在这里插入图片描述

3.2 list集合

  • List 代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引
  • List 允许使用重复元素,可以通过索引来访问指定位置的集合元素。
  • List 默认按元素的添加顺序设置元素的索引。
  • List 集合里添加了一些根据索引来操作集合元素的方法

3.3 Map集合

  • Map 用于保存具有映射关系的数据,因此 Map 集合里保存着两组值,
    一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value
  • Map 中的 key 和 value 都可以是任何引用类型的数据
  • Map 中的 Key 不允许重复,即同一个 Map 对象的任何两个 Key 通过 equals 方法比较中返回 false
  • Key 和 Value 之间存在单向一对一关系,即通过指定的 Key 总能找到唯一的,确定的 Value。

4. IO集合

  • 输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
  • 输出:将程序(内存)数据输出到磁盘、光盘等存储设备中
  • Java 的 IO 流主要包括输入、输出两种 IO 流,每种输入、输出流有可分为字节流和字符流两大类:
-字节流以字节为单位来处理输入、输出操作 

-字符流以字符为单位来处理输入、输出操作

4.1 File类

  • File 类代表与平台无关的文件和目录。
  • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
    如果需要访问文件内容本身,则需要使用输入/输出流

4.2 IO流的分类

  • 按流向分,输入流、输出流

  • 按处理的单位,字节流(8 位的字节)、字符流(16 位的字节)

  • 按流的角色,

      节点流:可以从一个特定的 IO 设备读/写数据的流,
      
      处理流:对一个已存在的流进行连接和封装,通过封装后的流来实现数据读/写操作
    

4.3 对象的反序列化

  • 对象序列化的反射是将对象保存到磁盘上,或允许在网络中直接传输对象。
  • 序列化是 RMI(Remote Method Invoke – 远程方法调用)过程的参数和返回值都必须实现的机制,而 RMI 是 JavaEE 的基础。因此序列化机制是 JavaEE 平台的基础
  • 如果需要让某个对象支持序列化机制,则必须让的类是可序列化的,为了让某个类是可序列化的, 该类必须实现两个接口之一 Serializable、Externalizable

使用对象流序列化对象:

  • 若某个类实现了 Serializable 接口,该类的对象就是可序列化的:
    创建一个 ObjectOutputStream
    调用 ObjectOutputStream 对象的 writeObject() 方法输出可序列化对象
  • 反序列化
    创建一个 ObjectInputStream
    调用 readObject() 方法读取六种的对象
    如果某个类的字段不是基本数据类型或 String 类型,而是另一个引用类型,那么这个引用类型必 须是可序列化的,否则拥有该类型的 Field 的类也不能序列化

5. 常用的API

5.1 String

1、被称为构造字符串对象

  • 常量对象:字符串常量对象是用双引号括起的字符序列,例如:“你好”、“12.97”、"boy"等。
  • String类较常用构造方法:
    String(s),
    String (char a[]),
    String(char a[],int startIndex,int count)

5.2 StringBuffer类

String s = new String("我喜欢学习");

StringBuffer buffer = new StringBuffer(“我喜欢学习”); 

buffer.append("数学");

在这里插入图片描述
1、StringBuffer对象的创建

StringBuffer类有三个构造方法:

	StringBuffer() 
	
	StringBuffer(int size)
	
	StringBuffer(String s)

2、StringBuffer VS StringBuilder

StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样 
  • String:不可变字符序列
  • StringBuilder:可变字符序列、效率高、线程不安全
  • StringBuffer:可变字符序列、效率低、线程安全

String使用陷阱:

string s="a"; 	//创建了一个字符串

s=s+"b"; 		//实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是"ab")。
	

如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。
	
如果这样的操作放到循环中,会极大影响程序的性能。

6. 多线程

6.1 多线程概念

  • Java 给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径。
  • 多线程是多任务的一种特别的形式。多线程比多任务需要更小的开销。
  • 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守候线程都结束运行后才能结束。
  • 多线程能满足程序员编写非常有效率的程序来达到充分利用 CPU 的目的,因为可以将 CPU 的空闲时间能够保持在最低限度。

6.2 线程生命周期

在这里插入图片描述

6.3 多线程实现方式

通过实现 Runnable 接口、继承 Thread 、使用Callable三种方式创建线程

7. 异常处理与网络编程

7.1 异常处理

  • 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户,或者用C语言风格(用函数返回值作为执行状态)在Java中即,Java在编译或运行或者运行过程中出现错误。
  • 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用 System.out.println(11/0),那么你是因为你用 0 做了除数,会抛出java.lang.ArithmeticException 的异常。
7.1.1 异常分类
  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
  • 所有的异常类是从 java.lang.Exception 类继承的子类。
  • Exception 类是 Throwable 类的子类。除了Exception类外,Throwable 还有一个子类 Error 。
  • Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在 Java 程序处理的范畴之外。
  • Error 用来指示运行时环境发生的错误。例如,JVM 内存溢出。一般地,程序不会从错误中恢复。
  • 异常类有两个主要的子类:IOException 类和 RuntimeException 类。
7.1.2 异常处理手段

1、捕获异常

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。

try/catch 代码块中的代码称为保护代码,使用 try/catch 的语法如下:

(1)单重捕获:

try {
	// 程序代码 
}catch(ExceptionName e1) {
	//Catch 块
}

(2)多重捕获:

try{
	// 程序代码
}catch(异常类型1 异常的变量名1){ 
	// 程序代码
}catch(异常类型2 异常的变量名2){ 
	// 程序代码
}catch(异常类型2 异常的变量名2){ 
	// 程序代码
}

7.2 网络编程

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

  • java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。

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

      TCP:	
      		TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。
      		
      		通常用于互联网协议, 被称TCP/IP。
      		
      UDP: 
      		UDP是用户数据报协议的缩写,一个无连接的协议。
      	
      		提供了应用程序之间要发送的数据的数据包。
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

划水的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值