碰到错误Error了,不需要我们处理,系统已经处于不可恢复的崩溃状态了,重启程序就完事了
异常
异常有两类:
一种RuntimeException 运行时异常,编译能过,运行的时候报错了,需要增加逻辑处理来处理异常
一种是CheckedExciption 已检查异常,编译时异常,
碰到异常就两种处理方式,一种是自己处理,第二种是抛出异常,让上级调用者处理
异常处理方式之一,捕获异常
注意遇到异常的时候,如果有父子关系,要把子类异常放到前面,父类异常放后面,不然执行不到子类异常
语句2出现问题后,语句3和他以后的try内代码都不会执行了
package com.demo;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test02 {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("D:\\Users\\JavaWebWork\\javaSE\\exception\\src\\test.txt");
char c = (char)reader.read();
char c2= (char)reader.read();
char c3= (char)reader.read();
char c4= (char)reader.read();
System.out.println(""+c+c2+c3+c4);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
文件中的内容有3个字符,执行第四次read()的时候,也会正常读取,但读取的内容是“□”?。。。
异常处理方式之一,抛出异常
package com.demo;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test03 {
public static void main(String[] args) throws IOException {
FileReader reader = null;
reader = new FileReader("D:\\Users\\JavaWebWork\\javaSE\\exception\\src\\test.txt");
char c = (char)reader.read();
char c2= (char)reader.read();
char c3= (char)reader.read();
char c4= (char)reader.read();
System.out.println(""+c+c2+c3+c4);
reader.close();
}
}
main方法中出现的异常全部抛出,抛给虚拟机JVM
异常处理方式之一,使用try-with-resource
package com.demo;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
//使用try-with-resource
public class Test04 {
public static void main(String[] args) {
try(FileReader reader = new FileReader("D:\\Users\\JavaWebWork\\javaSE\\exception\\src\\test.txt");){
char c = (char)reader.read();
char c2= (char)reader.read();
char c3= (char)reader.read();
System.out.println(""+c+c2+c3);
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这种方式就是让程序员简便,本质和try catch一样,只不过自己不用写finally代码块了
IDEA-Debug的用法
基本常用类介绍
包装类
这种情况会出异常;i赋值null,j在进行拆箱的时候会报空指针异常
自动装箱时,[-128,127]之间的数有缓存!
练习:自定义一个包装类
package com.demo;
import java.util.Arrays;
//自定义一个简单的包装类(仅限于练习)
public class MyIntger {
private final int value;
private static MyIntger[] cache; //缓存【-128,127】之间的数字
private static final int LOW =-128;
private static final int HIGH=127;
static {
cache=new MyIntger[HIGH-LOW+1];
for(int i = LOW;i<=HIGH;i++){
cache[i-LOW]=new MyIntger(i);
}
System.out.println(Arrays.toString(cache));
}
public MyIntger(int value) {
this.value = value;
}
public static MyIntger valueOf(int value){
if(value>=LOW&&value<=HIGH){
return cache[value-LOW];
}
return new MyIntger(value);
}
public int intValue(){
return value;
}
public static void main(String[] args) {
MyIntger a = new MyIntger(10);
MyIntger b = MyIntger.valueOf(100);
MyIntger b2=MyIntger.valueOf(100);
MyIntger b3=MyIntger.valueOf(1000);
MyIntger b4=MyIntger.valueOf(1000);
System.out.println(b==b2);
System.out.println(b3==b4);
int c = b.intValue();
}
@Override
public String toString() {
return value+"";
}
}
字符串相关类
String类代表不可变的字符序列
StringBuilder类和StringBuffer类代表可变字符序列