java试题复盘——11月25日
上:
11、下列表述错误的是?(D)
A、int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
B、在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
C、封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
D、final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。
解析:
16、默认RMI采用的是什么通信协议? C
A、HTTP
B、UDP/IP
C、TCP/IP
D、Multicast
解析:
17、Given:
1 2 3 4 5 6 7 8 9 |
//point X public class Foo { public static void main(String[] args) throws Exception {
PrintWriter out = new PrintWriter( new java.io.OutputStreamWriter(System.out), true); out.printIn(“Hello”); } } |
Which statement at PointX on line I allows this code
to compile and run? A
A、import java.io.PrintWriter;
B、include java.io.PrintWriter;
C、import java.io.OutputStreamWriter;
D、include java.io.OutputStreamWriter;
E、no statement is needed.
18、 对于abstract声明的类,下面说法正确的是 E
A、可以实例化
B、不可以被继承
C、子类为abstract
D、只能被继承
E、可以被抽象类继承
解析:
解析:
服务器端,首先是服务器初始化Socket,然后是与端口进行绑定(blind()),端口创建ServerSocket进行监听(listen()),然后调用阻塞(accept()),等待客户端连接。与客户端发生连接后,会进行相关的读写操作(read(),write()),最后调用close()关闭连接。
21、类Parent和Child定义如下:
1 .class Parent{ 2. public float aFun(float a, float b) { } 3 .} 4 .class Child extends Parent{ 5 . 6 .} |
将以下哪种方法插入行5是不合法的。( A )
A、float aFun(float a, float b){ }
B、public int aFun(int a, int b) { }
C、public float aFun(float p, float q){ }
D、private int aFun(int a, int b){ }
解析:
重写原则(两同两小一大):
1、两同:方法名相同,形参列表相同。
2、两小:子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常更小或相等。
3、一大:子类方法的访问权限应比父类方法的访问权限更大或相等。
4、尤其指出:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。
A选项是重写,但是默认访问修饰符比父类小,插入第五行编辑器会报错。(默认包访问权限 > public)
B、D不是重写。因为形参列表和返回值类型不同,不满足“两同两小”。所以写在第五行以普通方法对待,插入第五行没有错误。
C选项满足重写的各项条件,是正确的重写,所以插入第五行没有错误。
22、关于匿名内部类叙述正确的是? (B)
A、匿名内部类可以继承一个基类,不可以实现一个接口
B、匿名内部类不可以定义构造器
C、匿名内部类不能用于形参
D、以上说法都不正确
解析:
- 使用匿名内部类时,必须继承一个类或实现一个接口
- 匿名内部类由于没有名字,因此不能定义构造函数
- 匿名内部类中不能含有静态成员变量和静态方法
25、下列关于JAVA多线程的叙述正确的是(BC)(多选)
A、 调用start()方法和run()都可以启动一个线程
B、 CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程
C、 Callable类的call()方法可以返回值和抛出异常
D、 新建的线程调用start()方法就能立即进行运行状态
解析:
A. start()方法来启动线程,真正实现了多线程运行,调用了run()方法;run()方法当作普通方法的方式调用。
27、
关于下面一段代码,以下说法正确的是: (ACD)(多选)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { private synchronized void a() { } private void b() { synchronized (this) { } } private synchronized static void c() { } private void d() { synchronized (Test.class) { } } } |
A、 同一个对象,分别调用方法a和b,锁住的是同一个对象
B、 同一个对象,分别调用方法a和c,锁住的是同一个对象
C、 同一个对象,分别调用方法b和c,锁住的不是同一个对象
D、 同一个对象,分别调用方法a、b、c,锁住的不是同一个对象
解析:同步普通方法锁的是this也就是当前对象,同步静态方法锁的是类对象,也就是Class对象
29、局部内部类可以用哪些修饰符修饰?(CD)(多选)
A、 public
B、 private
C、 abstract
D、 final
34、ArrayList和LinkList的描述,下面说法错误的是? D
A、 LinkedeList和ArrayList都实现了List接口
B、 ArrayList是可改变大小的数组,而LinkedList是双向链接串列
C、 LinkedList不支持高效的随机元素访问
D、 在LinkedList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在ArrayList的中间插入或删除一个元素的开销是固定的
解析:
D的说法反了...
Arraylist的内存结构是数组,当超出数组大小时创建一个新的数组,吧原数组中元素拷贝过去。其本质是顺序存储的线性表,插入和删除操作会引发后续元素移动,效率低,但是随机访问效率高
37、下面程序的输出是:(D)
1 2 3 4 5 |
String x="fmn"; x.toUpperCase(); String y=x.replace('f','F'); y=y+"wxy"; System.out.println(y); |
A、 FmNwxy
B、 fmnwxy
C、 wxyfmn
D、 Fmnwxy
解析:
String x="fmn"; “fmn”是在常量池里的不可变对象。
39、以下程序的运行结果是:( C )
1 2 3 4 5 6 7 8 9 10 |
TreeSet<Integer> set = new TreeSet<Integer>(); TreeSet<Integer> subSet = new TreeSet<Integer>(); for(int i=606;i<613;i++){ if(i%2==0){ set.add(i); } } subSet = (TreeSet)set.subSet(608,true,611,true); set.add(629); System.out.println(set+" "+subSet); |
A、 编译失败
B、 发生运行时异常
C、 [606, 608, 610, 612, 629] [608, 610]
D、 [606, 608, 610, 612, 629] [608, 610,629]
解析:
subset(form,true,to,true)是Treeset的非静态方法,该方法返回从form元素到to元素的一个set集合,两个boolean类型是确认是否包含边境值用的。
41、Java程序中的类名称必须与存放该类的文件名相同。 B
A、 对
B、 错
解析:
43、以下代码执行的结果显示是多少(B)?
public class Demo{
public static void main(String[] args){
System.out.print(getNumber(0));
System.out.print(getNumber(1));
System.out.print(getNumber(2));
System.out.print(getNumber(4));
}
public static int getNumber(int num){
try{
int result = 2 / num;
return result;
}catch (Exception exception){
return 0;
}finally{
if(num == 0){
return -1;
}
if(num == 1){
return 1;
}
}
}
}
A、 0110
B、 -1110
C、 0211
D、 -1211
解析:
finally一定会在return之前执行,但是如果finally使用了return或者throw语句,将会使trycatch中的return或者throw失效
45、于访问权限,说法正确的是? (A )
A、 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A可以访问类B的方法testB
B、 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A不可以访问类B的方法testB
C、 访问权限大小范围:public > 包权限 > protected > private
D、 访问权限大小范围:public > 包权限 > private > protected
46、在 Java 中,属于整数类型变量的是(C)
A、 single
B、 double
C、 byte
D、 char
解析:
Java中的四类八种基本数据类型
第二类:浮点型 float double
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
48、
static String str0="0123456789"; static String str1="0123456789"; String str2=str1.substring(5); String str3=new String(str2); String str4=new String(str3.toCharArray()); str0=null; |
假定str0,...,str4后序代码都是只读引用。
Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为(C)
A、 5
B、 10
C、 15
D、 20
解析:
下:
17 关于ASCII码和ANSI码,以下说法不正确的是(D)?
A. 标准ASCII只使用7个bit
B. 在简体中文的Windows系统中,ANSI就是GB2312
C. ASCII码是ANSI码的子集
D. ASCII码都是可打印字符
解析:
22 下列关于容器集合类的说法正确的是? C
A. LinkedList继承自List
B. AbstractSet继承自Set
C. HashSet继承自AbstractSet
D. WeakMap继承自HashMap
解析:
这道题其实只要把java集合框架给看了,就一目了然了。
23 关于HashMap和Hashtable正确的说法有(AC)
A. 都实现了Map接口
B. Hashtable类不是同步的,而HashMap类是同步的
C. Hashtable不允许null键或值
D. HashMap不允许null或值
解析:
1、继承不同。public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
2、Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
3、Hashtable中,key和value都不允许出现null值。
在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
4、两个遍历方式的内部实现上不同。
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
5、哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
6、Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数
24 关于JSP生命周期的叙述,下列哪些为真? AC
A. JSP会先解释成Servlet源文件,然后编译成Servlet类文件
B. 每当用户端运行JSP时,jsp init()方法都会运行一次
C. 每当用户端运行JSP时,jsp service()方法都会运行一次
D. 每当用户端运行JSP时,jsp destroy()方法都会运行一次
解析:
init方法:负责初始化Servlet对象。在Servlet的整个生命周期类,init()方法只被调用一次。
destroy方法:销毁Servlet对象,释放占用的资源,Servlet要被卸载时调用
25 下面有关servlet的层级结构和常用的类,说法正确的有? ABCD
A. GenericServlet类:抽象类,定义一个通用的、独立于底层协议的Servlet。
B. 大多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现
C. ServletConfig接口定义了在Servlet初始化的过程中由Servlet容器传递给Servlet得配置信息对象
D. HttpServletRequest接口扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息
26 下面哪些写法能在 java8 中编译执行(AD)
A. dir.listFiles((File f)->f.getName().endsWith(“.Java”));
B. dir.listFiles((File f)=>f.getName().endsWith(“.Java”));
C. dir.listFiles((_.getName().endsWith(“.Java”)));
D. dir.listFiles( f->f.getName().endsWith(“.Java”));
解析:
Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:
27 jvm中垃圾回收分为scanvenge gc和full GC,其中full GC触发的条件可能有哪些 ? CDE
A. 栈空间满
B. 年轻代空间满
C. 老年代满
D. 持久代满
E. System.gc()
解析:
33 为了使包ch4在当前程序中可见,可以使用的语句是(A)
A. import ch4.*;
B. package ch4.*;
C. ch4 import;
D. ch4 package;
解析:
package ch4; 将你这个类放在了/ch4这个文件夹下面 要使用的话 import ch4.*;导入这个类
36 以下不是修饰符final的作用的是( C)。
A. 修饰常量
B. 修饰不可被继承的类
C. 修饰不可变类
D. 修饰不可覆盖的方法
解析:
final的作用:
37 如果一个list初始化为{5,3,1},执行以下代码后,其结果为(B)?
nums.add(6);
nums.add(0,4);
nums.remove(1);
A. [5, 3, 1, 6]
B. [4, 3, 1, 6]
C. [4, 3, 6]
D. [5, 3, 6]
解析:
初始化为{5,3,1}
42 下列哪些功能可以通过Cookie来实现?( ABC)
A. 记录访问者的信息
B. 在页面之间传递信息
C. 自动识别用户
D. 对数据库进行操作
解析:
A 项,访问者的信息一般都可以处理成 kv 键值对的形式,故可以保存在 Cookie 中,正确。
48 下列代码,页面打开后能够弹出alert(1)的是? ABC
A. <iframe src=”javascript: alert(1)”></iframe>
B. <img src=”” onerror=”alert(1)”/>
C. IE下<s style=”top:expression(alert(1))”></s>
D. <div onclick=”alert(1)”></div>
解析:
A 加载页面的时候触发;
50 下面这个JS程序的输出是什么:A
A. 0 1 0
B. 0 1 2
C. 0 0 0
D. 0 0 2
解析:
这道题考察闭包和引用类型对象的知识点:
1.一般来说函数执行完后它的局部变量就会随着函数调用结束被销毁,但是此题foo函数返回了一个匿名函数的引用(即一个闭包),它可以访问到foo()被调用产生的环境,而局部变量i一直处在这个环境中,只要一个环境有可能被访问到,它就不会被销毁,所以说闭包有延续变量作用域的功能。这就好理解为什么:
1
2
|
f1(); //0 f1(); //1 |
2.我一开始认为f1和f2都=foo()是都指向了同一个function引用类型,所以顺理成章就会答错认为:
1
|
f2(); //2 |
但其实foo()返回的是一个匿名函数,所以f1,f2相当于指向了两个不同的函数对象,所以结果也就顺理成章的变为:
1
|
f2(); //0 |