面试之Java语言基础,
面试之Java语言基础,
1、标识符的命名规则
标识符只能由数字、字母(a-z、A-Z)、下划线( _ )和$组成,并且第一个字符不能为数字。
2、instanceof关键字的作用
用法:对象 A instanceof 类B。
instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。注意:如果对象A为null,则返回false。
3、strictfp关键字的作用
strictfp可以用来修饰一个类、接口或者方法,在所声明的范围内,所有浮点数的计算都是精确的。当一个类被strictfp修饰时,所有方法默认也被strictfp修饰。
4、什么是不可变类?
不可变类:当创建了一个类的实例后,就不允许修改它的值了。特别注意:String和包装类(Integer,Float...)都是不可变类。
扩展问题1:new String("abc");创建了几个对象?
1个或2个对象。如果常量池中原来有“abc”,那么只创建一个对象;如果常量池中原来没有字符串“abc”,那么就会创建2个对象。
扩展问题2:
String s ="abc";
String ss ="ab"+"c";
System.out.pringln(s==ss);
输出结果为:true
解析:"ab"+"c"在编译时就被转换为“abc”。
扩展问题3:
String s="abc";
char [] ch={'a','b','c'};
System.out.println(s.equals(ch));
输出为:false
解析:S和ch分别为字符串类型和数组类型,所以输出为false。
5、运算符的优先级
(++,--)>(*,/,%)>(+,-)>(<<,>>)>(&)>( | )> && > ||
public static void main(String[] args){
byte a=5;
int b=5;
int c=a>>2+b>>2;
System.out.println(c);
}
//输出是0
public static void main(String[] args){
int a=10,b=4,c=5,d=9;
System.out.println(++a*b+c*--d);
}
//输出是84
6、强制类型转换时的规则有哪些?
1)当对小于int的数据类型(byte,char,short)进行运算时,首先会把这些类型的变量值强制转为int类型,对int类型的值进行运算,最后得到的值也是int类型的。因此如果把2个short类型的值相加,最后得到的结果是int类型,如果需要得到short类型的结果,就必须显式地运算结果转为short类型。
例:short s1=1;s1=s1+1;
编译出错。正确的写法是short s1=1;s1=(short)(s1+1);
例:short s1=1;s1+=1;
编译通过。
2)基本数据类型和boolean类型是不能相互转换的。
3)char类型的数据转为高级类型时,会转换为对应的ASCII码。
例1:
int i=1;
if(i)
System.out.println(i);
编译出错。基本数据类型和boolean类型是不能相互转换的。
例2:
short i = 128;
System.out.println((byte)i);
i对应的二进制为00000000 10000000,由于byte只占一个字节,在强制转换的时候,从前面开始截掉,因此截掉后的值为二进制的10000000,也就是十进制的-128。
7、数组初始化时需要注意的问题
1)数组被创建后会根据数组存放的数据类型默认初始化为对应的初始值,例如,int类型会初始化为0,对象类型会初始化为null。
2)二维数组中,每行元素个数可以不同。
8、如何在main()方法执行前输出“hello world”?
用静态代码块。静态代码块在类加载的初始化阶段就会被调用。
9、Java程序初始化的顺序(对象实例化的过程)
1)父类的静态变量、弗雷德静态代码块(谁在前,谁先初始化)
2)子类的静态变量、子类的静态代码块(谁在前,谁先初始化)
3)父类的非静态变量、父类的非静态代码块(谁在前,谁先初始化)、父类的构造函数
4)子类的非静态变量、子类的非静态代码块(谁在前,谁先初始化)、子类的构造函数
10、构造函数的特点
1)构造函数必须和类名一样(但和类名一样的不一定是构造方法,普通方法也可以和类名同名),并且不能有返回值,返回值也不能为void。
2)构造函数总是伴随着new操作一起调用,并且不能由程序的编写者调用,只能由系统调用。
3)构造函数不能被继承。
4)子类可以通过super()来显示调用父类的构造函数。
11、Switch能否用string做参数?
在Java7之前,switch只能支持byte、short、char、int或者其对应的包装类以及Enum类型。在Java7中,String支持被加上了。
在使用switch时,需要注意另外一个问题,如果和匹配的case情况中省略了break,那么匹配的case值后的所有情况都会执行,而不管case是否匹配,一直遇到break结束。
int x=2;
switch(x){
case 2:
System.out.println(x);
case 3:
System.out.println(x);
case 4:
System.out.println(x);
break;
default:
System.out.println("dddddd");
}
输出结果为:
2
2
2
相关文章
- 暂无相关文章
用户点评