[size=16px][/size]
/*
需求:自定义一个异常,复习并牢牢掌握异常方面的知识。
思路:使用异常,并在代码中体现,异常的继承关系,自定义异常处理代码,运行时异常,try和throws两种处理方式;
步骤:
*/
package exceptiontest;
class AgeException extends Exception
{
private int age;
AgeException(String message,int age)
{
super(message);
this.age=age;
}
public int getAge()
{
return age;
}
}
class NameException extends Exception
{
private String name;
NameException(String message,String name)
{
super(message);
this.name=name;
}
public String getName()
{
return name;
}
}
class Student
{
private String name;
private int age;
public Student(String name,int age) throws AgeException,NameException
{
if(age>25||age<5)
throw new AgeException("年龄不符",age);
this.age=age;
if(name.length()>5)
throw new NameException("姓名过长",name);
this.name=name;
}
public String getName()
{
try
{
return name;
}
catch(NameException n)
{
System.out.println(n.getMessage());
System.out.println("异常的姓名为:"+n.getName());
name=name.substring(0,5);
System.out.println("自动取其前五个字符");
}
finally
{
return name;
}
}
public int getAge()
{
try
{
return age;
}
catch(AgeException a )
{
System.out.println(a.getAge());
System.out.println("异常的年龄为:"+a.getAge());
age=20;
System.out.println("年龄已赋值为默认值");
}
finally
{
return age;
}
}
public void show()
{
System.out.println("姓名:"+this.getName()+" 年龄:"+this.getAge());
}
}
class ExceptionTest
{
public static void main(String []args)
{
Student student=new Student("张三",200);
student.show();
}
}
编译时的错误提示为:
D:\javaprog\731>javac -d . ExceptionTest.java
ExceptionTest.java:52: 错误: 在相应的 try 语句主体中不能抛出异常错误NameException
catch(NameException n)
^
ExceptionTest.java:70: 错误: 在相应的 try 语句主体中不能抛出异常错误AgeException
catch(AgeException a )
^
2 个错误
求大家解释下。。。
------解决方案--------------------
你自己定义的这两个NameException和AgeException使用不当,你try-catch使用的时候,如果这个try里面代码没有任何可能抛出NameException,你在catch捕获NameException是会报编译错误的,给你一个非常简单的自定义异常的实例。
- Java code
class AgeException extends Exception{ private int age; AgeException(String message,int age) { super(message); this.age=age; } public int getAge() { return age; }}class NameException extends Exception{ private String name; NameException(String message,String name) { super(message); this.name=name; } public String getName() { return name; }}class Student{ private String name; private int age; public Student(String name,int age) throws AgeException,NameException { if(age>25||age<5) throw new AgeException("年龄不符",age); this.age=age; if(name.length()>5) throw new NameException("姓名过长",name); this.name=name; } public String getName() { return name; } public int getAge(){ return age; } public void show() { System.out.println("姓名:"+this.getName()+" 年龄:"+this.getAge()); }}public class ExceptionTest{ public static void main(String []args) { Student student= null; try { student = new Student("张三",200); } catch (AgeException e) { e.printStackTrace(); } catch (NameException e) { e.printStackTrace(); } student.show(); }}