异常:Java 异常是Java提供的用于处理程序中错误的一种机制
1.语法错误
2.运行时错误:系统错误:不可捕获Error
数据运算错误:可捕获Exception
java.lang.NullPointerException空指针null
java.lang.NumberFormatException数据格式化错误
java.lang.ArrayIndexOutOfBoundsException数组越界错误
java.lang.ClassCastException类的类型转换错误
java.lang.ClassNotFoundException
java.lang.NoClassDefFoundError
java.lang.NoSuchMethodError
java.lang.ArithmeticException不能被0整除
java.lang.OutOfMemoryError内存溢出错误
try代码段包含可能产生例外的代码。
try 代码段后跟有一个或多个 catch 代码段。
每个catch代码段声明其能处理的一种特定类型的异常并提供处理的方法。
当异常发生时,程序会中止当前的流程,根据获取异常的类型去执行相应的catch代码段。
finally段的代码无论是否发生异常都有执行。
package test;
public class Test {
public static void main(String[] args){
//String s=null;
//s.toString();//java.lang.NullPointerException
//Integer.parseInt("12a");
//Integer.parseInt(null);//java.lang.NumberFormatException
//String[] s={"12","123","45"};
//s[4]="7";//java.lang.ArrayIndexOutOfBoundsException
//String s=new String("ll");
//Object obj=s;
//Test t=(Test)obj;//java.lang.ClassCastException
//new Dog();//java.lang.NoClassDefFoundError Dog类中无main方法时删除Dog.class报错
//java.lang.NoClassDefFoundError 建Dog类,删除Dog.class,new Dog(); 报错
//System.out.println(7/0);//java.lang.ArithmeticException
//new Dog().method("123");
try{
//String s=null;
//s.toString();
try{ //嵌套异常
byte[] b=new byte[1024*1024*200];
}catch(OutOfMemoryError e){
System.out.println("out of memory!");
}
try{
String[] s={"12","123","45"};
s[4]="7";
}catch(NullPointerException e){
System.out.println("Null Error!");
}System.out.println(1/0);
}catch(ArrayIndexOutOfBoundsException e){ //类型陷阱
System.out.println("NotError!");
}catch(NullPointerException e){
System.out.println("Null Error!");
}catch(ArithmeticException e){
System.out.println("by 0 Error!");
}catch(RuntimeException e){
System.out.println("Runtime!");
}catch(Exception e){ //通用异常陷阱
System.out.println("Error!");
}finally{ //最后执行块
System.out.println("stop");
}
}
}
package test;
public class Test1 {
private String name;
public void setName(String name) throws RuntimeException {
if (name.length() <= 0 || name.length() >= 4) {
throw new RuntimeException();
}
this.name = name;
}
public static void main(String[] args) {
try {
new Test1().setName("1234");
} catch (Exception e) {
System.out.println("名字长度超出或者是过短");
}
// try {
//
// NullPointerException n = new NullPointerException();
//
// // Integer.parseInt(s);
//
// throw n; // throw 抛错...Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
//
// } catch (Exception e) {
// // TODO: handle exception
// System.out.println("aaa");
// }
}
}
getMessage();//得到异常信息
printStackTrace();//打印异常
package test;
public class Test2 {
public static void main(String[] args)throws ArrayIndexOutOfBoundsException{
try{
String[] s={"1","2","3","4"};
s[4]="45";
}catch(Exception e){
e.getMessage(); //得到异常信息
e.printStackTrace(System.out);
e.printStackTrace(); //打印
}
}
}
package test;
public class Test3 {
public void method()throws NullPointerException{
System.out.println(1/0);//java.lang.ArithmeticException
}
public static void main(String[] args){
new Test3().method();
/*try{
new Test3().method();
}catch(Exception e){
//e.getMessage();
//e.printStackTrace();
}*/
System.out.println("Hello!");
}
}
自定义异常
1.使用自定义异常一般有如下步骤:
2.通过继承 java.lang.Exception 类声明自己的异常类。
3.在方法适当的位置 生成自定义异常的实例,并用throw 语句抛出。
4.在方法的声明部分用throws 语句声明该方法可能抛出的异常。
package test;
public class Test4 {
private String name;
public void setName(String s)throws NameLengthException{
if(s.length()<=0||s.length()>=4){
throw new NameLengthException("error!");
}
this.name=s;
}
public static void main(String[] args){
try{
new Test4().setName("12345");
}catch(NameLengthException e){
System.out.println("");
}
}
}
package test;
public class NameLengthException extends RuntimeException {
NameLengthException(String s){
super(s);
}
}
例题
package test;
public class Test5 {
public static void method1()throws NullPointerException{
try{
System.out.println("1");
throw new NullPointerException();
}finally{
System.out.println("2");
}
}
public static void method2()throws NullPointerException{
System.out.println("3");
method1();
System.out.println("4");
}
//public void method3()throws NullPointerException{
public static void method3()throws NullPointerException{
try{
System.out.println("5");
method2();
}catch(NullPointerException e){
System.out.println("6");
throw e;
}finally{
System.out.println("7");
}
}
public static void main(String[] args){
//new Test5().method3();
method3();
}
}
数据封装:
package test;
public class Test6 {
public static void main(String[] args){
Integer i=100;//jdk1.5及以上允许
Integer a=new Integer(12);
System.out.println(a);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.SIZE);
System.out.println(Integer.bitCount(5));
System.out.println(Integer.parseInt("12"));
System.out.println(Integer.parseInt("123a", 16));
System.out.println(Character.MAX_HIGH_SURROGATE);
System.out.println(Integer.toBinaryString(12));//二进制转换
System.out.println(Integer.toHexString(45));//十六进制转换
System.out.println(Integer.toOctalString(457987));//八进制转换
System.out.println(Double.NaN);
System.out.println(Double.POSITIVE_INFINITY);
Double d=new Double(1.2/0.2);
System.out.println(d);
}
}