1.异常
-
Error/错误, 是程序无法处理的错误,通常和代码执行者的操作无关,在应用程序的控制和处理能力之外
-
Exception/异常, 是程序本身可以处理的异常
RuntimeException是Exception的一个重要子类,由jvm抛出
-
异常能被程序本身处理,而错误无法处理
Throwable 常用的方法
public String getMessage()返回异常发生时的简要信息
public String toString() 返回异常发生时的详细信息
public void printStackTrace() 在控制台打印Throwable对象封装的一场新
- 异常处理
使用try-catch-finally来扑获异常
try语句 用来扑获异常,后边可以0个或者多个catch块, 如果没有catch块则必须根一个finally
catch语句 用来处理try扑获到的异常
finally 语句 无论是扑获/处理异常,finally的语句都会被执行,当try或者catch中有return语句 ,finally的语句块将在方法返回前执行,如果finally中也有return 语句 则会覆盖 try/catch中的return
- finally不执行:
1,在finally语句块的第一场发生异常
2,在finllay语句之前发生了System.exit(int),程序退出. 如果该System.exit是在异常豫剧之后,则会执行finally
3,程序所在的线程死亡
4 关闭cpu
2.java序列化时,如果有些字段不想被序列化
使用transient关键字修饰 /该关键字只能修饰变量
使用键盘输入常用的两种方法
String s = new Scanner(System.in).nextLine();
String s = new BufferedReader(new InputStreamReader(System.in)).readLine()
- I/O 流
按照流的方向: 输入流/输出流
按照操作单元划分: 字节流/字符流
按照流的角色划分: 节点流/处理流
InputStream/OutputSteam 字节输入/输出流
Reader/Writer 字符输入/输出流
音频/图片等媒体文件 使用字节流比较好
字符文件 使用字符流较好
- BIO/NIO/AIO
BIO Blocking I/O 同步阻塞I/O模式,数据的读写阻塞在一个线程内等待完成,在活动连接数较小时,可以使用,使用Socket/ServerSocket套接字通道实现
NIO Non-Blocking/NEW I/O 同步非阻塞I/O模式,也叫新I/O,使用了SocketChannel/ServerSocketChannel套接字通道实现
AIO Async-Blocking I/O 异步阻塞I/O模式 用的很少
5,this/super/static 关键字
this 表示当前对象的引用
super 用来调用父类的方法/变量,构造方法中使用super(参数列表)调用父类构造方法完成初始化,普通方法中使用super.方法()调用父类方法
使用super.变量名 调用父类的变量
static 关键字主要有以下四种使用场景:
- 修饰成员变量和成员方法: 被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。被static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区域的方法区。调用格式:
类名.静态变量名
类名.静态方法名()
- 静态代码块: 静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 该类不管创建多少对象,静态代码块只执行一次.
- 静态内部类(static修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法
- 静态导包(用来导入类中的静态资源,1.5之后的新特性): 格式为:
import static
这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法。
- Coolictions工具类
-
排序操作
void reverse(List list)//反转 void shuffle(List list)//随机排序 void sort(List list)//按自然排序的升序排序 void sort(List list, Comparator c)//定制排序,由Comparator控制排序逻辑 void swap(List list, int i , int j)//交换两个索引位置的元素 void rotate(List list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。
-
查找,替换操作
int binarySearch(List list, Object key)//对List进行二分查找,返回索引,注意List必须是有序的
int max(Collection coll)//根据元素的自然顺序,返回最大的元素。 类比int min(Collection coll)
int max(Collection coll, Comparator c)//根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素。
int frequency(Collection c, Object o)//统计元素出现次数
int indexOfSubList(List list, List target)//统计target在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替换旧元素
Collections提供了多个synchronizedXxx()
方法·,该方法可以将指定集合包装成线程同步的集合,从而解决多线程并发访问集合时的线程安全问题,但是不建议使用,性能低下,建议使用JUC下的线程安全集合
- Arrays类的常见操作
- 排序 :
sort()
- 查找 :
binarySearch()
排序后再进行二分查找,否则找不到 - 比较:
equals()
- 填充 :
fill()
- 转列表:
asList()
- 转字符串 :
toString()
- 复制:
copyOf()
7 .深拷⻉ vs 浅拷⻉
- 浅拷贝: 对基本类型进行值传递,对引用类型进行引用传递的拷贝
- 深拷贝: 对基本类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容
来源:oschina
链接:https://my.oschina.net/u/4517769/blog/4339315