达内java核心api下.docx
《达内java核心api下.docx》由会员分享,可在线阅读,更多相关《达内java核心api下.docx(18页珍藏版)》请在冰点文库上搜索。
达内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 文档对象