Java基础面试题—语法篇二

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

可以有多个类,但是只能有一个public类,并且public类的类名必须与文件名一致

2.Java有没有goto?

Java中的保留字,现在没有在Java中使用

3.Java中&和&&的区别

在Java中&和&&都表示逻辑与的运算符,当运算符两边的表达式都为true时,整个运算结果才为true,否则只要有一个是false,结果就是false

&&还具有短路的功能,即如果第一个表达式为false,后一个表达式就不会再执行了,&即使第一个表达式是false,也会执行第二个表达式

&还可以用作位运算符,当操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01

4.switch语句能否作用在byte上?能否作用在long上?能否作用在string上?

在switch(e)中,e只能是一个整数表达式或者枚举常量,整数表达式可以是int基本数据类型或者Integer包装类型,因为byte、short、char都可以隐式转换为int,所以switch可以作用在byte、short、char和它们的包装类型上。long不符合switch的语法规定,并且不能隐式转换为int,所以不能作用在switch上,string在Java1.7之后已经支持这种写法了,也可以作用在switch上

5.char型变量中能否存入一个中文汉字?为什么?

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以char型变量中可以存储中文汉字。但是如果某个特殊的汉字没有包含在unicode编码字符集中,那么char型变量就不能存储这个特殊的汉字,因为unicode编码占用两个字节,所以char型变量也占用两个字节

6.用最有效的方法算出2乘以8

使用2<<3,把2左移三位,将一个数左移n位,就相当于将这个数乘以2的n次方,所以只需要将2左移三位即可,位运算是CPU直接支持的,效率最高

7.静态变量和实例变量的区别

静态变量就是用static关键字修饰了的,而实例变量则没有

实例变量是属于某个对象的属性,必须创建实例对象,实例变量才会被分配空间,进而使用这个实例变量。静态变量是属于类的,也称之为类变量,只要程序加载了类,不用创建任何实例对象,静态变量就会被分配空间从而使用。简而言之就是实例变量必须创建对象来使用,静态变量可以直接通过类名来使用

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

使用final关键字修饰变量时,是指引用变量不能变,引用变量所指向的对象中的内容是可以改变的,例如:

finalStringBuffer a=new StringBuffer("immutable");
执行如下语句将报告编译期错误:

a=new StringBuffer("");

但是,执行如下语句则可以通过编译:

a.append(" broken!");

9.short s1= 1; s1 = s1 + 1;有错吗? short s1 = 1; s1 += 1;有错吗?

short s1=1;s1=s1+1,有错,因为s1+1运算时会自动提升表达式的类型,所以结果是int类型,将int类型赋值给short类型s1时,编译器会报需要强制转换类型的错误

short s1=1;s1+=1;没有错,因为+=是Java语言规定的运算符,Java编译器会对它进行特殊处理,所以可以正确编译

猜你喜欢

转载自blog.csdn.net/ys_230014/article/details/87922937
今日推荐