1.在Java中,程序总会遇到各种各样不正常的情况,这些不正常的情况称之为“异常”;异常分为两大类,一类为“Error”,这类异常是JVM无法解决的“Tough”问题,此类错误是调整程序也无法解决的异常;另一类为“Exception”,这类错误通常可以用特定代码来进行处理;
2.Exception分为编译时异常和运行时异常,
1️⃣编译时异常:在编译期间会进行的异常(执行javac.exe);
2️⃣运行时异常:在运行期间会出现的异常(执行java.exe);
3.常见运行时异常
1️⃣数组下标越界异常
@Test
public void Shuzu(){
int[] kobe=new int[5];
System.out.println(kobe[6]);
}
java.lang.ArrayIndexOutOfBoundsException: 6
2️⃣运算异常
@Test
public void Yunsuan(){
int kobe=666;
System.out.println(kobe/0);
}
java.lang.ArithmeticException: / by zero
3️⃣类型转换异常
@Test
public void Leixing(){
Object Kobe=new Date();
String kobe=(String)Kobe;
}
java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.String
4️⃣空指针异常
@Test
public void Pointer(){
Object kobe;
kobe=null;
System.out.println(kobe.toString());
}
java.lang.NullPointerException
4.异常处理;
1️⃣.1 try-catch-finally
public class Monica{
@Test
public void Pointer() {
try{
Object kobe;
kobe = null;
System.out.println(kobe.toString());
}
catch (NullPointerException e){
e.getStackTrace();
System.out.println(e.getMessage());
System.out.println("出现空指针异常的啦");
}
finally {
System.out.println("必须要执行的代码");
}
}
}
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 14.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/IntelliJ IDEA 14.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA 14.app/Contents/plugins/junit/lib/junit-rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/javafx-doclet.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/htmlconverter.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Users/Schwinn/IdeaProjects/Learning_Java/out/production/Learning_Java:/Applications/IntelliJ IDEA 14.app/Contents/lib/junit-4.11.jar:/Applications/IntelliJ IDEA 14.app/Contents/lib/hamcrest-core-1.3.jar:/Applications/IntelliJ IDEA 14.app/Contents/lib/hamcrest-library-1.3.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 SCHHKsnow20180827.Monica,Pointer
null
出现异常的啦
必须要执行的代码
1️⃣.2
public class Monica {
@Test
public void kobe() {
FileInputStream in = null;
try {
in=new FileInputStream("myfile.txt");
int b;
b = in.read();
while (b != -1) {
System.out.print((char) b);
b = in.read();
}
}
catch(FileNotFoundException e){
e.getStackTrace();
}
catch(IOException e){
e.getStackTrace();
}
finally {
try {
in.close();
}
catch (IOException e){
e.getStackTrace();
}
catch (NullPointerException e){
e.getStackTrace();
}
}
}
}
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7536 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 14.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/IntelliJ IDEA 14.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA 14.app/Contents/plugins/junit/lib/junit-rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/javafx-doclet.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/htmlconverter.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Users/Schwinn/IdeaProjects/Learning_Java/out/production/Learning_Java:/Applications/IntelliJ IDEA 14.app/Contents/lib/junit-4.11.jar:/Applications/IntelliJ IDEA 14.app/Contents/lib/hamcrest-core-1.3.jar:/Applications/IntelliJ IDEA 14.app/Contents/lib/hamcrest-library-1.3.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 SCHHKsnow20180827.Monica,kobe
Format:
try{
...... //可能发生异常的代码
}
catch( Exception1 e ){
...... //处理Exception1异常
}
catch( Exception2 e ){
...... //处理Exception2异常
}
finally{
...... //一定要执行的语句,但是可以没有finally语句
}
2️⃣throws (上传问题给其调用者)
public class Monica {
public static void main(String[] args) throws FileNotFoundException,IOException {
leBron();
}
public static void leBron() throws FileNotFoundException,IOException{
kobe();
}
public static void kobe() throws FileNotFoundException,IOException{
FileInputStream in = null;
in=new FileInputStream("myfile.txt");
int b;
b = in.read();
while (b != -1) {
System.out.print((char) b);
b = in.read();
}
}
}
Format:
public void Kobe() throws Exception...{
....
}
3️⃣throw (手动抛出一个异常)
public class Monica {
public static void main(String[] args) throws Exception{
Kobe kb23=new Kobe(23);
Kobe kb24=new Kobe(24);
System.out.println(kb23.compareScore(kb24));
System.out.println(kb23.compareScore(new String("Kobe")));
}
}
class Kobe{
private int score;
public Kobe(int score){
this.score=score;
}
public void setScore(int score) {
this.score = score;
}
public int getScore() {
return score;
}
public String compareScore(Object o) throws Exception{
if(o==this){
return "=";
}
else if(o instanceof Kobe){
Kobe kobe=(Kobe)o;
if(kobe.getScore()==this.getScore()){
return "=";
}
else if(kobe.getScore()<this.getScore()){
return "小";
}
else{
return "大";
}
}
else {
throw new Exception("传入科比的啦");
}
}
}
大
Exception in thread "main" java.lang.Exception: 传入科比的啦
4️⃣自创运行时异常类
public class SongException extends RuntimeException {
static final long serialVersionUID= 9089243478974444436L;
public SongException(){
}
public SongException(String msg){
super(msg);
}
}
public class Monica {
public static void main(String[] args) throws Exception{
Kobe kb23=new Kobe(23);
Kobe kb24=new Kobe(24);
System.out.println(kb23.compareScore(kb24));
System.out.println(kb24.compareScore(kb23));
System.out.println(kb23.compareScore(new String("Kobe")));
}
}
class Kobe{
private int score;
public Kobe(int score){
this.score=score;
}
public void setScore(int score) {
this.score = score;
}
public int getScore() {
return score;
}
public String compareScore(Object o) throws Exception{
if(o==this){
return "=";
}
else if(o instanceof Kobe){
Kobe kobe=(Kobe)o;
if(kobe.getScore()==this.getScore()){
return "=";
}
else if(kobe.getScore()<this.getScore()){
return "小";
}
else{
return "大";
}
}
else {
throw new SongException("这是宋小艾异常类啊");
}
}
}
大
小
Exception in thread "main" SCHHKsnow20180827.SongException: 这是宋小艾异常类啊