主题:请分析Java异常的问题
学习到Java异常时见到如下范例:
/*
* 这个程序演示引发异常
*/
/*
* 这个类创建用户自定义异常类
*/
class numberofdigits{
protected numberofdigits(){
}
/*
* 类和应用程序的唯一入口
* @param args字符串参数
*/
public static void main(String args[]){
try{
long num;
int count=0;
num=Integer.parseInt(args[0]);
args[0]=args[53];
for(int i=0;num>0;i++){
count+=1;
num=num/10;
}
System.out.println(args[0]+"的位数是"+count);
}catch(NumberFormatException ne){
System.out.println("输入的数字无效!");
}catch(ArrayIndexOutOfBoundsException ae){
System.out.println("数组索引越界!");
}
}
}
以上本是求数字位数的程序,但我对这一句感到不解:
args[0]=args[53]; /* 起什么作用? */
另外我在做习题时运行程序时达不到预期效果,
题目:为一家保险公司编写程序InsuranceCalculater,用2008年减去某人的出生年份来计算其年龄。然后用年龄减去16来计算其他驾驶年数。驾驶年数少于4的人每年需字符1000元保险额,其他人支付600元。如果未满16岁,则无需保险,而应印发异常(年龄太小,无需保险!)
我编写的程序如下:
/*
* 这个类用于自定义异常
*/
class youngerException extends Exception{
youngerException(){
System.out.println("年龄太小,无须保险!");
}
}
/*
* 这个类演示应缴纳的保险
*/
public class insurance{
insurance(){
}
/*
* 类和程序的唯一入口
* @param args字符串参数的数组
*/
public static void main(String args[]){
int year=2008-Integer.parseInt(args[0]);
try{
if(year<16){
throw new youngerException();
}else if((year-16)<4){
System.out.println("年龄"+year+"需支付保险1000元.");
}else {
System.out.println("年龄"+year+"需支付保险600元.");
}
}catch (youngerException ye){
System.out.println("未满16岁!");
}catch (NumberFormatException ne){
System.out.println("输入的不是年份!");
}catch (ArrayIndexOutOfBoundsException ae){
System.out.println("数据越界!");
}catch (IllegalArgumentException ie){
System.out.println("非法参数!");
}
}
}
如果命令行参数为字符串或1982 123之类,程序运行根本捕捉不到错误.
以上问题请帮忙解答,能详细最好,谢谢.
/*
* 这个程序演示引发异常
*/
/*
* 这个类创建用户自定义异常类
*/
class numberofdigits{
protected numberofdigits(){
}
/*
* 类和应用程序的唯一入口
* @param args字符串参数
*/
public static void main(String args[]){
try{
long num;
int count=0;
num=Integer.parseInt(args[0]);
args[0]=args[53];
for(int i=0;num>0;i++){
count+=1;
num=num/10;
}
System.out.println(args[0]+"的位数是"+count);
}catch(NumberFormatException ne){
System.out.println("输入的数字无效!");
}catch(ArrayIndexOutOfBoundsException ae){
System.out.println("数组索引越界!");
}
}
}
以上本是求数字位数的程序,但我对这一句感到不解:
args[0]=args[53]; /* 起什么作用? */
另外我在做习题时运行程序时达不到预期效果,
题目:为一家保险公司编写程序InsuranceCalculater,用2008年减去某人的出生年份来计算其年龄。然后用年龄减去16来计算其他驾驶年数。驾驶年数少于4的人每年需字符1000元保险额,其他人支付600元。如果未满16岁,则无需保险,而应印发异常(年龄太小,无需保险!)
我编写的程序如下:
/*
* 这个类用于自定义异常
*/
class youngerException extends Exception{
youngerException(){
System.out.println("年龄太小,无须保险!");
}
}
/*
* 这个类演示应缴纳的保险
*/
public class insurance{
insurance(){
}
/*
* 类和程序的唯一入口
* @param args字符串参数的数组
*/
public static void main(String args[]){
int year=2008-Integer.parseInt(args[0]);
try{
if(year<16){
throw new youngerException();
}else if((year-16)<4){
System.out.println("年龄"+year+"需支付保险1000元.");
}else {
System.out.println("年龄"+year+"需支付保险600元.");
}
}catch (youngerException ye){
System.out.println("未满16岁!");
}catch (NumberFormatException ne){
System.out.println("输入的不是年份!");
}catch (ArrayIndexOutOfBoundsException ae){
System.out.println("数据越界!");
}catch (IllegalArgumentException ie){
System.out.println("非法参数!");
}
}
}
如果命令行参数为字符串或1982 123之类,程序运行根本捕捉不到错误.
以上问题请帮忙解答,能详细最好,谢谢.