1.请看下列代码:
public class Foo {
public static void main (String[]args) throws Exception {
String name = "tarena";
byte[] c = name.getBytes();
try {
File f = new File("company.txt");
FileOutputStream out = new FileOutputStream(f, true);
out.write(c);
out.close();
}
catch (IOException e) {}
}
}
假设文件company.txt中已存在一些内容,则关于上述代码的说法正确的是:()。
A.编译错误
B.程序可以通过编译,运行后文件company.txt没有任何改变
C.程序可以通过编译,运行后文件company.txt的长度变为0
D.程序可以通过编译,运行后company.txt文件末尾增加了字符串“tarena”
正确答案:D
问题解析: 本题考查使用FileOutputStream实现追加写。 FileOutputStream类的构造方法FileOutputStream(File, boolean)的第二构造参数设置为true表示向文件末尾追加写数据,否则为覆盖写。
2. 关于java.io.Serializable接口说法正确的是:()。
A.java.io.Serializable中有一个serialID属性,但是没有方法
B.类通过实现java.io.Serializable 接口以启用其对象的序列化功能
C.java.io.Serializable中有一个run方法,但是没属性
D.java.io.Serializable接口没有方法或属性,仅用于标识可序列化的语义。
正确答案:BD
问题解析: 本题考查序列化的应用。Java提供了对象序列化和反序列化的算法。Serializable 接口中没有任何方法或属性,类实现该接口,则该类的对象可以被序列化。
3.请看下列代码:
public static void main(String[] args) throws Exception{
FileOutputStream fos
= new FileOutputStream("record.dat");
BufferedOutputStream bos
= new BufferedOutputStream(fos);
bos.write('a');
关于上述代码编译运行的结果的是:()。
A.编译错误
B.实现向文件record.dat追加写入字符a
C.实现向文件record.dat覆盖写入字符a
D.文件record.dat无任何内容
正确答案:D
问题解析: 本题考查缓冲流的用法,BufferedOutputStream缓冲输出流内部也维护着一个缓冲区,每当我们向该流写数据时,都会先将数据存入缓冲区,当缓冲区已满时,缓冲流会将数据一次性全部写出。使用缓冲输出流可以提高写出效率,例如本题中,就没有将缓冲区中的字符a写出去。这是因为在缓冲区中的数据保存直到缓冲区满后才写出,BufferedOutputStream默认的缓冲区为8k,显然缓冲区没有满。当然,也可以使用fluash方法将缓冲区中的数据强制写出或使用close方法关闭流,关闭流之前,缓冲输出流会将缓冲区数据一次性写出。
4.假设random.dat文件为utf-8编码,其内容为“International”,请看下列代码的输出结果是:()。
RandomAccessFile raf = new RandomAccessFile("random.dat", "r");
raf.skipBytes(5);
byte[] buf = new byte[8];
raf.read(buf);
System.out.println(new String(buf));
raf.close();
A.International
B.national
C.rnational
D.ational
正确答案:B
问题解析:本题考查RandomAccessFile类的skipBytes方法,该方法可以跳过输入的 n 个字节以丢弃跳过的字节。
本题中,在上述代码中,使用 RandomAccessFile类的skipBytes方法跳过了输入文件内容的开始的5个字节。跳过了5个字节后,再读取random.dat文件剩余的内容,该内容为national。
5.在Java中,要创建一个InputStreamReader类的对象,下列选项正确的是:()。
A.new InputStreamReader(new FileInputStream("1.dat")) ;
B.new InputStreamReader(new FileReader("1.dat")) ;
C.new InputStreamReader(new BufferedReader("1.dat")) ;
D.new InputStreamReader("1.dat") ;
正确答案:A
问题解析: 本题考查如何构建InputStreamReader对象。
InputStreamReader为字符输入流。使用该流可以设置字符集,并按照指定的字符集从流
中按照该编码将字节数据转换为字符并读取。需要使用字节输入流作为参数构造InputStreamReader对象。
6.下列代码中,能实现按行读取文件的数据的流是:()。
A.InputStreamReader
B.BufferedReader
C.FileInputStream
D.InputStream
正确答案:B
问题解析: 本题考查BufferedReader的用法。
BufferedReader的readLine() 方法读取一个文本行,该方法返回包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 。
7.下列代码编译和运行的结果是:()。
public static void main(String[] args) {
try {
String[] s=null;
s[0] = "test";
System.out.println(s[0]);
} catch (Exception ex) {
System.out.println("Exception");
} catch (NullPointerException npe) {
System.out.println("NullPointerException");
}
}
A.输出:test
B.输出:Exception
C.编译失败
D.输出:NullPointerException
正确答案:C
问题解析: 本题考查异常处理中多catch块的情况。catch代码块是异常处理代码。可以写多个catch处理一系列异常,但是要注意:异常的大小关系,大类型的放到后面处理。例如本题中,应把捕获异常的顺序改成如下代码:
} catch ( NullPointerException ex) {
System.out.println("NullPointerException");
} catch (Exception npe) {
System.out.println("Exception");
}
8.下列代码编译和运行的结果是:()。
public class A {
public void process() {
System.out.print("A,");
}
public static void main(String[] args) {
try {
new B().process();
} catch (IOException e) {
System.out.println("Exception");
}
}
}
class B extends A {
public void process() throws IOException {
super.process();
System.out.print("B,");
throw new IOException();
}
}
A.输出Exception
B.输出A,B,Exception
C.编译失败
D.在运行时抛出NullPointerException异常
正确答案:C
问题解析: 本题考查重写方法时的异常处理。如果使用继承时,在父类别的某个方法上声明了throws某些异常,而在子类别中覆盖该方法时,可以有如下操作:
1).不处理异常(覆盖时不设定throws)
2).可throws父类方法中声明的部分异常
3).可throws父类方法中抛出异常的子类异常
但是不可以做如下操作:
1).throws出额外的异常
2).throws父类方法中抛出异常的父类异常。
本题中父类A的process没有抛出异常,在子类B的process方法抛出了额外的异常IOException,会导致编译失败。
9.请看下列代码:
1. // some code here
2. try {
3. // some code here
4. } catch (SomeException se) {
5. // some code here
6. } finally {
7. // some code here
8. }
下面哪三种情况能使第7行的代码执行:
A.第3行抛出异常
B.第1行抛出异常
C.第5行抛出异常
D.第3行代码成功执行
正确答案:ACD
问题解析: 本题考查异常处理中finally块的用法。finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序其它部分以前,能够对程序的状态作统一管理,无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行,通常在finally语句中可以进行资源的消除工作,如关闭打开的文件、删除临时文件等。
除了下列情况,总将执行finally做为结束:Jvm过早终止;在finally块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。
本题中,如果第1行抛出异常,整个程序会因抛出异常而终止。属于我们上述所说了JVM 过早终止,finally块不会被执行。
10.下列代码运行的结果是:()。
public class Boxer {
Integer i;
int x;
public Boxer(int y) {
x = i + y;
System.out.println(x);
}
public static void main(String[] args) {
new Boxer(new Integer(4));
}
}
A.输出:4
B.在运行时抛出NullPointerException异常
C.在运行时抛出NumberFormatException异常
D.在运行时抛出IllegalStateException异常
正确答案:B
问题解析: 本题考查NullPointerException异常。当应用程序试图在需要对象的地方使用 null 时,抛出该异常。
本题中,在编译代码“ x = i + y;”时,要对i进行自动拆箱,即相当于代码“ x = i.intValue() + y;",但执行时属性i的值为null,因此抛出空指针异常。
11.下面能使线程处于阻塞状态(Block)的是:()。
A.sleep方法
B.IO等待
C.yield方法
D.wait方法
正确答案:ABD
问题解析: 本题考查线程的状态。可以使线程进入阻塞状态的方式有: 1).sleep方法
2).wait方法
3).IO等待
4).同步代码块,synchronized(Object obj){}
12. 下列属于线程安全的类的是:()。
A.StringBuffer
B.Vector
C.HashMap
D.ArrayList
正确答案:AB
问题解析:本题考查Java中实现了线程体同步的API,其中,
1).StringBuffer 是同步的
StringBuilder 不是同步的
2).Vector 和 Hashtable 是同步的
ArrayList 和 HashMap 不是同步的
13.下列代码说法正确的是:()。
public class DaemonThread extends Thread{
public DaemonThread(String name){
super(name);
}
public void run() {
while (true) {
System.out.println("Daemon thread running...");
}
}
public static void main(String[] args) {
DaemonThread dt = new DaemonThread("dtThread");
dt.setDaemon(true);
dt.start();
}
}
A.名为dtThread的线程为守护线程
B.运行上述代码,main 线程一退出,则虚拟机退出
C.运行上述代码,程序会一直跑下去,因为main线程结束了,但dt线程是一个无限循环,还没有结束,虚拟机不能退出
D.main线程是守护线程
正确答案:AB
问题解析: 本题考查守护线程。守护线程也称后台线程、精灵线程。使用Thread类的setDaemon方法,可以设置某线程为守护线程。当前所有前台线程都结束时, Java进程结束后台线程, 不管是否结束, 都被停掉!
14.在下列选项中,创建和启动线程的方式正确的是:()。
A.new Thread() {
public void start() { doStuff(); }
} .run();
B.new Thread() {
public void run() { doStuff(); }
} .start();
C.new Thread(new Runnable() {
public void run() { doStuff(); }
} ).run();
D.new Thread(new Runnable() {
public void run() { doStuff(); }
}).start();
正确答案:BD
问题解析: 本题考查创建线程的方式。创建线程的方式有两种,一种方式是继承Thread类。其创建过程如下:
1)继承自Thread类, 覆盖run()方法, 提供并发运行的过程。
2)创建这个类的实例。
3)使用start() 方法启动线程。
另一方式为实现Runnable接口,其创建过程如下:
1).实现Runnable接口, 实现run()方法, 提供并发运行的过程。
2). 创建这个类的实例, 用这个实例作为Thread构造器参数创建Thread类。
3. 使用start() 方法启动线程。
15.下列代码编译和运行的结果是:()。
public class Threads5 {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
System.out.print("bar");
}
}).start();
}
}
A.编译错误
B.抛出运行时异常
C.输出:bar
D.代码正常运行,但是无输出
正确答案:C
问题解析: 本题考查线程在内部类中的应用。
本题中使用内部类的形式创建线程,该用法是正确的,程序可以正常运行输出字符串“bar”。
16.下列代码编译和运行的结果是:()。
public class TestOne {
public static void main(String[] args) throws Exception {
Thread.sleep(3000);
System.out.println("sleep");
}
}
A.编译错误
B.抛出运行时异常
C.输出:sleep
D.代码正常运行,但是无输出
正确答案:C
问题解析: 本题考查Thread类的sleep方法。
Thread.sleep(times) 使当前线程从 Running状态放弃处理器进入Block状态, 休眠times毫秒, 再返回到Runnable状态,如果被其他线程打断当前线程的休眠阻塞, 就会发生InterruptedException.
本题中线程休眠3秒后,重新回到Runnable状态,然后,被调度执行进入Running状态,输出“sleep”。
17.请看下列代码:
class ThreadDemo implements Runnable{
int age=0;
public synchronized void run(){
for(int i=0;i<100;i++){
System.out.println("age="+(age++));
}
}
}
下列构造线程对象的方式中,两个线程共用一个age数据的是:()。
A.ThreadDemo r1=new ThreadDemo();
ThreadDemo r2=new ThreadDemo();
B.Thread t1=new Thread();
Thread t2=new Thread();
C.ThreadDemo r1=new ThreadDemo();
Thread t1=new Thread(r1);
Thread t2=new Thread(r1);
D.ThreadDemo r1=new ThreadDemo();
ThreadDemo r2=new ThreadDemo();
Thread t1=new Thread(r1);
Thread t2=new Thread(r2);
正确答案:C
问题解析: 本题考查多线程。
本题中若要两个线程共用一个age数据,也就是两个线程共用一个目标对象,即Runnable 的引用。本题中C选项使用了同一个目标对象r1。
18.下列选项中关于synchronized的使用正确的是:()。
A.private synchronized Object o;
B.void go() {
synchronized() { /* code here */ }
}
C.public synchronized void go() { /* code here */ }
D.private synchronized(this) void go() { /* code here */ }
正确答案:C
问题解析: 本题考查synchronized的使用
多个线程并发读写同一个临界资源时候会发生线程安全问题,可以使用同步代码块实现同步读写临界资源, 解决并发安全问题.
a. 同步代码块 synchronized(同步监视器){... }
同步监视器是一个任意对象实例,是一个多个线程之间的互斥的锁机制,多个线程要使用同一个"监视器" 实现同步互斥.常见写法为 synchronized(this){ ... }
b.如果方法的全部过程需要同步, 可以简单使用synchronized 修饰方法, 例如选项C的用法。
19. 下列属于传输层协议的是:()。
A.TCP
B.UDP
C.HTTP
D.SMTP
正确答案:AB
问题解析: 本题考查通信协议,其中,TCP 协议和UDP协议属于传输层协议;HTTP协议和SMTP属于应用层协议。
20.下面关于ServerSocket描述正确的是:()。
A.ServerSocket类实现了服务器端的套接字
B.ServerSocket类的accept()方法侦听并接收到客户端套接字
C.一个服务器端只能有一个客户端进行连接
D.一个服务器端可以有多个客户端进行连接
正确答案:ABD
问题解析:本题考查Socket编程。
C选项说法错误,一个服务器端可以有多个客户端进行连接。
21.在实体引用中表示“>”的是:()。
A.<
B.>
C.#qut;
D.#at;
正确答案:B
问题解析:本题考查XML中的实体引用。XML实体引用介绍如下:
实体引用字符说明
< < 小于
> > 大于
& & 与符号
' ‘单引号
" “双引号
空格
22.某新闻网站新闻量较大,并且新闻需要被即时发布。该网站可以通过各种浏览器和手持设备访问。网站后台是一个基于xml的应用系统,该系统把数据库中数据读取到xml文档中,并使用DOM进行解析。下列建议中,可以提高后台应用系统的性能,从而提高该网站的性能的是:()。
A.把xml文档转化成html网页
B.使用SAX解析xml文档
C.不经解析,把xml文档直接发送给浏览器
D.将XML文档转成图片进行发送
正确答案:B
问题解析: 本题考查XML解析。XML解析的方式有DOM解析和SAX解析,其中,DOM (Document Object Model 文档对象模型)
关键字:树(Document)
优点:把xml文件在内存中构造树形结构,可以遍历和修改节点
缺点:如果文件比较大,内存有压力,解析的时间会比较长
SAX(Simple API for Xml 基于XML的简单API)
关键字:流(Stream)把xml文件作为输入流,触发标记开始,内容开始,标记结束等动作
优点:解析可以立即开始,速度快,没有内存压力
缺点:不能对节点做修改
本题中,根据需求描述只是对XML文档进行读取,因此使用SAX方式解析可以加快读取速度。
23.以下的xml文档片段中,属性符合XML语法规则的是:
A.
B.
C.
D.
正确答案:AB
问题解析: 本题考查XML中属性的语法。
在XML中,属性必须被引号包围,不过单引号和双引号均可使用。
24.下面的XML片断中,符合XML语法规则的是:()。
A.
B.
C.
D.
正确答案:D
问题解析: 本题考查XML的语法规则。
本题中,AB选项不符合XML语法规范。在XML中,元素要成对出现,而且大小写敏感。A选项元素name的结尾为,“N”字母要小写,才能与开始元素
C选项,不符合XML语法规范。在XML中,有些内容中包含一些字符,如 & < >“‘等。这些均需要对其进行转义,否则会对XML解释器生成错误。
25. 请看如下emp.xml文件中的内容:
使用XPath和谓语条件从根节点开始查找属性firstname的值为"jessica"的所在的节点,下列路径表达式中正确的是:()。
A./ROWDATA/ROW/ENAME[@firstname='jessica']
B.//ROWDATA/ROW/ENAME[@firstname='jessica']
C./ROWDATA/ROW/ENAME[firstname='jessica']
D.//ROWDATA/ROW/ENAME[firstname='jessica']
正确答案:A
问题解析: 本题考查Xpath和谓语条件的用法。在XPath中,"/"表示选择根节点;"//"表示选择任意位置的某个节点;"@" 表示选择某个属性。谓语条件则是对路径表达式的附加条件。所有的条件,都写在方括号"[]"中,表示对节点进行进一步的筛选。
本题中要求从根节点开始查找,因此要以“/”开头;要求选择查找属性firstname,因此在该属性前使用“@”。