您的位置:首页 > 职场人生

java面试题----就当作是复习下基础知识啦

2008-10-12 14:47 525 查看
1、面向对象的特征有哪些方面
(1)抽象:
举个例子吧,“人“类有共同的属性,性别,姓名,出生日期,身高,体重......也有共同的动作,睡觉,吃饭,工作,娱乐......
(2)继承:
这个不用说了吧。典型的父子关系。
(3)封装:
这个也不用说了,包,public,private,protected......
(4) 多态性:
多态性是指允许不同类的对象对同一消息作出响应。《java编程思想》中有个例子,图形类(Shape)有圆形,正方形,三角形的例子。

2、String是最基本的数据类型吗?
基本数据类型包括int、short、long、float、double、byte、char和boolean。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。

3、int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

原始类型 封装类
booleanBoolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

4、String 和StringBuffer的区别
JAVA 平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

5、final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

6、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

7、是否可以继承String类?
String类是final类故不可以继承。

8、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

9、char型变量中能不能存贮一个中文汉字?为什么?
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的。

10、什么情况下调用doGet()和doPost()?
Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

11、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以。必须只有一个类名与文件名相同。

12、应用服务器与web服务器的区别?
应用服务器:Weblogic、Tomcat、Jboss
web服务器:IIS、Apache(web服务器是网站、邮件系统、ftp等功能用的)

13、Java有没有goto?
java中的保留字,现在没有在java中使用。

14、说出数据连接池的工作机制是什么?
J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

15、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

16、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。

17、描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。ClassLoader类是一个抽象类,所以必须通过其子类来实现类的加载。关键方法是loadClass()。

JVM需要加载一个类的字节码文件时,先通过类名检索内存的HashTable,如果找到,直接加载进来,如果不存在,通过类加载器将该类的字节码文件加载进内存,并写入HashTable,key值为类名。

不同的类加载器装载不同的类,例如

JVM内核中的bootstrap类装载器装载rt.jar包中的类

ExtClassLoader类装载器装载ext.jar包中的类

查看某个类通过哪个类加载器加载的方法:(例如查看sun.net.spi.nameservice.dns.DNSNameService类的类加载器)

ClassLoader c1 = sun.net.spi.nameservice.dns.DNSNameService.class.GetClassLoader();

System.out.println(c1.getClass().getName());

需要注意的是,上述方法不可以取得rt.jar包的类加载器bootstrap,因为bootstrap不是一个JAVA类,而是内嵌在JVM的组件。

如果使用ClassLoader c1 = XXX.class.GetClassLoader();获得类的加载器,会报错,因为 XXX.class得到NULL

18、java异常处理的几个关键字

throw、throws、try、catch、finally

19、Java中类的类型

使用3种关键字来修饰一个类:public、abstract、final

由此可以定义6种类的类型:

(1)public

(2)abstract

(3)final

(4)不使用任何关键字的省缺类型

(5)public abstract

(6)public final

20、is-a、has-a、is-like-a的关系

is-a:组合,即一个类的实例是另外一个类的成员

has-a:继承,但是不添加新的方法

is-like-a:继承,但是添加新的方法

一般先考虑采用组合,而不是继承。

21、向下转型(容器)

对象装入容器时,需要向上转型为Object;从容器中取出时,需要向下转型为具体的对象类型。

22、Java中“引用”与“对象”

引用:遥控器

对象:电视机

使用引用操作对象,引用也可以脱离对象而存在。

23、Java的数据存储:

“堆”:对象类型的数据,即使用“new”关键字创建的对象

“堆栈”:对象引用,基本数据类型,效率低,指针的上下移动

24 、Java中变量的作用域

Java不允许相同的范围内定义相同的变量(这与C/C++不同)

25 、Java中类的组成

数据成员、成员函数、静态块、非静态块

26 、Java基本数据类型的初始化

(1)对于基本数据类型作为类的数据成员,Java才保证在编译时进行初始化。

需要注意的是,final类型。

(2)对于基本数据类型作为方法的局部变量,Java不保证在编译时进行初始化。

27 、Java中return关键字的作用

return;------------退出函数体

return xxx;-------退出函数体,并返回函数值

28 、Java中静态数据成员和静态成员方法

静态数据成员:类数据

静态成员方法:类方法

(1)相同的静态数据成员,共享同一段内存

(2)相同的静态成员方法,共享同一段内存

(3)无须实例化该类,直接通过类名调用

(4)静态成员方法中,只能调用静态成员(数据和方法)

29、Java的main方法

(1)public static void main(String[] args)

(2)所在的类名必须与所在的.java文件名相同

(3)main与所在的类没有任何关系,不属于该类的成员方法

30、Java的注释风格

(1)//

(2)/*....*/

/*....

....

....

*/

31、Java的赋值操作符=

对于对象类型的数据来说(A=B),“=”的意思是,将B的引用赋值给A,即A和B都指向B所指向的对象。

32、Java的==,<>,equals方法

(1)对于基本数据类型,可以使用==,<>来比较内容的相同与否

(2)对于对象类型的数据,可以使用==,<>,equals方法。但需要注意的是==,<>都是比较对象的引用,equals方法在没有被重写之前也是比较对象的引用,如果需要使用equals方法来比较对象的内容是否相等,需要重写equal方法。但是jdk中提供的String,Boolean,Integer等类已经为我们重写好了equal方法,可以直接拿来使用比较内容。

33、Java的=和==

34、Java中没有sizeof

C/C++中,之所以是用sizeof,是因为不同的机器对于相同的数据类型,提供了不同的大小,所以在移植上为了安全起见,需要取得当前数据类型的大小。但是Java中没有sizeof,因为不同的机器对于相同的数据类型,在jvm中都被分配了相同的大小。这也是java可移植性的实现优势之一。

35、Java中的float,double转化为整数的处理

是将小数部分砍掉,而不是进行四舍五入

36、Java中的this关键字

(1)类的数据成员int a,类的成员方法f(int a) {this.a = a}。使用“this”关键字区分f()中的数据成员和参数。

(2)在构造方法中调用其他的构造方法:

class A {

A() {

...

}

A(int a) {

this.A();

}

}

(3)class A {

function1() {

...

}

}

class B {

function() {

A a1 = new A();

A a2 = new A();

a1.function1();

a2.function1();

}

}

编译器在调用a1.function1();时,把this(即a1)作为隐含的参数传入funciton1()

编译器在调用a2.function1();时,把this(即a2)作为隐含的参数传入funciton1()

37、数据成员的初始化顺序

静态数据成员>非静态数据成员>类的构造方法

38、Java的数组

(1)数组只有一个属性:length

(2)下标从0开始,最大为length-1

(3)数组的赋值:只是赋值引用,两个数组引用共同指向同一个数组对象

(4)数组的定义与初始化:必须在同一行。不能拆成2行,一行定义,一行初始化是不被允许的

39、Java的编译单元

一个.java文件称为一个java的编译单元。如果该编译单元中有public类,那么这个.java文件的文件名,必须与这个public的类名一致(包括大小写)。输出文件为多个.class文件。需要注意的是,一个编译单元中最多只有一个public类,也可以没有public类。

如果编译单元中没有public类,那么我们可以随意命名这个.java文件。

40、Java的package语句

将该java文件定义在该包内
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: