1、习题解答习题 1(第 1 章)一、问答题1James Gosling2需 3 个步骤:1) 用文本编辑器编写源文件。 2) 使用 javac 编译源文件,得到字节码文件。3) 使用解释器运行程序。3源文件由若干个类所构成。对于应用程序,必须有一个类含有 public static void main(String args)的方法,含有该方法的类称为应用程序的主类。不一定,但至多有一个public 类。4set classpath=D:jdkjrelibrt.jar;.;5. java 和 class6. java Bird 7. 独行风格(大括号独占行)和行尾风格(左大扩号在上一行行尾,右大
2、括号独占行)二、选择题1B。2D。 三、阅读程序1 (a)Person.java。 (b)两个字节码,分别是 Person.class 和 Xiti.class。 (c)得到“NoSuchMethodError”,得到“NoClassDefFoundError: Xiti/class”,得到“您好,很高兴认识您 nice to meet you”习题 2(第 2 章)一、问答题1用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。标识符由字母、下划线、美元符号和数字组成,第一个字符不能是数字。false 不是标识符。2关键字就是 Java 语言中已经被赋予特定意义的一
3、些单词,不可以把关键字作为名字来用。true 和 false 不是关键字。 6 个关键字:class implements interface enum extends abstract。3boolean,char,byte ,short,int,long,float,double。4float 常量必须用 F 或 f 为后缀。double 常量用 D 或 d 为后缀,但允许省略后缀。5一维数组名.length。二维数组名.length 。二、选择题1C。2ADF 。3B。4BE 。5 【代码 2】 【代码 3】 【代码 4】 【代码 5】 。6B。三、阅读或调试程序1属于操作题,解答略。2属
4、于操作题,解答略。3属于操作题,解答略。4 【代码 1】:4。 【代码 2】:b0=1 。5 【代码 1】:40。 【代码 2】:7四、编写程序1. public class E public static void main(String args) System.out.println(int)你); System.out.println(int)我); System.out.println(int)他);2. public class E public static void main (String args ) char cStart=,cEnd=;for(char c=cStart
5、;cj/2) System.out.print(“ “+j);3class Xiti3 public static void main(String args) double sum=0,a=1,i=1;do sum=sum+a;i+;a=(1.0/i)*a;while(i=8888) break;System.out.println(“满足条件的最大整数:“+(n-1);习题 4(第 4 章)一、问答题1. 封装、继承和多态。2当类名由几个单词复合而成时,每个单词的首字母使用大写。3名字的首单词的首字母使用小写,如果变量的名字由多个单词组成,从第 2 个单词开始的其它单词的首字母使用大写。4
6、属性5行为6用类创建对象时。没有类型7用类创建对象时。8一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。可以。9可以。不可以。10不可以。11一个类通过使用 new 运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间。所有对象的类变量都分配给相同的一处内存,对象共享类变量。12代表调用当前方法的对象。不可以。二、选择题1B。2D。3D。4D。5CD。6 【代码 1】 【代码 4】 。7 【代码 4】 。三、阅读程序1 【代码 1】:1, 【代码 2】:121, 【代码 3】:121。2sum=-100。3. 2
7、7。4 【代码 1】:100, 【代码 2】 :20.0。5. 上机实习题目,解答略。6. 上机实习题目,解答略。四、编程题CPU.javapublic class CPU int speed; int getSpeed() return speed;public void setSpeed(int speed) this.speed = speed; HardDisk.javapublic class HardDisk int amount; int getAmount() return amount;public void setAmount(int amount) this.amount
8、 = amount; PC.javapublic class PC CPU cpu;HardDisk HD;void setCPU(CPU cpu) this.cpu = cpu; void setHardDisk(HardDisk HD) this.HD = HD; void show()System.out.println(“CPU 速度:“+cpu.getSpeed();System.out.println(“硬盘容量:“+HD.getAmount(); Test.javapublic class Test public static void main(String args) CPU
9、 cpu = new CPU();HardDisk HD=new HardDisk();cpu.setSpeed(2200);HD.setAmount(200);PC pc =new PC();pc.setCPU(cpu);pc.setHardDisk(HD);pc.show(); 习题 5(第 5 章)一、问答题1不可以。2是。3不继承。4声明与父类同名的成员变量。5子类重写的方法类型和父类的方法的类型一致或者是父类的方法的类型的子类型,重写的方法的名字、参数个数、参数的类型和父类的方法完全相同。重写方法的目的是隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
10、6不可以。7abstract 类。8上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。上转型对象可以访问子类继承或隐藏的成员变量,可以调用子类继承的方法或子类重写的实例方法。9通过重写方法。10面向抽象编程目的是为了应对用户需求的变化,核心是让类中每种可能的变化对应地交给抽象类的一个子类类去负责,从而让该类的设计者不去关心具体实现。二、选择题1C。2D。3CD。4D。5B 。6B。7D。8B。9A。三、阅读程序1 【代码 1】:15.0。 【代码 2】:8.0。2 【代码 1】:11。 【代码 2】:11。3 【代码 1】:98.0。 【代码 2】:12。 【代码 3】:98.0。
11、 【代码 4】:9。4 【代码 1】:120。 【代码 2】:120。 【代码 3】:-100。四、编程题Animal.javapublic abstract class Animal public abstract void cry();public abstract String getAnimalName();Simulator.javapublic class Simulator public void playSound(Animal animal) System.out.print(“现在播放“+animal.getAnimalName()+“类的声音:“);animal.cry(
12、);Dog.javapublic class Dog extends Animal public void cry() System.out.println(“汪汪.汪汪“); public String getAnimalName() return “狗“;Cat.javapublic class Cat extends Animal public void cry() System.out.println(“喵喵.喵喵“); public String getAnimalName() return “猫“;Application.javapublic class Example5_13 p
13、ublic static void main(String args) Simulator simulator = new Simulator();simulator.playSound(new Dog();simulator.playSound(new Cat();习题 6(第 6 章)一、问答题1不能。2不能。3可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。4不可以。5可以。二、选择题1D。2AB。3B。三、阅读程序1 【代码 1】:15.0。 【代码 2】:8。2 【代码 1】:18。 【代码 2】:15。四、编程题An
14、imal.javapublic interface Animal public abstract void cry();public abstract String getAnimalName();Simulator.javapublic class Simulator public void playSound(Animal animal) System.out.print(“现在播放“+animal.getAnimalName()+“类的声音:“);animal.cry();Dog.javapublic class Dog implements Animal public void cry
15、() System.out.println(“汪汪.汪汪“); public String getAnimalName() return “狗“;Cat.javapublic class Cat implements Animal public void cry() System.out.println(“喵喵.喵喵“); public String getAnimalName() return “猫“;Application.javapublic class Example5_13 public static void main(String args) Simulator simulato
16、r = new Simulator();simulator.playSound(new Dog();simulator.playSound(new Cat();习题 7(第 7 章)一、问答题1有效。2可以。3不可以。4一定是。二、选择题1C。2C 。三、阅读程序1大家好,祝工作顺利!2p 是接口变量。3你好 fine thanks。4属于上机实习程序,解答略。四、编程题import java.util.*;public class E public static void main (String args )Scanner reader = new Scanner(System.in);d
17、ouble sum = 0;int m = 0;while(reader.hasNextDouble()double x = reader.nextDouble();assert x=0) m=m-1;random.seek(m);int c=random.readByte();if(c=0)System.out.print(char)c);else m=m-1;random.seek(m);byte cc=new byte2;random.readFully(cc);System.out.print(new String(cc); catch(Exception exp)2. import
18、java.io.*;public class E public static void main(String args ) File file=new File(“E.java“);File tempFile=new File(“temp.txt“);try FileReader inOne=new FileReader(file);BufferedReader inTwo= new BufferedReader(inOne);FileWriter tofile=new FileWriter(tempFile);BufferedWriter out= new BufferedWriter(t
19、ofile);String s=null;int i=0;s=inTwo.readLine();while(s!=null) i+;out.write(i+“ “+s);out.newLine();s=inTwo.readLine();inOne.close();inTwo.close();out.flush();out.close();tofile.close();catch(IOException e)3. import java.io.*;import java.util.*;public class E public static void main(String args) File
20、 file = new File(“a.txt“);Scanner sc = null;double sum=0;int count = 0;try sc = new Scanner(file);sc.useDelimiter(“0123456789.+“);while(sc.hasNext()try double price = sc.nextDouble();count+;sum = sum+price;System.out.println(price); catch(InputMismatchException exp)String t = sc.next(); System.out.p
21、rintln(“平均价格:“+sum/count);catch(Exception exp)System.out.println(exp); 习题 11(第 11 章)一、问答题1在 MySQL 安装目录的 bin 子目录下键入 mysqld 或 mysqld -nt 启动 MySQL 数据库服务器。2复制到 JDK 的扩展目录中(即 JAVA_HOME 环境变量指定的 JDK,见第 1 章的1.3.3) ,比如:E:jdk1.8jrelibext 。3减轻数据库内部 SQL 语句解释器的负担。4事务由一组 SQL 语句组成,所谓事务处理是指:应用程序保证事务中的 SQL 语句要么全部都执行,
22、要么一个都不执行。事务处理步骤是调用:(1)连接对象用setAutoCommit()方法关闭自动提交模式, (2)连接对象用 commit()方法处理事务, (3)连接对象用 rollback()方法处理事务失败。二、编程题1. 同时用到了例子 2 中的 GetDBConnection 类。import java.sql.*;import java.sql.*; public class BianCheng1 public static void main(String args) Connection con;Statement sql; ResultSet rs;con = GetDBCo
23、nnection.connectDB(“students“,“root“,“);if(con = null ) return;String sqlStr =“select * from mess order by birthday“;try sql=con.createStatement();rs = sql.executeQuery(sqlStr);while(rs.next() String number=rs.getString(1);String name=rs.getString(2);Date date=rs.getDate(3);float height=rs.getFloat(
24、4);System.out.printf(“%st“,number);System.out.printf(“%st“,name);System.out.printf(“%st“,date); System.out.printf(“%.2fn“,height);con.close();catch(SQLException e) System.out.println(e);2. 同时用到了例子 6 中的 Query 类。import javax.swing.*;public class BianCheng2 public static void main(String args) String t
25、ableHead;String content; JTable table ;JFrame win= new JFrame();Query findRecord = new Query();findRecord.setDatabaseName(args0);findRecord.setSQL(“select * from “+args1);content = findRecord.getRecord(); tableHead=findRecord.getColumnName();table = new JTable(content,tableHead); win.add(new JScroll
26、Pane(table);win.setBounds(12,100,400,200);win.setVisible(true); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);习题 12(第 12 章)一、问答题14 种状态:新建、运行、中断和死亡。2有 4 种原因的中断:(1)JVM 将 CPU 资源从当前线程切换给其他线程,使本线程让出 CPU 的使用权处于中断状态。 (2)线程使用 CPU 资源期间,执行了 sleep(int millsecond)方法,使当前线程进入休眠状态。 (3)线程使用 CPU 资源期间,执行了 wait()
27、方法,使得当前线程进入等待状态。 (4)线程使用 CPU 资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞。3死亡状态,不能再调用 start()方法。4新建和死亡状态。5两种方法:用 Thread 类或其子类。6使用 setPrority(int grade)方法。7Java 使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱。8当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用 wai
28、t()方法。使用 wait 方法可以中断方法的执行,使本线程等待,暂时让出 CPU 的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用 notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。9不合理。10 “吵醒”休眠的线程。一个占有 CPU 资源的线程可以让休眠的线程调用 interrupt 方法“吵醒”自己,即导致休眠的线程发生 InterruptedException 异常,从而结束休眠,重新排队等待 CPU 资源。二、选择题1A。2A。3B。三、阅读程序1属于上机调试题目,解答略。2属
29、于上机调试题目,解答略。3属于上机调试题目,解答略。4属于上机调试题目,解答略。5属于上机调试题目,解答略。6属于上机调试题目,解答略7 【代码】:BA。8属于上机调试题目,解答略四、编写程序1. public class E public static void main(String args) Cinema a=new Cinema();a.zhang.start();a.sun.start();a.zhao.start();class TicketSeller /负责卖票的类。 int fiveNumber=3,tenNumber=0,twentyNumber=0; public sy
30、nchronized void sellTicket(int receiveMoney) if(receiveMoney=5) fiveNumber=fiveNumber+1; System.out.println(Thread.currentThread().getName()+“给我 5 元钱,这是您的 1 张入场卷 “); else if(receiveMoney=10) while(fiveNumber1) try System.out.println(Thread.currentThread().getName()+“靠边等“);wait(); System.out.println(
31、Thread.currentThread().getName()+“结束等待“);catch(InterruptedException e) fiveNumber=fiveNumber-1;tenNumber=tenNumber+1;System.out.println(Thread.currentThread().getName()+“给我 10 元钱,找您 5 元,这是您的 1 张入场卷“); else if(receiveMoney=20) while(fiveNumber1|tenNumber1) try System.out.println(Thread.currentThread(
32、).getName()+“靠边等“);wait(); System.out.println(Thread.currentThread().getName()+“结束等待“);catch(InterruptedException e) fiveNumber=fiveNumber-1;tenNumber=tenNumber-1;twentyNumber=twentyNumber+1; System.out.println(Thread.currentThread().getName()+“给 20 元钱,找您一张 5 元和一张 10 元,这是您的 1 张入场卷“);notifyAll();clas
33、s Cinema implements Runnable Thread zhang,sun,zhao; TicketSeller seller;Cinema() zhang=new Thread(this);sun=new Thread(this);zhao=new Thread(this);zhang.setName(“张小有“);sun.setName(“孙大名“);zhao.setName(“赵中堂“);seller=new TicketSeller(); public void run() if(Thread.currentThread()=zhang) seller.sellTick
34、et(20);else if(Thread.currentThread()=sun) seller.sellTicket(10);else if(Thread.currentThread()=zhao) seller.sellTicket(5);2. 参照本章例子 63参照本章例子 9习题 13(第 13 章)一、问答题1一个 URL 对象通常包含最基本的三部分信息:协议、地址、资源。2URL 对象调用 InputStream openStream() 方法可以返回一个输入流,该输入流指向URL 对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端。3客户端的套接字和服务器端的套
35、接字通过输入、输出流互相连接后进行通信。4使用方法 accept(),accept()会返回一个和客户端 Socket 对象相连接的 Socket 对象。accept 方法会堵塞线程的继续执行,直到接收到客户的呼叫。 。5域名/IP。四、编程题1. (1)客户端import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class Client public static void main(String args) new ComputerClient();
36、class ComputerClient extends Frame implements Runnable,ActionListener Button connection,send;TextField inputText,showResult;Socket socket=null;DataInputStream in=null;DataOutputStream out=null;Thread thread; ComputerClient() socket=new Socket();setLayout(new FlowLayout();Box box=Box.createVerticalBo
37、x();connection=new Button(“连接服务器 “);send=new Button(“发送“);send.setEnabled(false);inputText=new TextField(12);showResult=new TextField(12);box.add(connection);box.add(new Label(“输入三角形三边的长度,用逗号或空格分隔 :“);box.add(inputText);box.add(send);box.add(new Label(“收到的结果:“);box.add(showResult);connection.addActi
38、onListener(this);send.addActionListener(this);thread=new Thread(this); add(box);setBounds(10,30,300,400);setVisible(true);validate();addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););public void actionPerformed(ActionEvent e) if(e.getSource()=connection)
39、 try /请求和服务器建立套接字连接: if(socket.isConnected() else InetAddress address=InetAddress.getByName(“127.0.0.1“);InetSocketAddress socketAddress=new InetSocketAddress(address,4331);socket.connect(socketAddress); in =new DataInputStream(socket.getInputStream();out = new DataOutputStream(socket.getOutputStrea
40、m();send.setEnabled(true);thread.start(); catch (IOException ee)if(e.getSource()=send) String s=inputText.getText();if(s!=null) try out.writeUTF(s);catch(IOException e1) public void run() String s=null;while(true) try s=in.readUTF();showResult.setText(s);catch(IOException e) showResult.setText(“与服务器
41、已断开“);break; (2)服务器端import java.io.*;import .*;import java.util.*;public class Server public static void main(String args) ServerSocket server=null;Server_thread thread;Socket you=null;while(true) try server=new ServerSocket(4331);catch(IOException e1) System.out.println(“正在监听“); /ServerSocket 对象不能重
42、复创建 try System.out.println(“ 等待客户呼叫“);you=server.accept();System.out.println(“客户的地址:“+you.getInetAddress();catch (IOException e) System.out.println(“正在等待客户“);if(you!=null) new Server_thread(you).start(); /为每个客户启动一个专门的线程 class Server_thread extends Thread Socket socket;DataOutputStream out=null;DataI
43、nputStream in=null;String s=null;boolean quesion=false;Server_thread(Socket t) socket=t;try out=new DataOutputStream(socket.getOutputStream();in=new DataInputStream(socket.getInputStream();catch (IOException e) public void run() while(true) double a=new double3 ;int i=0;try s=in.readUTF();/堵塞状态,除非读取
44、到信息quesion=false;StringTokenizer fenxi=new StringTokenizer(s,“ ,“);while(fenxi.hasMoreTokens() String temp=fenxi.nextToken();try ai=Double.valueOf(temp).doubleValue();i+;catch(NumberFormatException e) out.writeUTF(“请输入数字字符“);quesion=true;if(quesion=false) double p=(a0+a1+a2)/2.0;out.writeUTF(“ “+Mat
45、h.sqrt(p*(p-a0)*(p-a1)*(p-a2);catch (IOException e) System.out.println(“客户离开“);return; 2. 客户端 Client.javaimport .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class Client public static void main(String args) new ChatClient();class ChatClient extends Frame
46、 implements Runnable,ActionListener Button connection,send;TextField inputName,inputContent;TextArea chatResult;Socket socket=null;DataInputStream in=null;DataOutputStream out=null;Thread thread; String name=“;public ChatClient () socket=new Socket();Box box1=Box.createHorizontalBox();connection=new
47、 Button(“连接服务器 “);send=new Button(“发送“);send.setEnabled(false);inputName=new TextField(6);inputContent=new TextField(22);chatResult=new TextArea();box1.add(new Label(“输入妮称:“);box1.add(inputName);box1.add(connection);Box box2=Box.createHorizontalBox();box2.add(new Label(“输入聊天内容:“);box2.add(inputContent);box2.add(send);connection.addActionListener(this);send.addActionListener(this);thread=new Thread(this); add(box1,BorderLayout.NORTH);add(box2,BorderLayout.SOUTH);add(chatResult,BorderLayout.CENTER);setBounds(10,30,400,280);setVisible(true);validate();addWindowListener(new WindowA