Java经典面试题大全 带答案
韩先楚-
Java
经典面试题
带答案
一、单项选择题
1
.
Jav
a
是从()语言改进重新设计。
A
.
Ada
B
.
C++
C
.
Pasacal
D
.
BASIC
答案:
B
2
.下列语句哪一个正确()
A
.
Jav
a
程序经编译后会产生
machine code
B
.
p>
Java
程序经编译后会产生
byte
code
C
.
Java
程序经编译后会产生
D
LL
D
.以上都不正确
答案:
B
3
.下列说法正确的有()
A
.
p>
class
中的
constructor<
/p>
不可省略
B
.
con
structor
必须与
class
同
名,但方法不能与
class
同名
C
.
p>
constructor
在一个对象被
ne
w
时执行
D
.一个
class
< br>只能定义一个
constructor
答案:
C
4
.提供
J
ava
存取数据库能力的包是()
A
.
B
.
C
.
D
.
答案:
A
5
.下列运算符合法的是()
A
.
&&
B
.
<>
C
.
if
D
.
:=
答案:
A
6
.执行如下程序代码
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
后,
C
的值
是()
A
.
0
B
.
1
C
.
-1
D
.死循环
答案:
C
7
.下列哪一种叙述是正确的()
A
.
p>
abstract
修饰符可修饰字段、方法和类
B
.抽象方法的
body
部分必须用一对大括号
< br>{}
包住
C
.声明抽象方法,大括号可有可无
D
.声明抽象方法不可写出大括号
答案:
D
8
.下列语句正确的是()
A
.形式
参数可被视为
localvariable
B
.形式参数可被字段修饰符修饰
C
.形式
参数为方法被调用时,真正被传递的参数
D
.形式参数不可以是对象
答案:
A
9
.下列哪种说法是正确的()
A
.实例
方法可直接调用超类的实例方法
B
.实例方法可直接调用超类的类方法
C
.实例
方法可直接调用其他类的实例方法
D
.实例方法可直接调用本类的类方法
答案:
D
二、多项选择题
1
.
Jav
a
程序的种类有()
A
.类(
C
lass
)
B
.
Applet
C
.
Application
D
.
Servlet
2
.下列说法正确的有()
A
.环境
变量可在编译
sourcecode
时指定
B
.在编译程序时,所能指定的环境变量不包括
class path
C
.
p>
javac
一次可同时编译数个
Java<
/p>
源文件
<
/p>
D
.
能指定编译
结果要置于哪个目录(
directory
)
< br>
答案:
BCD
3
.下列标识符不合法的有()
A
.
new
B
.
$$Usdollars
C
.
1234
D
.
答案:
ACD
4
.下列说法错误的有()
A
.数组是一种对象
B
.数组属于一种原生类
C
.
p>
intnumber=[]={31,23,33,43,35,63}
D
.数组的大小可以任意改变
答案:
BCD
5
.不能用来修饰
< br>interface
的有()
A
.
private
B
.
public
C
.
protected
D
.
static
答案:
ACD
6
.下列正确的有()
A
.
call
byvalue
不会改变实际参数的数值
B
.
call by
reference
能改变实际参数的参考地址
C
.
call
byreference
不能改变实际参数的参考地址
D
.
call
byreference
能改变实际参数的内容
答案:
ACD
7
.下列说法错误的有()
A
.在类
方法中可用
this
来调用本类的类方法
B
.
在类方法中调用本类的类方法时可直接调用
C
.在类方法中只能调用本类中的类
方法
D
.在类方法中绝对不能调用实例方法
答案:
ACD
8
.下列说法错误的有()
A
.
p>
Java
面向对象语言容许单独的过程与函数存在
< br>
B
.
Jav
a
面向对象语言容许单独的方法存在
C
.
Jav
a
语言中的方法属于类中的成员(
member
)
D
.
Java
语言中的方法必定隶
属于某一类(对象)
,调用方法与过程或函数相同
答案:
ABC
9
.下列说法错误的有()
A
.能被
成功运行的
javaclass
文件必须有
main()
方法
B
.
J2SDK
就是
Java API
C
.
p>
可利用
jar
选项
运行
.jar
文件
D
.能被
Appletviewer
成功运行的
javaclass
文件必须有
main()
< br>方法
答案:
BCD
三、判断题
1
.
Jav
a
程序中的起始类名称必须与存放该类的文件名相同。
()
p>
答案:正确
2
.
Uni
code
是用
16
位来表示一个字的。
()
答案:正确
3
.原生类中的数据类型均可任意转
换。
()
答案:错误
1.
分别写出
BOOL,int,float,
指针类型的变量
a
与
“
零
”
的比较语句。
答案:
BOOL : if ( !a ) orif(a)
int : if ( a == 0)
float : const
EXPRESSION EXP = 0.000001
if ( a < EXP && a >-EXP)
pointer : if ( a !=NULL) or
if(a == NULL)
2
.
请说出
const
与
#define
相比,有何优点?
答案:
1
)
const
常量有数据类型,而宏常量没有数据类型。编译器可
以对前者进行类
型安全检查。
而对后者只进行字符替换,
没有类型安全检查,
并且在字符替换可能会产生意
料不到的错误。
2
)
有些集成化的调试工具可以对
const
常量进行调试,但是不能对宏常量进行调试。
3.
简述数组与指针的区别?
数组要么在静态存储区被创建(如
全局数组)
,要么在栈上被创建。指针可以随时指向
任意类型的
内存块。
(1)
修改内容上的差别
char
a[]= “hello”;
a[0] = „X‟;
char *p =
“world”; //
注意
p
指向常量字符串
p[0] = „X‟;//
编译器不能发现该错误,运行时错误
(2)
用运算符
sizeof
可以计算出数
组的容量
(字节数)
。
sizeof(
p),p
为指针得到的是一个
指针变量的字节数,而不是
p
所指的内存容量。
C++/C
语言没有办法知道指针所指的内存
容量,
除非在申
请内存时记住它。
注意当数组作为函数的参数进行传递时,
该数
组自动退化
为同类型的指针。
char a[] =
char *p = a;
cout<< sizeof(a) << endl;
// 12
字节
cout<< sizeof(p) << endl;
// 4
字节
计算数组和指针的内存容量
voidFunc(char
a[100])
{
cout<<
sizeof(a) << endl; // 4
字节而不是
100
字节
}
<
/p>
4.
类成员函数的重载、覆盖和隐藏区别?
答案:
a.
成员函数被重载的特征:
(
1
p>
)相同的范围(在同一个类中)
;
(
2
p>
)函数名字相同;
(
3
)参数
不同;
(
4
)
virtual
关键字可有可无。
b.
覆盖是指派生类函数覆盖基类函
数,特征是:
< br>(
1
)不同的范围(分别位于派生类与基类)
;
(
2
)函数名字相同;
(
3
p>
)参数相同;
(
4
)基类函数必须有
virtual
关键字。
c.“
隐藏
”
是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(
1
p>
)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无
virtual
关
键字,基类的函数将被隐藏(注意别与重
载混淆)
。
(
2
)
p>
如果派生类的函数与基类的函数同名,
并且参数也相同,
但是基类函数没有
virtual
关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
5.
There
are
two
int
variables:
a
and
b,
don‟t
use
“if”,
“?
:”,
“switch”orother
judgement
statements, find
out the biggest one of the two numbers.