Java基础面试题

来源:互联网 发布:如何使用花生壳域名 编辑:程序博客网 时间:2024/06/05 15:55

基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。

1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?

一个.java源文件可以包含多个类,但是只能包含一个public类,而且这个public类的类名必须和文件名一致。这些多个类在编译时会被编译为多个class文件。

2、说说&和&&的区别和联系

&和&&的共同点:
&和&&都可以用作逻辑与运算符,只有前后两个表达式都为真的时候,结果才为真,只要有一方为false,结果为false。

&和&&的区别:

  • &&具有短路功能,即只有第一个表达式为真的时候,才会执行第二个表达式,如果第一个表达式为false,则不会执行第二个表达式。常用在if(str != null && !str.equals(“”)){},如果str为null,后面的表达式不会执行,所以不会出现NullPointerException,如果将&&改为&,则会抛出NullPointerException。另一个案例if(x == 3 & ++y >0),当x!=3时,y也会增长。
  • &可以作为位运算符,当两边的表达式不是boolean类型时,&表示按位与运算。我们常用0x0f与一个整数进行&运算,来获取该整数的最低4个bit位,例如0x31 & 0x0f的结果为0x01。

这题的答题思路是,先说共同点,再说区别,并举一些经典的案例来佐证,以表明自己理解的透彻深入。

3、Java中如何跳出当前的多重嵌套循环

  • break + 外层标号
  • flag标识,让外层的循环可以受到里层代码的控制
//在二维数组中查询某个数字int[][] a = {{1,2,3},{4,5,6,7},{8,9}};boolean flag = false;for(int i = 0; i < a.length && !flag; i++){    for(int j = 0; j < a[i].length; j++){        System.out.println(i + ";" + j);        if(a[i][j] == 7){            flag = true;            break;        }    }}

4、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

switch(exp)中,exp可以是整数表达式或者枚举常量。

整数表达式可以是int基本类型或者包装类型,由于short、byte、char都可以隐式的转换为int,所以这些类型及其包装类型是可以的。

long和String不符合规定,也不能隐式转换,所以不可以

5、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

s1 = s1 + 1; 运算时会进行表达式提升,运算结果为int类型,int类型再赋值给s1 short类型时,会报类型转换错误,需要强制类型转换。

    short s1 = 1;    s1 = (short) (s1 + 1);   //2

但是s1 += 1;因为+=是Java规定的运算符,编译器会进行特殊的处理,不会报错。

6、char型变量中能不能存贮一个中文汉字?为什么?

char型变量占用2个字节,16位,用来存储Unicode编码,范围从0~65535。

这个编码范围中包含了汉字,所以char型是可以存储汉字的,不过其包含的汉字大小有限,如果生僻汉字没有包含在其中,则char型无法存储。

char s1 = '雪';System.out.println(s1);

字符编码的发展历史

要求触类旁通,知无不言。

7、用最有效率的方法算出2乘以8等于几?

最有效率的运算是位运算,因为它的CPU直接支持的运算。
左移一位相当于*2,乘以8,即时左移3位。

8、、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

引用不能变,引用指向的对象可以变。

    final StringBuffer sb = new StringBuffer("test");    //sb = new StringBuffer("newTest"); 编译错误    sb.append("2017");    System.out.println(sb.toString());

9、”==”和equals方法究竟有什么区别?

==是equals都是判断变量是否相等的方法

==的用法

  1. 判断基本类型时,直接判断基本类型的值是否相等
  2. 判断引用类型时,判断引用类型的引用地址是否相同

equals方法是Object类提供的实例方法,用来判断当前实例是否和方法内的实例是同一个引用,内部实现是return this == parm,即没用重写的equals就是==。
但是,特殊的,String类重写了equals方法,只要两个String的字符一致,就会返回true。

字符串比较的时候,要使用equals,因为这才是比较实际内容的

String a = "abc";String b = new String("abc");a == b;     //falsea.equals(b);    //true

10、静态变量和实例变量的区别?

静态变量和实例变量都是变量,都可以保存值。

静态变量

  • 语法上:是属于类的变量,使用static修饰,
  • 程序运行时:在程序加载类的字节码时,它就会被分配内存空间,值会被初始化,然后就可以调用了。
  • 使用上:使用时,可以直接通过类名.静态变量进行调用,主要用于类中共性的数据的存储。

实例变量

  • 语法上:属于类的实例的,不能使用static修饰
  • 程序运行时:它的值在实例初始化的时候被初始化,没有创建实例对象时,实例变量不会被分配空间。
  • 使用上:使用实例变量时,必须先将类实例化,使用classInastance.实例变量来调用,用来存储个性化的数据。

例如:

 public void test(){        staticCount ++;        instanceCount ++;        System.out.println("staticCount = " + staticCount + "; instanceCount = " + instanceCount);    }    public static void main(String[] args){        InterfaceTest it1 = new InterfaceTest();        it1.test();    //staticCount = 1; instanceCount = 1        InterfaceTest it2 = new InterfaceTest();        it2.test();    //staticCount = 2; instanceCount = 1    }

理论联系实际

0 0
原创粉丝点击