1.`下列代码中的错误原因是()
(1) public class Test
(2) {
(3) public static void main(String [] args)
(4) {
(5) int i;
(6) i+=1;
(7) }
(8) }
`
A.非法的表达式 i+=1
B.找不到符号i
C.类不应为public
D.尚未初始化变量i
2.下面有关JVM内存,说法错误的是?
A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
B.虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
C.方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
3.下面有关servlet和cgi的描述,说法错误的是?
A.servlet处于服务器进程中,它通过多线程方式运行其service方法
B.CGI对每个请求都产生新的进程,服务完成后就销毁
C.servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等
D.cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi
4.下面哪些类实现或继承了 Collection 接口?
A.HashMap
B.ArrayList
C.Vector
D.Iterator
5.实现或继承了Collection接口的是()
A.Map
B.List
C.Vector
D.Iterator
E.Set
6.以下哪项不是java基础类型()
A.int
B.boolean
C.String
D.float
7.下列叙述中,错误的是( )
A.File类能够存储文件属性
B.File类能够读写文件
C.File类能够建立文件
D.File类能够获取文件目录信息
8.已知x >= y and y >= z 为真,那么x > z or y = z 值为
A.真
B.假
C.无法确定
D.x y z同为正数时为真
9.已知String a=“a”,String b=“b”,String c=a+b,String d=new String(“ab”) 以下操作结果为true的是
A.(a+b).equals©
B.a+b==c
C.c == d
D,c.equals(d)
10.
如下哪些是 java 中有效的关键字()
A.native
B.NULL
C.false
D.this
(1)D
局部变量没有默认值
(2)C
方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域。 在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
(3)选择D,servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
(4)正确答案: B C
Java集合框架主要由Collection和Map两个根接口及其子接口、实现类组成。 collection 的子接口包括List,set,queue。而Map包括三个实现类HashMap,HashTable,LinkeHashMap
(5)答案:BCE
A,Map接口未实现Collection接口
B,List接口的定义为
public interface Listextends Collection
C,Vector定义为
public class Vectorextends AbstractListimplements List, RandomAccess, Cloneable, Serializable
Vector实现了List接口自然实现了Collection接口
D,Iterator接口未实现Collection接口
E,
public interface Setextends Collection
Set接口继承自Collection接口
(6)Java基本数据类型共有八大类,这八大数据类型又可分为四小类,分别是整数类型(byte/short/int/long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean),其中并不包括String。
(7)B
(8)答案应该是C
条件可以简单分析为数学不等式 x>=y>=z,那么x>z不一定为true
当x>z为true,后面的条件忽略,结果为真;
当x == z,x>z为fslae,继续判断后一个条件
如果z==0,则y=z为false,结果为假;
如果z!=0,则y=z为true,结果为真;
所以,最后的结果是不确定的。
(9)A
1.== 和 equals():
(1)“==” 用于比较基本数据类型时比较的是值,用于比较引用类型时比较的是引用指向的地址。
(2)Object 中的equals() 与 “==” 的作用相同,但String类重写了equals()方法,比较的是对象中的内容。
public boolean equals(Object anObject) { if (this == anObject) {
return true; } else { if (anObject instanceof String) {
String aString = (String)anObject;
if (this.coder() == aString.coder()) { return this.isLatin1() ? StringLatin1.equals(this.value, aString.value) : StringUTF16.equals(this.value, aString.value);
}
} return false; }
}
2.String对象的两种创建方式:
(1)第一种方式: String str1 = "aaa"; 是在常量池中获取对象("aaa" 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象,如果常量池中已经存在该字符串对象则直接引用)
(2)第二种方式: String str2 = new String("aaa") ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 "aaa" 象)。
System.out.println(str1==str2);//false
3.String类型的常量池比较特殊。它的主要使用方法有两种:
(1)直接使用双引号声明出来的String对象会直接存储在常量池中。
(2)如果不是用双引号声明的String对象,可以使用 String 提供的 intern 方法。 String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。
String s1 = new String("AAA");
String s2 = s1.intern();
String s3 = "AAA";
System.out.println(s2);//AAA
System.out.println(s1 == s2);//false,因为一个是堆内存中的String对象一个是常量池中的String对象,
System.out.println(s2 == s3);//true, s1,s2指向常量池中的”AAA“
4字符串拼接:
String a = "a";
String b = "b";
String str1 = "a" + "b";//常量池中的对象
String str2 = a + b; //在堆上创建的新的对象
String str3 = "ab";//常量池中的对象
System.out.println(str1 == str2);//false
System.out.println(str1 == str3);//true
System.out.println(str2 == str3);//false
(10)如下哪些是 java 中有效的关键字()
A.native
B.NULL
C.false
D.this