异常
异常:程序生病了
异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。
在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出):throw : 制造异常
Throwable有两个重要的子类:Exception(异常)和 Error(错误)
异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。
Exception:异常
CheckedException检查时异常|编译时异常:是在编译时出现的,如果不处理,程序无法执行
RuntimeException运行时异常:是在程序运行的时候出现,简单的可以通过增强程序的健壮性来处理(if判断)
常见的运行时异常:
1.空指针 NullPointerException
2.数组索引越界 ArrayIndexOutOfBoundsException
3.类型转换异常 ClassCastException (引用数据类型父类|父接口引用强转为实现类|子类类型)
4.数学异常 ArithmeticException
5.负数异常 NegativeArraySizeException
6.数字格式异常 NumberFormatException
异常通常需要程序员进行处理,否则程序无法继续下去。
遇到异常,不同的异常见名知意,非常直观,方便调试
如果遇到异常不处理,程序无法继续向下执行
throw : 制造异常
异常处理方式:
throws : 抛出异常
try..catch 捕获异常
try{
可能会出现异常的代码;
}catch(StringIndexOutOfBoundsException e){
e....
如果出现这个类型的异常,就执行的代码
}catch(NullPointerException e){
...
}catch(FileNotFoundException e){
..
}catch(Exception e){
....
}finally{
无论是否出现异常,肯定会执行的代码
}
1.异常都可以使用异常处理的2种方式(throws try……catch)进行处理
编译时异常必须使用这两种方式处理,运行时异常可以使用这两种方式也可以使用增强程序的健壮性
2.抛出异常,当前不处理,异常抛出到上一层,方法的内部把异常抛出到方法上面,谁调用这个方法,谁处理
3.异常捕获,在遇到异常的时候当前位置就处理,捕获某个异常对象,使用异常的功能
4.如果try中遇到异常了,try中下面的代码不会执行,直接去执行对应catch中的内容,如果没有遇到异常,正常执行所有的try中代码
5.一个try后可以跟一到多个catch,捕获小范围的异常catch写在上面,否则下面的catch执行不到
6.finally中的内容无论当前trycatch结构是否遇到异常都会执行其中的代码,与前面的try..catch是一个结构
自定义异常
使用java内置的异常类可以描述在编程时出现的大部分异常情况,也可以通过自定义异常描述特定业务产生的异常类型。所谓自定义异常,就是定义一个类,去继承Throwable类作者它的子类
String
String : 不可变长的字符序列 *****
多字符换没有大小修改或拼接,灵活使用当前字符串对象String
StringBuilder : 可变长的字符序列,线程不安全,效率较高
单线程环境下,如果大量的对字符串做修改,推荐使用StringBuilder
StringBuffer : 可变长的字符序列,线程安全,效率较低
多线程环境下,需要保证线程安全的是哦户,如果大量的对字符串做修改,StringBuffer.
执行效率: StringBuilder > StringBuffer > String
String
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串常量:字符串常量池中出现,使用时会先检查常量池中是否存在这个字符串常量对象,如果直接使用,不存在创建新的字符串常量对象
通过构造器创建对象:new-->对象在堆中,每执行new都是新的对象
常见的如下语法规则:
//如果想要比较字符串内容是否相等,就使用字符串的equals方法
System.out.println(str.equals(str2));
//String(char[] value) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
char[] ch={'s','h','s','x','t'};
String str3=new String(ch);
System.out.println(str3);
//String(char[] value, int offset, int count) 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
String str5=new String(ch,2,3);
System.out.println(str5);
//String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
String str4=new String(arr); //默认utf-8
System.out.println(str4);
//String(byte[] bytes, String charsetName) 自定字符编码格式
String str5=new String(arr,"gbk");
System.out.println(str5);
//String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
//String(byte[] bytes, int offset, int length, String charsetName) 通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。
String str6=new String(arr,2,4,"gbk");
System.out.println(str6);
//String(StringBuffer buffer) 分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
//String(StringBuilder builder) 分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。
字符串
//char charAt(int index) 返回指定索引处的 char 值。 ***
// int codePointAt(int index) 返回指定索引处的字符(Unicode 代码点)。
// int compareTo(String anotherString) 按字典顺序比较两个字符串
// int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。
//String concat(String str) 将指定字符串连接到此字符串的结尾。 ***
// boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true。 ***
static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始。
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束
byte[] getBytes() 字符串转字节数组 ****
byte[] getBytes(String charsetName)
int indexOf(int ch) 根据字符找索引,第一次出现
int indexOf(String str) ***
返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。
// int length() 返回此字符串的长度。
//String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
//String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。 ****
String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 ****
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。
结束索引endIndex不包含
//char[] toCharArray() 将此字符串转换为一个新的字符数组。 ***
String toUpperCase() 字符串转大写
String toLowerCase() 字符串转小写
// String trim() 去前后空格 ***
//static String valueOf(int i) 返回 int 参数的字符串表示形式。
自动拆装箱
自动装箱: 基本-->引用
自动拆箱: 引用-->基本
日期对象
Date 日期类
构造器:
Date() 当前本机时间
Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
在java.util.Date日期类
boolean after(Date when)
测试此日期是否在指定日期之后。
boolean before(Date when)
测试此日期是否在指定日期之前。
int compareTo(Date anotherDate)
比较两个日期的顺序。
boolean equals(Object obj)
比较两个日期的相等性。
SimpleDateFormat 日期格式转换器
* 可以使用转换器的默认格式,指定转换格式
* 日期对象-->字符串
* 字符串-->日期对象
*
* y: 年
* M: 月
* d: 日
* H: 24小时制
* h: 12小时制
* m: 分
* s: 秒
* S: 毫秒
*
*
* format : 日期对象转为字符串
* parse : 字符串转为日期对象