1.下列符号中可以在 java 程序里表示单行注释的是( )
正确答案: C 你的答案: C (正确)
A.–
B.
C.//
D.
分析:B为Java的块注释;C为单行注释;D为文档注释,并写入javadoc文件;
2.下列表述错误的是?()
正确答案: D 你的答案: D (正确)
int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。
分析:D选项final关键字不能修饰接口和抽象类,因为我们的抽象类和接口是定义功能(即能干什么),不关注实现的细节,它是用来让子类继承和实现的,而final修饰的类是不能被继承的所以它们不能搭配使用。
3. 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()
public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}
正确答案: C 你的答案: C (正确)
System.out.println(a.i);
a.method1();
A.method1();
A.method2();
分析:因为a是A类的一个实例,所以它可以调用普通方法和变量,所以A,B是正确的,通过类名只能调用静态方法和静态变量,所以C是错误的。
4.执行如下程序,输出结果是( )
class Test
{
private int data;
int result = 0;
public void m()
{
result += 2;
data += 2;
System.out.print(result + " " + data);
}
}
class ThreadExample extends Thread
{
private Test mv;
public ThreadExample(Test mv)
{
this.mv = mv;
}
public void run()
{
synchronized(mv)
{
mv.m();
}
}
}
class ThreadTest
{
public static void main(String args[])
{
Test mv = new Test();
Thread t1 = new ThreadExample(mv);
Thread t2 = new ThreadExample(mv);
Thread t3 = new ThreadExample(mv);
t1.start();
t2.start();
t3.start();
}
}
正确答案: C 你的答案: C (正确)
0 22 44 6
2 42 42 4
2 24 46 6
4 44 46 6
分析:Test mv =newTest()声明并初始化,然后通过同步线程依次调用m()方法三次,所以按顺序执行即可,data 和result 每次加2,所以选C。
5. 以下程序段的输出结果为:
public class EqualsMethod
{
public static void main(String[] args)
{
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.print(n1 == n2);
System.out.print(",");
System.out.println(n1 != n2);
}
}
正确答案: B 你的答案: B (正确)
false,false
false,true
true,false
true,true
分析:因为new 了2个Integer对象,分配了2个内存,==当它是基本类型比较时判断的是值是否相等;而当时引用类型时,比较的是地址和内容是否都相同,也就是判断是否为同一个对象。
- 下列语句中,正确的是
正确答案: B 你的答案: B (正确)
float x=0.0
boolean b=3>5
、char c=“A”
double =3.14
分析:Java中小数默认是double类型,所以float型后面数值要加f;char 是字符,Java中为字符时用单引号引起来,D选项没有变量名哦。
7.下面有关JVM内存,说法错误的是?
正确答案: C 你的答案: D (错误)
程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
分析:暂时不会。
8.ResultSet中记录行的第一列索引为?
正确答案: C 你的答案: C (正确)
-1
0
1
以上都不是
分析:ResultSet数组是从1开始遍历。ResultSet是jsp,用来接收获取的数据库信息,查询时也是从第1列开始。
9.关于 java 的异常处理机制的叙述哪些正确?
正确答案: A B 你的答案: A B (正确)
不论程序是否发生错误及捕捉到异常情况,都会执行finally部分
当try区段的程序发生异常时,才会执行catch区段的程序
catch部分捕捉到异常情况时,才会执行finally部分
其它选项都不正确
分析:在异常内容中,try{}catch(){}finally{};finally块是无论如何都会去执行的,当try块中抛出异常时才会执行catch块内容,对于catch的异常,越小的子类异常要在前面的catch,因为父类在前它会直接捕获,子类就永远不可能捕获到。
还有我见过一个题挺好的,如try{throw 10;}catch(Exception e){}finally{};它会怎么执行呢;是执行完没有报错,还是编译出错,还是抛出10;答案是编译出错,为什么呢?我们要知道throw抛出的是异常对象,而int 是基本数据类型,不是对象,所以会编译出错。
10.以下程序执行后,错误的结果是()
public class Test {
private String name = “abc”;
public static void main(String[] args) {
Test test = new Test();
Test testB = new Test();
String result = test.equals(testB) + “,”;
result += test.name.equals(testB.name) + “,”;
result += test.name == testB.name;
System.out.println(result);
}
}
正确答案: A B C 你的答案: A B D (错误)
true,true,true
true,false,false
false,true,false
false,true,true
分析:还是一样test和testB是new出来的两个对象,分配了两个内存空间,Test类没有重写equals()方法,所以用的是object的equals()方法,它使用==比较的,也就是比较两个对象的地址,所以为false;
test.name.equals(testB.name) ,它俩都是Test的实例,所以调用的是name属性,test调用name时是第一次,所以常量池中没有“a,b,c”这个字符串,所以会创建String对象,拿到String对象的引用,而当testB再调用name属性时,发现常量池中已经有了这个String对象,所以它会拿到String对象的引用,所以结果为true;
test.name == testB.name,比较的是对象的地址;因为常量池有,所以两个实例的name属性指向的是同一个String对象,也就是同一个内存,所以结果为true。



