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文件定义在该包内
(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文件定义在该包内
相关文章推荐
- Java基础知识复习(构造函数、this关键字)
- 复习笔记-java基础知识
- Java基础知识复习笔记(一)
- JAVA基础知识复习3
- java基础知识面试题(1-40)
- Java基础知识复习(对象、变量)
- java基础知识记录--基本语法 (摘自张孝祥整理java面试题)
- Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)
- Java基础基础知识复习(输入输出流)-01
- JAVA面试题、基础知识
- 黑马程序员—java基础复习—基础知识
- Java复习基础知识杂记(持续更新中……)
- Java基础知识强化81:Math类random()方法之获取任意范围的随机数案例(面试题)
- Java 面试题基础知识集锦
- Java基础知识复习(封装详解)
- JAVA基础知识面试题
- java基础知识精华总结 java面试题 深圳酷琪 kuuqii.com 电脑配件软件 硬件一体化采购平台
- java 基础知识回顾(便于复习)
- java基础知识记录--软件工程与设计模式(摘自张孝祥整理java面试题)
- 黑马程序员——java复习总结——Java基础知识