文档库 最新最全的文档下载
当前位置:文档库 › 达内JAVA核心API(下)

达内JAVA核心API(下)

达内JAVA核心API(下)
达内JAVA核心API(下)

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.

中国农业银行

New York

C.

中国农业银行

D.

New York

正确答案:D

问题解析: 本题考查XML的语法规则。

本题中,AB选项不符合XML语法规范。在XML中,元素要成对出现,而且大小写敏感。A选项元素name的结尾为,“N”字母要小写,才能与开始元素成对。B选项元素

没有结尾标记。

C选项,不符合XML语法规范。在XML中,有些内容中包含一些字符,如 & < >“‘等。这些均需要对其进行转义,否则会对XML解释器生成错误。

25. 请看如下emp.xml文件中的内容:

7369

SMITH

7368

ALLEN

使用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,因此在该属性前使用“@”。

相关文档