刚在论坛上看到http://www.iteye.com/topic/681784的几道面试,测试了一下,收获不小,特此mark
public class test1 {
public static boolean get(){
try{
//System.out.println("Get false");
return false;
}
// catch(Exception e){
// e.printStackTrace();
// System.out.println("Ex true");
// return true;
// }
finally{
return true;
}
}
public static void main(String... strings){
System.out.println(get());
}
}
结果:true
说明在finally中,无论是否return都会执行,当用System.exit()是才会退出。and return只是终止一个模块的运行
2. public static void main(String[] args) {
String classPath1 = "java.lang.string";
System.out.println(classPath1.replaceAll(".", "A"));
//System.out.println(classPath1.replaceAll("\\.", "A"));
}
结果:全部替换,以为“.”在JDK中解释为
预定义字符类 | |
---|---|
. | 任何字符(与行结束符 可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
3.public static void main(String ...strings){
StringBuilder sb=new StringBuilder();
switch(1){
case 1:sb.append("Hello a");
case 2:sb.append("b");
case 3:sb.append("c");
default:sb.append("d");
}
System.out.println(sb.toString());
}
这个问题不难,但是为什么要用StringBuilder呢?我平常都用StringBuffer,还是jdk中间分晓。
一个可变的字符序列。此类提供一个与 StringBuffer
兼容的 API,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快。
将 StringBuilder
的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer线程安全的可变字符 序列
4.
public static void main(String[] args) {
int j = 0;
// System.out.println(j++);
for (int i = 0; i < 100; i++)
j = j++;
System.out.println(j);
}
结果:0,这个没什么可讲的,就是不要被自己的知识迷惑
6. public static void main(String[] args) {
try {
System.out.println("Hello world");
System.exit(1);
} finally {
System.out.println("Goodbye world");
}
}
结果:Hello world,可以与1进行比较
6 public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(1999, 12, 31); // Year, Month, Day
System.out.print(cal.get(Calendar.YEAR) + " ");
Date d = cal.getTime();
System.out.println(d.getDay());
}
结果:2000 1 总体感觉没意思