1.下列不属于java语言鲁棒性特点的是
A.java能检查程序在编译和运行时的错误
B.java能运行虚拟机实现跨平台
C.java自己操纵内存减少了内存出错的可能性
D.java还实现了真数组,避免了覆盖数据的可能
解:B,
分析:鲁棒性(Robust,即健壮性)
Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的例外处理机制,在编译时,Java揭示出可能出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外,Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。
B选项虽然描述也对,但是,不应该把它归结于鲁棒性,主要是体现Java的虚拟机实现一次编译,到处运行,跨平台性的特点
2.下面程序的运行结果是
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
A.true
B.false
C.exception
D.无输出
解:B,
分析: String str1 = "hello";
这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的; String str2 = "he" + new String("llo");
这里的str2必须在运行时才知道str2是什么,同时创建匿名对象new String(“llo”),会在堆内存中开辟空间,综上它是指向的是堆里定义的字符串“hello”,所以这两个引用不一样。
3.子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?
A.父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
B.父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
C.父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
D.父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
解:C,
分析:当实例化子类对象时,首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行,所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块
4.如何放掉一个指定占据的内存空间?()
A.调用free()方法
B.代用system.gc()方法
C.赋值给该项对象的引用为null
D.程序员无法明确强制垃圾回收器运行
解:D,
分析:
A,java属于自动内存回收,不能调用free是否内存
B,调用gc()垃圾回收器也只能回收没有任何引用指向的对象
C,赋值为null可以用于占用内存大的对象的回收问题,具体什么时候回收还是由jvm决定
D,程序员可以调用System.gc()方法通知垃圾回收器进行垃圾回收,但是具体什么时候回收还是由jvm决定
5.
public class Test{
static int cnt = 6;
static{
cnt += 9;
}
public static void main(string[] args){
System.out.println("cnt =" + cnt);
}
static{
cnt /=3;
};
}
cnt的值是?
A.cnt=5
B.cnt=2
C.cnt=3
D.cnt=6
解:A,
分析:
初始化顺序:
1.先父类,后子类
2.先属性,后构造函数
3.先静态,后非静态
4.先静态属性,后静态代码块
6.线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?
A.Map map = new HashMap()
B.Map map = new TreeMap()
C.Map map = new ConcurrentHashMap()
D.Map map = Collections.synchronizedMap(new HashMap())
解:CD,
分析:
1. HashMap,TreeMap 未进行同步考虑,是线程不安全的。
2. HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加锁的范围不同,HashTable 对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。
3. Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,
List list = Collections.synchronizedList(new ArrayList());
Set set = Collections.synchronizedSet(new HashSet());
7.JAVA反射机制主要提供了以下哪些功能?
A.在运行时判断一个对象所属的类
B.在运行时构造一个类的对象
C.在运行时判断一个类所具有的成员变量和方法
D.在运行时调用一个对象的方法
解:ABCD,
分析:
JAVA反射机制概念:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:
- 在运行时判断任意一个对象所属的类;
- 在运行时构造任意一个类的对象;
- 在运行时判断任意一个类所具有的成员变量和方法;
- 在运行时调用任意一个对象的方法;
- 生成动态代理。
8.以下可以正确获取结果集的有?
A.
Statement sta=con.createStatement();<br>ResultSet rst=sta.executeQuery("select * from book");
B.
Statement sta=con.createStatement("select * from book"); ResultSet rst=sta.executeQuery();
C.
PreparedStatement pst=con.prepareStatement();
ResultSet rst=pst.executeQuery("select * from book");
D.
PreparedStatement pst=con.prepareStatement(“select * from book”);
ResultSet rst=pst.executeQuery();
解:AD,
分析:
- 创建Statement是不传参的,它用于执行静态 SQL 语句并返回它所生成结果的对象。
- PreparedStatement是需要传入sql语句的,它表示预编译的 SQL 语句的对象。 SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
9.下面选项中,哪些是interface中合法方法定义?()
A.public void main(String [] args);
B.private int getSum();
C.boolean setFlag(Boolean [] test);
D.public float get(int x);
解:ACD,
分析:
java程序的入口main方法必须是static类型的,接口中不允许有static类型的方法。A项没有static修饰符,可以作为普通的方法。而且接口中的方法必须是public的。想想接口就是为了让别人实现的,相当于标准,标准不允许别人使用是不合理的,所以接口中的方法必须是public。C项中,接口中的方法默认是public的。D项属于正常的方法。
10.下面有关forward和redirect的描述,正确的是?
A.forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
B.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
C.执行redirect时,服务器端告诉浏览器重新去请求地址
D.forward是内部重定向,redirect是外部重定向
E.redirect默认将产生301 Permanently moved的HTTP响应
解:BCD,
分析:
request的forward和response的redirect
- redirect地址栏变化,forward发生在服务器端内部从而导致浏览器不知道响应资源来自哪里
- redirect可以重定向到同一个站点上的其他应用程序中的资源,forward 只能将请求 转发给同一个WEB应用中的组件
- redirect默认是302码,包含两次请求和两次响应
- redirect效率较低
拓展:
1. 从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.