当前位置:首页 > Java第6~18章例题分析与书后答案
public static void main(String[] args) { }
}
14.设计一个程序,实现下述功能:假设file1.txt包含“1,3,5,7,8”,另一个文件file2.txt包含“2,9,11,13”,编写程序把这两个文件的内容合并到一个新文件中,并且要求这些数据必须按照升序排列写入到新文件中。 参考代码: import java.io.*; import java.util.Arrays; public class Ex14 {
public static void main(String[] args) { try {
FileReader fr1=new FileReader(\ BufferedReader bf1=new BufferedReader(fr1); FileReader fr2=new FileReader(\ BufferedReader bf2=new BufferedReader(fr2); String str1=bf1.readLine(); String str2=bf2.readLine();
bf1.close();fr1.close();bf2.close();fr2.close(); String[] strI=str1.split(\String[] strJ=str2.split(\
String[] str=new String[strI.length+strJ.length]; System.arraycopy(strI,0,str,0,strI.length); System.arraycopy(strJ,0,str,strI.length, strJ.length); Arrays.sort(str);
FileWriter fw=new FileWriter(\BufferedWriter bw=new BufferedWriter(fw); for(int i=0;i FileWriter fw=new FileWriter(\fw.write(i); fw.close(); } catch (IOException e) { e.printStackTrace(); } } } bw.write(\ } bw.close();fw.close(); } catch (Exception e) { e.printStackTrace(); } 第九章 多线程 9.1例题解析 例9.1.1下面选项中,不会导致线程停止执行的是()。 A. 调用一个线程对象的wait()方法 B. 调用一个输入流对象的read()方法 C. 调用一个线程对象的setPriority()方法 D. 从一个同步语句块中退出 【分析】当线程调用wait方法时,会阻塞自己的执行,等待其他线程唤醒;调用setPriority方法时,如果设置的优先级很低,所在进程中存在优先级更高的线程时,同样会阻塞自己的执行;而执行某个输入流对象的read方法时,会等待用户干预,输入数据;但是,从同步块退出时,不会停止线程的执行。本题的正确答案是D。 例9.1.2 分析下面的程序代码: public class Test { public static void main(String[] args) { A a=new A(); } } class A extends Thread { public int i=3; public void run() { i=20; } } 在执行该程序后,程序的输出结果一定是()。 A.j=3 B.j=20 C.输出结果不确定 D.程序有错误 【分析】程序在执行到“a.start();”语句时,启动了线程a,但是CPU何时调用该线程 a.start(); int j=a.i; System.out.println(\ 执行run()方法,或者继续原来的主线程,执行“int j=a.i;”语句,程序调用者是无法确定。程序执行后,可能的输出结果是A或者B,是不确定的。因此,本题选择C选项。 例9.1.3 分析下面的程序代码 class SynA extends Thread { public int x; public static int count; public synchronized void run() { while(true && ++count<=3){ } x++; System.out.println(\ //E行 } } public class SynTest { public static void main(String[] args) { SynA s1=new SynA(); } SynA s2=new SynA(); s1.start();s2.start(); //F行 //G行 } 下面关于程序输出结果的描述中,正确的是()。 A.程序确定输出三行,每行的结果不确定 B.程序确定输出三行,每行的结果确定 C.程序输出行数不确定,每行结果确定 D.程序输出行数不确定,每行结果不确定 【分析】正确答案是A。程序的E行设置了循环条件count<=3,而count是类变量,因此输出语句只能执行3次,输出结果一定是3行;F行和G行的语句分别启动了s1和s2两个线程,由于run()方法设置了synchronized关键字,每次只能一个线程运行run()方法,但是执行哪个线程是不确定的,因此每行输出的内容是不确定的。 例9.1.4 试编写程序,用异常抛出机制实现两段程序代码的交替执行。 【分析】在程序中采用Java的异常处理机制抛出和处理异常。 参考代码: public class ExceptionChange { public static void main(String[] args) { boolean flag=true; while(true){ try { if (flag == true) {
共分享92篇相关文档