Java高级面试题
- 格式:doc
- 大小:116.00 KB
- 文档页数:55
对象声明与初始化
静态成员与非静态成员(必须了解的)
静态上下文中只能访问静态成员
考点说明
static 函数只能访问 static 变量或 static 函数。
考题样例
public class TT
{
private String str1 = "Hello ";
TT()
{
str1 += "china";
}
static
{
str1 += "world";
}
public static void main(String args[])
{
System.out.println(str1);
}
}
关于以上代码,下面说法正确的是:()
A. 输出Hello china
B. 输出Hello world
C. 有编译错误
D. world Hello china
正确答案:C
数据默认值(必须了解的)
数字类型成员的缺省值是0,布尔型为false,对象引用唯一的缺省值类型是null 考点说明
各种类型的缺省值:
boolean: false
byte: 0
char: '\u0000'
short: 0
int: 0
float:0.0
long: 0
double:0.0
Reference: null
考题样例
public class TT
{
private double d;
private String str;
private boolean bool;
public static void main(String args[])
{
TT tt = new TT();
System.out.println(tt.d + tt.str + tt.bool);
}
}
关于以上代码,说法正确的是:()
A. 运行时抛异常
B. 输出 "0.0nullfalse"
C. 输出 "\u00000.0null"
D. 输出 "00.0null"
正确答案:B
局部变量没有默认值
考点说明
局部变量在使用之前必须显式赋值才能使用,否则将会有编译错误。由于局部变量使用的是栈内存,由于某些原因(主要是效率)虚拟机不能为栈上的变量设置默认值,所以局部变量需要显式赋初始值。
注:除局部变量以外的所有变量都是使用堆内存,由于在各种现代的机器上都可以很方便、快速地使大块内存初始化为相同的数值,比如可以将它初始化为 0,这个特性使得堆内存都可以由虚拟机赋初始值。由于在调用函数时,栈需要频繁地做出栈、入栈操作,若虚拟机要为各函数中的局部变量赋初始值的话会极大地影响效率,所以局部变量不可以从虚拟机得到这种好处。
考题样例
public static void main(String args[])
{
String str = "String";
int i;
System.out.println(str+i);
}
以上程序,下列说法正确的是:()
A. 编译错误
B. 运行时抛异常
C. 输出”String0”
D. 输出”String”
正确答案:A
数组(必须了解的)
刚构造的数组中的元素总是设为默认值
考点说明
Java 数组总是存在被设定的默认值。各种数据类型的数组的默认值:boolean: false
byte: 0
char: '\u0000'
short: 0
int: 0
float:0.0
long: 0
double:0.0
Reference: null
考题样例
public class Test
{
public static void main(String args[])
{
final int len = 5;
int array[] =new int[len];
for(int i = 0; i < len - 2; i++)
{
array[i] = i;
}
for(int i = 0; i < array.length; i++)
{
System.out.print(array[i] + ",");
}
}
}
以上代码下列说法正确的是:()
A. 输出 "0,1,2,0,0,"
B. 输出 "0,1,2,"
C. 运行时抛异常
正确答案:A
声明一个数组变量仅产生了一个数组引用(也可叫指针),但未分配数组的存储空间,一个数组的大小将在数组使用new 关键字真正创建时被给定
考点说明
数组变量本身仅仅是一个引用,数组的内存要用 new 运算符来分配。定义数组变量的时候不能(也不必)指定数组大小,数组的大小是在分配数组内存时才确定的。以下是定义数组的几种方法:
int array1[] = new int[3]; //声明一个大小为3的数组
int array2[] = new int[]{1, 2, 3}; //声明数组同时分配内存