21天概览Java面试知识之基础篇

来源:互联网 发布:吉他识谱软件 编辑:程序博客网 时间:2024/05/17 08:07

1. &与&&的区别

  • &是既可是逻辑运算符也可作为位运算符,&&只能是逻辑运算符
  • &&具备短路功能(如果第一个表达式为false,则不再计算第二个表达式),&做逻辑运算符时,不具备短路功能
  • 当两边的表达式不是布尔表达式时,&表示按位与操作
短路功能展示:
&&:
int a = 1;int b = 2;if(a==2 && (b=4)==4){}System.out.println(a+"--"+b);
打印结果:1--4
&:
int a = 1;int b = 2;if(a==2 & (b=4)==4){}System.out.println(a+"--"+b);
打印结果:1--2

2.交换两个数的值

目前我知道的有四种写法

  • 根据java的语言特性,一句代码即可交换
int a = 1;int b = 2;a = a + b - (b = a);//a = b +(b = a)*0;System.out.println(a+"-"+b);
  • 通过加减法交换
int a = 1;int b = 2;a = a + b;b = a - b;a = a - b;System.out.println(a+"-"+b);
  • 通过中间值交换
int a = 1;int b = 2;int c = b;b = a;a = c;System.out.println(a + "-" + b);
  • 使用位操作交换
int a = 1;int b = 2;a = b ^ a;b = a ^ b;a = b ^ a;System.out.println(a + "-" + b);

3.String,StringBuilder,StringBuffer的区别

  • 这三者都是final型的,即不能被继承
  • StringBuilder与StringBuffer继承自同一父类AbstractStringBuilder
  • StringBuilder是非线程安全的,StringBuffer和String是线程安全的
  • 这三者内部都是用cha[]来存放值的,只是String的是final型,也就是说,但试图修改String变量指向的对象值时,实际上是生成了新的String对象,并让String变量指向新对象,于是造成了String的值可修改的假象

4.final,finalize,finally的区别

请参考我写的这篇博文:final finally finalize的区别

5.java中的各种Object和Object-s类

  • Collection与Collections
  • Array与Arrays

6.Java中集合类

  • Java 集合概览

7.抽象类与接口有什么区别?

  • Java 抽象类与接口

8.try/catch/finally结构

  • 当try中有return时,finally中的代码是否会执行?什么时候执行?
public static void main(String[] args) {System.out.println((new Test()).test());}public int test() {int i = 1;try {i--;return i;} catch (Exception e) {// TODO: handle exceptionreturn -1;} finally {i = i + 1;System.out.println(i);}}

运行结果为:1  0

可以看出,当运行到return之后,i的值被保存起来,再接着执行finally中的代码,完成后,返回保存的运行结果。也就是说finally中的代码对函数的执行结果是没有影响的。

  • java中的throw,throws是什么意思?
throw表示抛出异常
throws表示捕获并向外抛出异常
public static void main(String[] args) {(new Test()).test(1);}public void test(){throw new NullPointerException();}public void  test(int i)throws NullPointerException{try {test();} catch (Exception e) {// TODO: handle exceptionSystem.out.println(e);}}

运行结果: java.lang.NullPointerException
 

0 0
原创粉丝点击