学习常用类和异常体系时遇到的问题

一、Calendar

 

 

 这里说月份设置为三月,要设置为2。但我设置为二输出出来却是二月。然后日子减一,月份变为了一月,date却还是二月的29天。

 后面搞了半天才想明白,set出来的月份他打印出来的2月,但实际这个二月对应现实生活中的三月

2.根据传入得路径,获取文件名。

public class test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入路径:");
        String fileName=sc.nextLine();
        String temp[]=fileName.split("\\\\");
        String fileNameNow=temp[temp.length-1];
        System.out.println(fileNameNow);

    }
}

 在网上得知了split方法,真好用

3.关于转义字符

在c语言中  \\  就表示输出一个  \  ,而Java中  \\\\  才表示输出一个  \  。前两个  \  在字符串中被解释为一个  \  ,后两个也被解释为一个  \  ,这时解释完毕后变成  \\  ,再由正则表达式解释  \\  ,就又解释成了一个  \  ,所以,在正则表达式中要匹配一个  \  时,需要四个反斜杠  \\\\ 。

二、异常

1.写出程序结果 :

class Demo {
	public static void func() {
		try {
			throw new Exception();
			System.out.println("A");
		} catch (Exception e) {
			System.out.println("B");
		}
	}

	public static void main(String[] args) {
		try {
			func();
		} catch (Exception e) {
			System.out.println("C");
		}
		System.out.println("D");
	}
}

这串代码编译时异常,异常在System.out.println("A");处,解决方案是删除这句话,为什么?

 原因:

throw一个异常后,就不应该再有语句了,抛出一个异常后就要捕获他了,不会再执行后面的语句了。

2.写出程序结果 :

class Exc0 extends Exception {
}

class Exc1 extends Exc0 {
}

class Demo {
    public static void main(String[] args) {
        try {
            throw new Exc1();
        } catch (Exception e) {
            System.out.println("Exception");
        } catch (Exc0 e) {
            System.out.println("Exc0");
        }
    }
}

 

这串代码编写时异常,异常在 catch (Exc0 e)处,给出的修改意见是

Delete catch for 'com.test11.Exc0'或

Move catch for 'com.test11.Exc0' before 'java.lang.Exception'

这是为什么?

原因:

Exception是最大的异常类了,他在最开始就直接被捕获了,不会再捕获后面小的了,所以小的应该在前面,这样才能先捕获小的,捕获不了小的才会去捕获大的。

3.关于有finally时的return

public class Test {
    public static void main(String[] args) {
        int i=two();
        System.out.println(i);
    }
    public static int two(){
        return 1;
        return 2;
    }
}

这段代码编译时异常,异常在return 2处,解决方案时删除这句。 

 

public class Test {
    public static void main(String[] args) {
        int i=two();
        System.out.println(i);
    }
    public static int two(){
        try{
            return 1;
        }finally {
            return 2;
        }
    }
}

 这段代码输出结果为2。为什么第一段不行,第二段就可以了?

原因:

在try里执行到return时,先不return,把要return的值暂存到一缓存区里,然后执行finally的语句,当finally里执行到return语句时,就直接return,如果没有,再回去执行try里面的return。

注意:当finally里要改变try里return的值时,是开辟一个新的缓存区存储这个新的值,而不改变开始那个缓存区里的值,finally里return的是新的缓存区里的值,try里return的是原来那个缓存区里的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值