一、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的是原来那个缓存区里的值。