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'); 1
- !
}
关于上述代码编译运行的结果的是:()。 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\ 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为 字符输入流。使用该流可以设置字符集,并按照指定的字符集从流2
- !
中按照该编码将字节数据转换为字符并读取。需要使用字节输入流作为参数构造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\"); } 3
- !
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) { 4
- !
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)的是:()。 5
- !
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 线程一退出,则虚拟机退出 6
- !
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(); } } 7
- !
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(); 8
- !
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属于应用层协议。 9
- !
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文件作为输入流,触发标记开始,内容开始,标记结束等动作 10
- !
优点: 解析可以立即开始,速度快,没有内存压力 缺点: 不能对节点做修改
本题中,根据需求描述只是对XML文档进行读取,因此使用SAX方式解析可以加快读取速度。
23.以下的xml文档片段中,属性符合XML语法规则的是: A. 问题解析: 本题考查XML中属性的语法。 在XML中,属性必须被引号包围,不过单引号和双引号均可使用。 24.下面的XML片断中,符合XML语法规则的是:()。 A. C. 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,因此在该属性前使用“@”。 12
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务