异常介绍
异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获;Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_RuntimeException这两个直接的子类。
异常理解
对于异常是java提供的一直特殊机制,目的是为了程序员更好的对程序进行优化,而在异常的实际开发时,对于新手来说又非常有难度,对于深层次的异常类之间的关系需要在开发中不断的了解
异常的处理方法在代码中都有介绍
package Absttact.com.java.Exception;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/*
* 处理异常的第一种方式 throws Exceptiong 抛出异常
* 处理异常的第二种方式 try{}catch(){}捕捉解决异常
*/
public class Exceptiontest05 {
public static void main(String [] agrs) {
m1();
}
public static void m1() {
System.out.println("m1 bagin");
try {
m2();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
System.out.println("Not Found this text");
}
System.out.println("m1 end");
/*在m1()方法将FileNotFoundException错误处理
* try {
m2();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
*其他方法在掉m1()方法时不在报错
*/
}
public static void m2() throws FileNotFoundException {
System.out.println("m2 bagin");
m3();
//m3()方法将FileNotFoundException错误抛出
//m2()方法的调用者将FileNotFoundException错误处理和抛出系统才不会报错
System.out.println("m2 end");
}
public static void m3() throws FileNotFoundException {
new FileInputStream("D:\\学习笔记\\java\\ws.txt");
/* throws FileNotFoundException
*创建文件输入对象 IO流后面回学
*在其源代码中将FileNotFoundException错误抛出
*/
}
}
异常的自定义
package Absttact.com.java.Exception;
//自定义异常
//在实际开发中有很多sun公司没有提供的异常
public class Exceptiontest11 {
public static void main(String [] agrs) {
//异常的使用
Myexceptiontest sc= new Myexceptiontest("用户名不可以是空");
//打印异常信息
sc.printStackTrace();
MyException sd =new MyException("登录密码或密码格式错误");
sd.printStackTrace();
}
}
//异常自定义
//第一步创建一个类继承Exception或者RuntimeException
//第二步提供两个构造方法,一个有参一个无参
class Myexceptiontest extends Exception {
//编译是异常
Myexceptiontest (){
}
Myexceptiontest ( String obj){
super(obj);
}
}
class MyException extends RuntimeException {
//运行是异常
MyException(){
}
MyException(String s){
super(s);
}
}
异常的练习使用
package 数组与数据结构;
import java.util.Scanner;
//一维数组模拟栈结构
public class Mystack {
// 创建一维数组
// Object可以存放任何数据类型的数据
private Object[] array;
//栈顶,初始值为0
private int index=0;
public Object[] getArray() {
return array;
}
public void setArray(Object[] array) {
this.array = array;
}
//利用构造函数初始化对象
public Mystack( ) {
//默认输入10
System.out.println("输入数组初始化长度:");
Scanner sc= new Scanner(System.in);
int a= sc.nextInt();
this.array=new Object[a];
System.out.println("输入数组初始化成功:");
}
//压栈
public void push(Object obj) throws MystackOperationException {
if(this.index>=this.array.length)
{
throw new MystackOperationException("栈满,压栈失败");
}
this.array[index]=obj;
System.out.println("压栈成功!栈顶指向"+this.index);
this.index ++;
}
//出站
public void pop( Object obj) throws MystackOperationException
{
if(this.index<=0)
{
throw new MystackOperationException("栈空,出栈失败");
}
this.index --;
System.out.println("出栈成功!栈顶指向"+this.index +"栈元素是"+this.array[index]);
this.array[index]=obj;
}
public static void main(String [] agrs) {
Mystack a= new Mystack();
try {
a.push(new Object());
a.push(new Object());
a.push(new Object());
a.push(new Object());
a.push(new Object());
} catch (MystackOperationException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
a.pop(new Object());
a.pop(new Object());
a.pop(new Object());
a.pop(new Object());
a.pop(new Object());
} catch (MystackOperationException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
class MystackOperationException extends Exception{
MystackOperationException(){
}
MystackOperationException( String s){
super(s);
}
}