java面试题集4
来源:互联网 发布:java怎么编译 编辑:程序博客网 时间:2024/05/01 05:35
1、以下程序的输出结果是?
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str, char ch[])
{
str = "test ok";
ch[0] = 'g';
}
}
正确答案: B
解释:见http://blog.csdn.net/u013055396/article/details/48391503
2、关于JAVA的垃圾回收机制,下面哪些结论是正确?
程序可以任意指定释放内存的时间
JAVA程序不能依赖于垃圾回收的时间或者顺序
程序可明确地标识某个局部变量的引用不再被使用
程序可以显式地立即释放对象占有的内存
正确答案: B
解释:GC是完全自动的,不能确定具体的回收时间
另外C中,局部变量是放在栈中,而GC是用于堆,两者没有关联
3、 下面有关maven和ant的描述,描述错误的是?
Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码
Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里
maven和ant都有“生命周期”的概念,当你输入一个命令后,maven或者ant会执行一系列的有序的步骤,直到到达你指定的生命周期
Ant构建文件默认命名为build.xml,Maven默认构建文件为pom.xml
正确答案: C
解释:Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。
Ant特点 ›
没有一个约定的目录结构 ›必须明确让ant做什么,什么时候做,然后编译,打包 ›没有生命周期,必须定义目标及其实现的任务序列 ›没有集成依赖管理
Maven特点
›拥有约定,知道你的代码在哪里,放到哪里去 ›拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 ›只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ›拥有依赖管理,仓库管理
4、 如下代码,执行test()函数后,屏幕打印结果为()
public class Test2
{
public void add(Byte b)
{
b = b++;
}
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + " ");
add(b);
System.out.print(b + "");
}
}
正确答案: D
解释:public void add(Byte b){ b=b++; } 这里涉及java的自动装包/自动拆包(AutoBoxing/UnBoxing) Byte的首字母为大写,是类,看似是引用传递,但是在add函数内实现++操作,会自动拆包成byte值传递类型,所以add函数还是不能实现自增功能。也就是说add函数只是个摆设,没有任何作用。 Byte类型值大小为-128~127之间。 add(++a);这里++a会越界,a的值变为-128 add(b); 前面说了,add不起任何作用,b还是127
5、 关于spring说法错误的是()
spring是一个轻量级JAVA EE的框架集合
spring是“依赖注入”模式的实现
使用spring可以实现声明事务
spring提供了AOP方式的日志系统
正确答案: D
解释:Spring并没有提供日志系统,我们需要使用AOP(面向方面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统。
6、如何放掉一个指定占据的内存空间?()
调用free()方法
代用system.gc()方法
赋值给该项对象的引用为null
程序员无法明确强制垃圾回收器运行
正确答案: D
解释:A,java属于自动内存回收,不能调用free是否内存
B,调用gc()垃圾回收器也只能回收没有任何引用指向的对象【其实这个gc()函数的作用只是提醒虚拟机:程序员希望进行一次垃圾回收。但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机有不同的对策。】
C,赋值该对象引用为null,没有被引用的对象会被垃圾回收器当做垃圾进行回收,但是具体什么时候回收是程序员无法控制的
D,在《java虚拟机》一书中明确讲了,释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。
7、以下关于JAVA语言异常处理描述正确的有?
throw关键字可以在方法上声明该方法要抛出的异常。
throws用于抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
finally语句块是不管有没有出现异常都要执行的内容。
在try块中不可以抛出异常
正确答案: C D
解释:Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
throw用于抛出异常对象。
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
cacth用于捕获从try中抛出的异常并作出处理。
finally语句块是不管有没有出现异常都要执行的内容。
8、观察以下代码:
class Car extends Vehicle
{
public static void main (String[] args)
{
new Car(). run();
}
private final void run()
{
System. out. println ("Car");
}
}
class Vehicle
{
private final void run()
{
System. out. println("Vehicle");
}
}
正确答案: A
解释:首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。
9、What will be printed when you execute the following code?
class C {
C() {
System.out.print("C");
}
}
class A {
C c = new C();
A() {
this("A");
System.out.print("A");
}
A(String s) {
System.out.print(s);
}
}
class Test extends A {
Test() {
super("B");
System.out.print("B");
}
public static void main(String[] args) {
new Test();
}
}
BB
CBB
BAB
None of the above
正确答案: B
解释:初始化过程是这样的:
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;
(1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C
(2)super("B"); 表示调用父类的构造方法,不调用父类的无参构造函数,输出B
(3) System.out.print("B");
所以输出CBB
10、Java数据库连接库JDBC用到哪种设计模式?
生成器
桥接模式
抽象工厂
单例模式
正确答案: B
解释:桥接模式。JDBC提供两套接口,一个面向数据库厂商,一个面向JDBC使用者。
11、true、false、null、sizeof、goto、synchronized 哪些是Java关键字?
true
false
null
sizeof
goto
synchronized
正确答案: E F
解释:java中的关键字有abstract、 assert、 boolean、 break、byte、case、catch、char、 class const(保留关键字)、continue、default、do、 double、else、enum、extends、final、finally、 folat、for、goto(保留关键字)、if、implements、 import、instanceof、int、interface、long、native、new、 package、private、protected、public、return、short、static、strictfp、supper、switch、sychronized、this、throw、throws、transient、try、void、volatile和while
12、java中,StringBuilder和StringBuffer的区别,下面说法错误的是?
StringBuffer是线程安全的
StringBuilder是非线程安全的
StringBuffer对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。
效率比较String<StringBuffer<StringBuilder,但是在 String S1 = “This is only a” + “ simple” + “ test”时,String效率最高。
正确答案: C
解释:String对String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,而不是StringBuffer;StringBuffer每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
13、 Consider the following code:
String s=null;
Which code fragments cause an object of type NullPointerException to be thrown?
if((s!=null)&(s.length()>0))
if((s!=null)&&(s.length()>0))
if((s==null)|(s.length()==0))
if(s==null)||(s.length()==0))
正确答案: A C
解释:A,单个与操作的符号& 用在整数上是按位与,用在布尔型变量上跟&&功能类似,但是区别是无论前面是否为真,后面必定执行,因此抛出异常
B,与操作,前半部分判断为假,后面不再执行
C,这里跟 & 和&& 的区别类似,后面必定执行,因此抛出异常
D,或语句,前面为真,整个结果必定为真,后面不执行
14、代码片段:
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
关于上面代码片段叙述正确的是()
正确答案: C
解释:表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。
①所有的byte,short,char型的值将被提升为int型;
②如果有一个操作数是long型,计算结果是long型;
③如果有一个操作数是float型,计算结果是float型;
④如果有一个操作数是double型,计算结果是double型;
而声明为final的变量会被JVM优化,第6行相当于 b6 = 10
- java面试题集4
- Java面试题集
- Java面试题集
- JAVA面试题集
- JAVA面试题集
- JAVA面试题集
- java面试题集
- Java面试题集
- java面试题集
- JAVA面试题集
- JAVA面试题集
- JAVA面试题集
- JAVA面试题集
- JAVA面试题集
- Java面试题集
- Java面试题集
- JAVA面试题集
- JAVA面试题集
- IO流的学习笔记(一)
- Minimum Path Sum
- nyoj 20 【吝啬的国度】 【DFS】
- ios-post请求
- C++虚函数表
- java面试题集4
- MySQL安装失败的解决
- 02关于正则表达式(第二则)常用正则表达式
- 《第一次机房收费之优化一》
- trace: Add user-space event tracing/injection
- Linux线程
- 三层及winform前台页面 XmlHelper.cs Sqlhelper.cs AbstractSqlHelper.cs Com.cs 分页控件的后台代码
- 单链表(二)——链表的插入
- I/O与异常