java第八章答案

java第八章答案
java第八章答案

1.进程和线程有何区别,Java是如何实现多线程的。

答:区别:一个程序至少有一个进程,一个进程至少有一个线程;线程的划分尺度小于进程;进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

Java程序一般是继承Thread 类或者实现 Runnable接口,从而实现多线程。

2.简述线程的生命周期,重点注意线程阻塞的几种情况,以及如何重回就绪状态。答:线程的声明周期:新建-就绪-(阻塞)-运行--死亡

线程阻塞的情况:休眠、进入对象wait池等待、进入对象lock池等待;

休眠时间到回到就绪状态;在wait池中获得notify()进入lock池,然后获得锁棋标进入就绪状态。

3.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000毫秒以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。

(注:两个类,相同一个测试类)

//Runnable接口实现的线程runable类

public class runnable implements Runnable {

private String city;

public runnable() {}

public runnable(String city) {

this.city = city;

}

public void run() {

for (int i = 0; i < 10; i++) {

System.out.println(city);

try {

//休眠1000毫秒。

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

// Thread类实现的线程thread类

public class runnable extends Thread {

private String city;

public runnable() {}

public runnable(String city) {

this.city = city;

}

public void run() {

for (int i = 0; i < 10; i++) {

System.out.println(city);

try {

//休眠1000毫秒。

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

//test8_3

public class test8_3 {

public static void main(String[] args) {

// 将创建一个线程对象,这个对象接受一个实现了Runnable接口。实际上这里也就是使用run()方法

runnable r1=new runnable("广州");

runnable r2=new runnable("乌鲁木齐");

Thread t1 = new Thread(r1);

Thread t2 = new Thread(r2);

// 启动线程

t1.start();

t2.start();

}

}

运行结果分别为:

4.编写一个多线程程序实现如下功能:线程A和线程B分别在屏幕上显示信息“…start”后,调用wait等待;线程C开始后调用sleep休眠一段时间,然后调用notifyall,使线程A和线程B继续运行。线程A和线程B恢复运行后输出信息“…end”后结束,线程C在判断线程B和线程A结束后自己结束运行。

//test8_4

public class test8_4 {

Thread A = new Thread("A") {

public void run() {

Wait("A");

}

};

Thread B = new Thread("B") {

public void run() {

Wait("B");

}

};

Thread C = new Thread("C") {

public void run() {

while (true) {

if (!A.isAlive() && !B.isAlive())

return;

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

notifyall();

}

}

};

public synchronized void Wait(String name) {

System.out.println(name + "..start");

try {

wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(name + "..end");

}

public synchronized void notifyall() {

notifyAll();

}

public static void main(String args[]) {

test8_4 test = new test8_4();

//A、B两线程一起输入start和输出end,不过中间有C让线程休眠2秒,没法全部一次性输出,

//之后再唤醒,让AB继续输出下半部分end

test.A.start();

test.B.start();

test.C.start();

}

}

运行结果:

4.

lass test implements Runnable{

public test(){ }

public void run(){

if(Thread.currentThread().getName().equals("A")){

System.out.println("A...start");

synchronized(this)

{

try{

wait();

System.out.println("A...end");

notify();

}catch(Exception e){

}

}

}

else if(Thread.currentThread().getName().equals("B")){ System.out.println("B...start");

synchronized(this){

try{

wait();

System.out.println("B...end");

}catch(Exception e){

}

}

}else if(Thread.currentThread().getName().equals("C")){ try{

Thread.sleep(10);

synchronized(this){

notify();

}

}catch(Exception e){

}

}

}

}

public class d {

public static void main(String args[]) {

test show=new test();

Thread A=new Thread(show,"A");

Thread B=new Thread(show,"B");

Thread C=new Thread(show,"C");

A.start();

B.start();

C.start();

}

}

5.实现一个数据单元,包括学号和姓名两部分。编写两个线程,一个线程往数据单元中写,另一个线程往外读。要求没写一次就往外读一次。

//Data类

import java.util.Scanner;

public class Data{

String studentId;

String name;

boolean available = false;// 判断是读是写

Scanner in = new Scanner(System.in);// 定义一个输入对象

public synchronized void read()

{

if(available)

try

{

wait();

}

catch(Exception e)

{

}

System.out.printf("请输入学号:");

try

{

studentId=in.next();

}

catch(Exception e)

{

System.out.println("输入学号出错!");

}

System.out.printf("请输入姓名:");

try

{

name=in.next();

}

catch(Exception e)

{

System.out.println("输入姓名出错!");

}

System.out.println();

available=true;

notify();

}

public synchronized void write()

{

if(!available)

try

{

wait();

}

catch(Exception e)

{

}

System.out.println("输出学生学号:"+studentId+" 姓名:"+name+"\n"); available=false;

notify();

}

}

//Read类

public class Read extends Thread{

Data d1 = null;

public Read(Data d){

this.d1=d;

}

public void run(){

while(true)

{

d1.read();

}

}

}

//Write类

class Write extends Thread{

Data d2=null;

public Write(Data d)

{

this.d2=d;

}

public void run()

{

while(true)

{

d2.write();

}

}

}

//test8_5类

public class test8_5 {

public static void main(String[] args){

Data data=new Data();

new Read(data).start();

new Write(data).start();

}

}

运行结果:

6.创建两个不同优先级的线程,都从1数到10000,看看哪个数得快。

(注:线程的优先级别越高低与执行速度没有绝对关系!)

//Count类

public class Count extends Thread {

int which;

int n = 10000;

public Count(int which){

this.which=which;

}

public void run() {

for (int i = 1; i <= n; i++) {

if (i == n) {

System.out.println(which+"号进程"+ "结束!");

}

}

}

}

//test8_6

public class test8_6 {

public static void main(String[] args) {

Count count1 = new Count(1);

Count count2 = new Count(2);

Thread t1 = new Thread(count1);

Thread t2 = new Thread(count2);

t1.setPriority(2);//1号进程优先级是2

t2.setPriority(8);//2号进程优先级是8

t1.start();

t2.start();

}

}

运行结果:

都有可能。

7.编写一个Java程序,以说明较高优先级的线程通过调用sleep方法,使较低优先级的线程获得运行的机会。

(这里可以借鉴课本例8—13)

//TestThread类

public class TestThread extends Thread {

private int tick = 1;

private int num;

public TestThread(int i) {

this.num = i;

}

public void run() {

while (tick < 400000) {

tick++;

if ((tick % 50000) == 0) {

System.out.println("Thread #" + num + ",tick =" + tick); yield();

try {

sleep(1);

} catch (Exception e) {

}

}

}

}

}

//test8_7

public class test8_7 {

public static void main(String[] args){

TestThread[] runners = new TestThread[2];

for(int i=0;i<2;i++){

runners[i]=new TestThread(i);

}

runners[0].setPriority(2);

runners[1].setPriority(5);

for(int i=0;i<2;i++){

runners[i].start();

}

}

}

运行结果:

8.主线程控制新线程的生命,当主线程运行一段时间后,控制新线程死亡,主线程继续运行一段时间后结束。

(注:main函数就是主线程,程序里其他的Thread都属于子线程。可以参考课本的例8—1)

//SonThread类

public class SonThread extends Thread{

private int num;

public SonThread(int num){

this.num=num;

}

public void run(){

int i=num;

int result=1;

System.out.println("new thread start.");

/* while(i>0){

result=result*i;

i--;

}*/

System.out.println("the new thread of "+num+"is "+result);

System.out.println("new thread ends");

}

}

//test8_8

public class test8_8 {

public static void main(String[] args){

System.out.println("main tread start.");

SonThread newThread = new SonThread(10);

newThread.start();

//;浪费时间的循环

int i=1;

while(i<=100000){

i++;

}

newThread.stop();//结束新进程

System.out.println("main thread ends");

}

}

运行结果:(这个结果很难把握,通常都会出现2那样的结果,知道原理就好。)

2

9.用两个线程模拟存、取货物。一个线程往一对象里放货物(包括品名、价格),另外一个线程取货物。分别模拟“放一个、取一个”和“放若干个、取若干个”两种情况。

//Good货物类

public class Good {

String name;

int price;

public Good(){

}

public Good(String name,int price){

https://www.360docs.net/doc/5c10225999.html,=name;

this.price=price;

}

public Good(Good g){

https://www.360docs.net/doc/5c10225999.html,=https://www.360docs.net/doc/5c10225999.html,;

this.price=g.price;

}

}

//WareHouse仓库类

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class WareHouse {

Good good = null;

Scanner in = new Scanner(System.in);

List list = new ArrayList();//用来存放商品对象

int count;//想存入商品的个数

boolean available = true;

public WareHouse() {

}

public WareHouse(int count) {

this.count = count;

}

public WareHouse(List list) {

this.count = count;

for (int i = 0; i < list.size(); i++) {

this.list.add((Good) list.get(i));

}

}

public synchronized void saveGood() {

if (available==false) {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

for (int i = 0; i < count; i++) {

String n;

int p;

System.out.println("请输入" + (i+1) + "号商品的名称:"); n = in.next();

System.out.println("价格:");

p = in.nextInt();

good = new Good(n, p);

list.add(good);

}

available = false;

notify();

}

public synchronized void takeGood() {

if (available==true) {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

for (int i = 0; i < list.size(); i++) {

good = (Good) list.get(i);

System.out.print((i+1)+ "号商品的名称为:" + https://www.360docs.net/doc/5c10225999.html,); System.out.println("\t价格为:" + good.price);

}

available = true;

notify();

}

}

//Save存货物类

public class Save extends Thread{

WareHouse wareHouse = null;

public Save(WareHouse w){

this.wareHouse=w;

}

public void run(){

wareHouse.saveGood();

}

}

//Take取货物类

public class Take extends Thread{

WareHouse wareHouse = null;

public Take(WareHouse w){

this.wareHouse=w;

}

public void run(){

wareHouse.takeGood();

}

}

//test8_9测试类

import java.util.Scanner;

public class test8_9 {

public static void main(String[] args){

Scanner in =new Scanner(System.in);

System.out.println("请输入仓库的容量:");

int i=in.nextInt();

WareHouse wareHouse=new WareHouse(i);

Thread saveGood=new Save(wareHouse);

Thread takeGood=new Take(wareHouse);

saveGood.start();

takeGood.start();

}

}

运行结果:

10.用两个线程模拟对话,任何一个线程都可以随时收发信息。

(这道题本人搞不清楚,暂且用网上的给大家参考下。

听说要用到:

Socket.getInputStream()获取输入流用于“接收”

Socket.getOutputStream()获取输出流用于“发送”

)

//test8_10

import java.io.*;

import https://www.360docs.net/doc/5c10225999.html,.*;

import java.util.*;

public class test8_10 {

public static void main(String[] args) {

try {

// establish server socket

ServerSocket s = new ServerSocket(8189);

// wait for client connection

Socket incoming = s.accept();

try {

InputStream inStream = incoming.getInputStream();

OutputStream outStream = incoming.getOutputStream(); Scanner in = new Scanner(inStream);

PrintWriter out = new PrintWriter(outStream, true); out.println("Hello! Enter BYE to exit.");

// echo client input

boolean done = false;

while (!done && in.hasNextLine()) {

String line = in.nextLine();

out.println("Echo: " + line);

if (line.trim().equals("BYE"))

done = true;

}

} finally {

incoming.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

Java语言程序设计第九版第八章答案

Chapter 8 Objects and Classes 1. See the section "Defining Classes for Objects." 2. The syntax to define a class is public class ClassName { } 3.The syntax to declare a reference variable for an object is ClassName v; 4.The syntax to create an object is new ClassName(); 5. Constructors are special kinds of methods that are called when creating an object using the new operator. Constructors do not have a return type—not even void. 6. A class has a default constructor only if the class does not define any constructor. 7. The member access operator is used to access a data field or invoke a method from an object. 8.An anonymous object is the one that does not have a reference variable referencing it. 9.A NullPointerException occurs when a null reference variable is used to access the members of an object. 10.An array is an object. The default value for the elements of an array is 0 for numeric, false for boolean, ‘\u0000’ for char, null for object element type. 11.(a) There is such constructor ShowErrors(int) in the ShowErrors class. The ShowErrors class in the book has a default constructor. It is actually same as public class ShowErrors { public static void main(String[] args) {

JavaWeb程序设计 习题参考答案(第7章)

第七章监听和过滤 1、调用ServletContext的getAttribute()方法时,会触发哪个方法调用?(假设有关联的 监听器) A、ServletContextAttributerListener的attributeAdded()方法 B、ServletContextAttributeListener的attributeRemove()方法 C、ServletContextAttributerListener的attributeReplace() D、不会调用任何监听方法 参考答案:D 2、调用HttpSession的removeAttribute()方法时,会触发哪个方法调用?(假设有关联的监听器) A、HttpSessionListener的attributeRemove()方法 B、HttpSessionActivateionListener的attributeRemove()方法 C、HttpSessionBindingListener的attributeRemove() D、HttpSessionAttributerListener的attributeRemove 参考答案:D 3、调用HttpServletRequest的setAttribute()方法时,会触发哪个方法调用?(假设有关联的监听器) A、ServletRequestAttributeListener的attributeAdded()方法 B、ServletRequestAttributeListene的attributeReplaced()方法 C、ServletRequestAttributeListene的attributeRemove()方法 D、ServletRequestAttributeListene的attributeSetted()方法 参考答案:A 4、在web.xml中使用什么元素配置监听器 A、 B、 C、 D、 参考答案:B 5、下述代码定义了两个过滤器

Java大学基础教程(英文第六版)课后第六章自测题答案

//test the 'Math' class //Math class is a part of https://www.360docs.net/doc/5c10225999.html,ng package, so no need to import it public class p217_6$3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.printf( "Math.abs( 23.7 ) = %s\n", Math.abs( 23.7 ) ); System.out.printf( "Math.abs( 23.7 ) = %f\n", Math.abs( 23.7 ) ); System.out.printf( "Math.abs( 0.0 ) = %f\n", Math.abs( 0.0 ) ); System.out.printf( "Math.abs( -23.7 ) = %f\n", Math.abs( -23.7 ) ); System.out.printf( "Math.ceil( 9.2 ) = %f\n", Math.ceil( 9.2 ) ); System.out.printf( "Math.ceil( -9.8 ) = %f\n", Math.ceil( -9.8 ) ); System.out.printf( "Math.cos( 0.0 ) = %f\n", Math.cos( 0.0 ) ); System.out.printf( "Math.exp( 1.0 ) = %f\n", Math.exp( 1.0 ) ); System.out.printf( "Math.exp( 2.0 ) = %f\n", Math.exp( 2.0 ) ); System.out.printf( "Math.floor( 9.2 ) = %f\n", Math.floor( 9.2 ) ); System.out.printf( "Math.floor( -9.8 ) = %f\n", Math.floor( -9.8 ) ); System.out.printf( "Math.log( Math.E ) = %f\n", Math.log( Math.E ) ); System.out.printf( "Math.log( Math.E * Math.E ) = %f\n", Math.log( Math.E * Math.E ) ); System.out.printf( "Math.max( 2.3, 12.7 ) = %f\n", Math.max( 2.3, 12.7 ) ); System.out.printf( "Math.max( -2.3, -12.7 ) = %f\n", Math.max( -2.3, -12.7 ) ); System.out.printf( "Math.min( 2.3, 12.7 ) = %f\n", Math.min( 2.3, 12.7 ) ); System.out.printf( "Math.min( -2.3, -12.7 ) = %f\n", Math.min( -2.3, -12.7 ) ); System.out.printf( "Math.pow( 2.0, 7.0 ) = %f\n", Math.pow( 2.0, 7.0 ) ); System.out.printf( "Math.pow( 9.0, 0.5 ) = %f\n", Math.pow( 9.0, 0.5 ) ); System.out.printf( "Math.sin( 0.0 ) = %f\n", Math.sin( 0.0 ) ); System.out.printf( "Math.sqrt( 900.0 ) = %f\n", Math.sqrt( 900.0 ) ); System.out.printf( "Math.tan( 0.0 ) = %f\n", Math.tan( 0.0 ) ); } }

java习题及答案第8章 习题参考答案

第8章图形用户界面编程 8.1 什么是组件?什么是容器?并说明各自的作用。 答:从实现角度来看,组件(Component)是构成GUI 的基本要素,作用是通过对不同事件的响应来完成和用户的交互或组件之间的交互;容器是能容纳和排列组件的对象,如Applet、Panel(面板)、Frame(窗口)等,作用就是放置组件并控制组件位置。 8.2 叙述AWT和Swing组件的关系,指出Swing组件的优点。 答:Swing是在AWT基础上扩展而来的,提供了非常丰富的组件,远远多于AWT,并且引入了新的概念和性能,这使得基于Swing开发GUI应用程序比直接使用AWT开发更为灵活、方便、效率高,而且能设计出更优美的、感受更好的GUI。Swing是由javax.swing包提供的,主要包括两种类型的组件:顶层容器和轻量级组件。它们都以“J”开头。 8.3 总结JFrame的使用要点,并说明如何实现窗体的正常退出。 答:JFrame类包含很多设置窗体的方法,可以用setTitle(String title)方法设置窗体标题,用setBounds(int x,int y,int width,int height)方法设置窗体显示的位置及大小,用setVisable(Boolean b)方法设置可见与否(默认不可见)。此外,向JFrame添加组件有两种方式:调用getContentPane()方法获得内容面板,而后向其中添加组件,或者创建一个中间容器并将组件添加其中,而后用setContentPane()方法把该中间容器设置为JFrame的内容面板。由于JFrame对象的关闭按钮的默认动作只是将窗体隐藏,所以为了正确关闭窗体,应通过setDefaultCloseOperation(int operation)方法设置关闭按钮的动作。 8.4 总结常用Swing组件使用特点。 答:常用Swing组件使用时,首先要创建对应组件的对象,并放置在容器中,一般来说可用setText(String t)设置其的文本信息,setFont(Font font):设置文本的字体及大小,对于列表类组件还可以用AddItem()等方法加入选项,用getSelectedIndices()以int[]形式获得被选中的所有选项的索引值,具体使用方法可参照例8.6。 8.5 查阅资料,简述三个菜单类组件之间的关系,并编写一个带有文件菜单的GUI程序。 答:菜单相关的类主要有菜单栏类JMenuBar、菜单类JMenu和菜单项类MenuItem,此外,还有单选菜单项类JRadioButtonMenuItem和复选菜单项类JCheckBoxMenuItem以及弹出式菜单类JPopupMenu等。前三者的关系是菜单放置在菜单栏上,菜单由若干个菜单项组成。 提示:带有文件菜单的GUI程序核心代码如下:

解析JAVA程序设计方案第五章课后答案

第5章习题解答 1.流的主要特征有哪些,用流来实现JAVA中的输入输出有什么优点? 答:一是单向性,即数据只能从数据源流向数据宿:二是顺序性,先从数据源流出的数据一左比后流出的数据先到达数据宿:三是数据流必须而且只能和一个数据源与一个数据宿相连。优点是体现了面向对象程序设计的概念,通过流可以把对不同类型的输入/输出设备的操作统一为用流来实现。 2.对字廿流和字符流进行读写操作的一般步骤是什么? 答:声明流对象,创建流对象,通过流对象进行读(写)操作,关闭流对象。 3.有哪些常用的字节流和字符流,他们的主要区别是什么? 答:InputStream/OutputStrem:普通字iT 流,所有字I'J流的基类。FilelnputStream/ FileOutputStream :用于从文件中读写数据。BufferedlnputStream/ BufferedOutputStream:用于从缓冲区输入流中读写数据。采用缓冲区流可减少实际上从外部输入设备上读写数据的次数,从而提高效率。DatalnputStream/ DataOutputStream:按读写数据对象的大小从字节流中读写数据,而不是象其它字节流那样以字节为基本单位。PipedlnputStream/ PipedOutputStream:管道输流用于从另一个线程中读写数据。 4.么是异常?说明Java中的异常处理机制?试述JAVA中异常的抛出和传递过程? 答:异常是程序设计语言提供的一种机制,它用于在程序运行中的非常规情况下,控制程序对非常规情况进合理的处理。Java提供了try-catch-finally语句来对异常进行处理。先按照正常顺序执行try子句中的语句,若在执行过程中出现异常,则try子句中还未被执行的语句将再也不会被执行。而程序控制立即转移到catch子句,将发生的异常与catch子句中的异常进行匹配,若找到一个匹配,就执行该catch子句中的语句。处理完异常后,还要执行finally子句中的语句。若没有一个catch子句中的异常与发生的异常匹配,则catch 子句就不会被执行,但还是要执行finally子句中的语句。若在执行try子句中的语句时没有发生异常,则catch子句不被执行,但finally子句中的语句还是会被执行。当一个方法中没有对所发生的异常进行处理,则该异常将被抛出,由调用该方法的方法来处理,这样可以一直往上抛,直至由系统来处理。 5.如何改进下而的程序以提髙其执行性能?对你的改进作岀解释,并写出新的程序。 int i0 URL url 二new URL ("http://java. sun. com/'")。 URLConnection javaSite = url. openConnection0 o InputStream input 二javaSite. getInputStream0 o

最新Java-how-to-program(第六版)答案第六章--1

第六章方法的深入剖析 6.7结果如下: a)7.5 b)7.0 c)0.0 d)0.0 e)6.4 f)6.0 g)-14.0 6.8程序代码为: import java.util.Scanner; public class Exercise1_2 { public static void main( String args[]) { Exercise1_2 e = new Exercise1_2(); Scanner input = new Scanner( System.in ); int time; double account = 0.0; System.out.println("Enter the park time or end with -1:"); time = input.nextInt(); while ( time != -1 ) { System.out.printf("Charge with $%.3f\n", e.calculateCharge( time )); account += e.calculateCharge( time ); System.out.println("Enter the park time or end with -1:"); time = input.nextInt(); } System.out.printf("The total park money is $%.3f.", account); } public double calculateCharge( int time ) { double charge; if ( time <= 3 ) charge = 2.00; else if ( time <= 24 ) charge = 2.00+(time-3)*0.50;

java语言程序设计第八章第十一题参考答案

为一个2*2的线性方程设计一个名为LinearEquation的类,然后编写一个测试程序测试它: 代码:/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author Administrator */ class LinearEquation{ int a,b,c,d,e,f; LinearEquation(int a,int b,int c,int d,int e,int f){ this.a=a; this.b=b; this.c=c; this.d=d;

this.e=e; this.f=f; } int getA(){ return a; } int getB(){ return b; } int getC(){ return c; } int getD(){ return d; } int getE(){ return e; } int getF(){ return f; } boolean isSolvable(){

return a*d-b*c!=0?true:false; } int getX(){ return (e*d-b*f)/(a*d-b*c); } int getY(){ return (a*f-e*c)/(a*d-b*c); } } public class XiTi811 { public static void main(String[] args){ System.out.println("请输入a,b,c,d,e,f的值:"); java.util.Scanner input=new java.util.Scanner(System.in); System.out.print("a="); int a=input.nextInt(); System.out.print("b="); int b=input.nextInt();

Java核心技术习题答案

Java核心技术 习题答案 马志强张然李雷孝编 清华大学出版社 目录 第一章Java语言概述 (3) 第二章 Java语法基础 (4) 第三章面向对象编程 (15) 第四章数组 (38) 第五章高级类特性 (45) 第六章 GUI编程 (51) 第七章集合框架 (62) 第九章集合框架 (77) 第十章 IO流 (81) 第十一章 JDBC访问数据库 (84) 第十二章线程 (85) 第十三章网络编程 (90)

第一章Java语言概述 一、选择题 1-5 ABBBB 6-8 AAB 二、填空题 1. MyClass MyClass.class 2. String数组(String[])一 3. javac A.java java A 三、程序设计题 1、搭建Java运行环境,并写一个Java程序打印输出“开始学习Java程序设计!”。 1)首先安装JDK; 2)配置环境变量path,classpath可配可不配; 3)FirstJava.java public class HelloWorld{ public static void main(String[] args){ 开始学习Java程序设计!"); } } 2、修改下面四个Java源文件中的错误,使其能够编译和运行。 Test1.java:TestAnother1类不能再使用public修饰,一个源文件中只能有一个类或者接口用public修饰; Test2.java:源文件中public修饰的类的名字为Testing2,和源文件名字不一致; Test3.java:Test3类的main方法的形参类型为String[]; Test4.java:Test4类的main方法必须使用static关键字修饰。

Java语言程序设计郑莉第八章课后习地的题目详解

Java语言程序设计 第八章课后习题答案 1.进程和线程有何区别,Java是如何实现多线程的。 答:区别:一个程序至少有一个进程,一个进程至少有一个线程;线程的划分尺度小于进程;进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 Java程序一般是继承Thread 类或者实现Runnable接口,从而实现多线程。 2.简述线程的生命周期,重点注意线程阻塞的几种情况,以及如何重回就绪状态。 答:线程的声明周期:新建-就绪-(阻塞)-运行--死亡 线程阻塞的情况:休眠、进入对象wait池等待、进入对象lock池等待; 休眠时间到回到就绪状态;在wait池中获得notify()进入lock池,然后获得锁棋标进入就绪状态。 3.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000毫秒以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。 (注:两个类,相同一个测试类) //Runnable接口实现的线程runable类 public class runnable implements Runnable {

private String city; public runnable() {} public runnable(String city) { this.city = city; } public void run() { for (int i = 0; i < 10; i++) { System.out.println(city); try { //休眠1000毫秒。 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } // Thread类实现的线程thread类 public class runnable extends Thread { private String city; public runnable() {}

JAVA复习题及答案

第一章JA V A概述 1.JA V A中哪三种平台:Java ME(嵌入式平台),Java SE(标准平台),Java EE(企业级平台). 2.JA V A从第几版称为JA V A2:JA V A 1.2版。 3.JA V A有否指针:无。 4.JA V A的API指的是什么:Application Programming Interface,JA V A的类库。 5.JA V A平台无关性是如何实现的:通过编译生成与平台无关的代码──字节码,而不是通常的特定机器上的机 器码,由平台上的Java虚拟机中的Java解释器解释执行。 6.JA V A有哪两种程序形式:Application和Applet程序。 7.Application程序运行时系统调用程序的哪个方法:main()方法。Applet程序执行时系统自动调用程序的哪个方 法:init()方法。 8.绘图程序中系统自动调用哪个方法:paint(Graphics g)方法。 9.JDK是什么:Java开发工具包(Java Development Kit ) 的缩写,包括JAVA类库、JAVA编译器、JAVA解释 器、运行时环境、命令行工具。 10.有哪几种主要的可视化的集成源程序编辑环境:Eclipse, JCreator, JBuilder等。 11.安装JDK的可执行文件是:jdk-1_5_0-windows-i586.exe 12.安装JDK帮助文档的是:jdk-1_5_0-doc.zip 第二章JA V A语言基础 13.保留字是什么意思,能否用于程序员定义自己的类、方法、变量等名字:JA V A中已定义的用于特定用途的标 识符。不能。 14.i++与++i有什么区别? 15.写出各种转义字符?p17。\t, \n, \r, \‖, \’, \\ 16.编程良好习惯中,对象名、包名、类名、变量名、常量名、接口名、方法名中的字符的大小写如何设置?Package –名词且小写;Class--名词且第一个字母大写;Interface—同Class;Methods-动词且第一个字母小写,分隔词第一个字母大写,不用‖-―;Variable—第一个字母小写,不用‖_‖,‖$‖(对于inner class有意义);Constants—大写并用‖_‖ 17.标识符的用途:用于给类、方法、变量、接口、程序块、对象等起名字。 18.标识符中可否有空格,可否有#号:不能,只能有字母、下划线、美元符、数字 19.判断合法的标识符:identifier,userName,_FH User_Name ,_sys_val,$change 2mail,room#//,class,ab-cd,ac eh 20.JA V A中标识符大小写敏感吗? 21.实数类型的两种类型中哪种是默认的:double。 22.float和int型的数据各占多少位(bit)。32位 23.什么叫局部变量:方法内部的变量。 24.局部变量有默认值吗:没有。 25.局部变量出了方法体后还存在吗:不存在。 26.一个变量可以重复定义吗:不能。 27.低级类型的数据与高级类型的数据进行运算时,怎样进行类型转化:低级的类型首先自动转化为高级类型,然 后进行运算。 28.域(field)变量应该定义在方法之外还是方法之内:之外。 29.sum+=i的展开式:sum=sum+i 30.计算a+=a*=b-=(a=4)*(b=2)的结果,其中初始时a=4,b=2。 31.―&‖和―&&‖的区别? 32.关系运算符与逻辑运算符哪个优先级高,为什么:关系,因为关系运算的结果false或true用于逻辑运算。 33.以下计算结果是否对?

《java2实用教程》(第四版)课后答案 第七章-第八章

Java程序设计第三次作业 第7章习题 4.1程序代码 import java.util.*; public class SUMANDAVERAGE { public static void main(String[] args) { Scanner reader=new Scanner(System.in); double sum=0; int m=0; while(reader.hasNextDouble()){ double x=reader.nextDouble(); assert x>=0&&x<=100:"该数是非法的成绩数据!"; m=m+1; sum=sum+x; } System.out.printf("%d个数的和为%f\n", m,sum); System.out.printf("%d个数的平均值为%f\n",m,sum/m); } } 4.2运行结果 第8章习题 4.1程序代码 package kehou; import java.util.Calendar; import java.util.InputMismatchException; import java.util.Scanner; public class BC8_4 { public static void main(String[] args) { System.out.print("请选择你要完成的功能:\n1,转换字母大小写及连接两个字符串。\n2,得到字符串第一个和最后一个字符。\n3,计算两个时间之间的间隔天数。\n" + "4,使用简单的Math类用法。\n5,剔除字符串中的非数字字符。\n6,解析字符串。\n."); System.out.print("输入数字i(i=1...6;输入0结束!):"); Scanner reader=new Scanner(System.in);

数据结构Java版第五章习题

第五章习题 数组、矩阵 (按照自己的情况选作部分习题,不要抄袭) 一、单项选择题 1. 二维数组M 的成员是6个字符(每个字符占一个存储单元)组成的串,行下标i 的范 围从0到8,列下标j 的范围从1到10,则存放M 至少需要(1)个字节;M 的第8列和第5行共占(2)个字节;若M 按行优先方式存储,元素M[8][5]的起始地址与当M 按列优先方式存储时的(3)元素的起始地址一致。() (1) A.90 B.180 C.240 D.540 (2) A.108 B.114 C.54 D.60 (3) A.M[8][5] B.M[3][10] C.M[5][8] D.M[0][9] 2. 二维数组M 的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i 的范 围从0到4,列下标j 的范围从0到5,M 按行存储时元素M[3][5]的起始地址与M 按列存储时元素(1)的起始地址相同。() A.m[2][4] B.M[3][4] C.M[3][5] D.M[4][4] 3. 数组A 中,每个元素A 的存储占3个单元,行下标i 从1到8,列下标j 从1到10,从首地址SA 开始连续存放在存储器内,存放该数组至少需要的单元个数是(1),若该数组按行存放时,元素A[8][5]的起始地址是(2),若该数组按列存放时,元素A[8][5]的起始地址是(3)。 (1) A. 80 B.100 C.240 D.270 (2) A.SA+141 B.SA+144 C.SA+222 D.SA+225 (3) A.SA+141 B.SA+180 C.SA+222 D.SA+225 4. 稀疏矩阵一般的压缩存储方法有两种,即() A.二维数组和三维数组 B. 三元组和散列 C.三元组和十字链表 D. 散列和十字链表 5.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点() A.正确 B.错误 6.假设按行优先存储整数数组A[9][3][5][8]时,第一个元素的字节地址时100,每个整数占4个字节。问下列元素的存储地址是什么。 (1) a 0000 (2)a 1111 (3)a 3125 (4)a 8247 7.设有三对角矩阵A n×n ,将其三条对角线上的元素存于数组B[3][n]中,使得元素B[u][v]=a ij ,试推倒出从(i,j )到 (u,v)的下标变换公式。 8.假设一个准对角矩阵: a 11 a 12 a 21 a 22 a 33 a 34 a 43 a 44

Java语言程序设计(郑莉)第六章课后习题答案

Java语言程序设计 第六章课后习题答案 1.将本章例6-1至6-18中出现的文件的构造方法均改为使用File类对象作为参数实现。 个人理解:File类只能对整文件性质进行处理,而没法通过自己直接使用file.Read()或者是file.write()类似方法对文件内容进行写或者读取。注意:是直接;下面只提供一个例2变化,其他的你自己做,10几道啊,出这题的人真他妈有病。 import java.io.*; public class test6_2{ public static void main(String[] args) throws IOException { String fileName = "D:\\Hello.txt"; File writer=new File(fileName); writer.createNewFile(); BufferedWriter input = new BufferedWriter(new FileWriter(writer)); input.write("Hello !\n"); input.write("this is my first text file,\n"); input.write("你还好吗?\n"); input.close(); } } 运行结果:(电脑系统问题,没法换行,所以一般使用BuffereWriter中newLine()实现换行) 2.模仿文本文件复制的例题,编写对二进制文件进行复制的程序. // CopyMaker类 import java.io.*; class CopyMaker { String sourceName, destName; BufferedInputStream source; BufferedOutputStream dest; int line; //打开源文件和目标文件,无异常返回true private boolean openFiles() {

《Java基础入门》课后章节习题及答案(完整版)

《Java基础入门》课后章节习题及答案(完整版)《Java基础入门》课后习题 第1章Java开发入门 一、填空题 1、Java的三大体系分别是_JavaSE_____、_JavaEE_____、_JavaME_____。 2、Java程序的运行环境简称之为JRE_____。 3、编译Java程序需要使用_javac_____命令。 4、javac.exe和java.exe两个可执行程序存放在JDK安装目录的bin______目录下。 5、path______环境变量用来存储Java的编译和运行工具所在的路径,而_classpath_____环境变量则用 来保存保存Java虚拟机要运行的“.class”文件路径。 二、选择题 1、以下选项中,哪些属于JDK工具?(多选)ABCD A、Java编译器 B、Java运行工具 C、Java文档生成工具 D、Java打包工具 2、Java属于以下哪种语言?C A、机器语言 B、汇编语言

C、高级语言 D、以上都不对 3、下面哪种类型的文件可以在Java虚拟机中运行?D A、.java B、.jre C、.exe D、.class 4、安装好JDK后,在其bin目录下有许多exe可执行文件,其中java.exe命令的作用是以下哪一种?B A、Java文档制作工具 B、Java解释器 C、Java编译器 D、Java启动器 5、如果jdk的安装路径为:d:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java 命令,需要将环境变量path设置为以下哪个选项?B A.d:\jdk; B.d :\jdk\bin; C.d:\jre\bin; D.d:\jre; 三、问答题 1、简述Java的特点。 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、简述JRE与JDK的区别。

Java大学实用教程课后答案

第一章 1.发明java的原因是什么,发明java的主要贡献者是谁? 答:开发java语言的动力源于对独立平台的需要,即用这种语言编写的程序不会因为芯片的变化而发生无法运行或出现运行错误的情况。当时,c语言已无法满足人们的这一愿望,因为c语言总是针对特定的芯片将源程序编译成机器码,该机器码的运行就与特定的芯片指令有关,在其他类型的芯片上可能无法运行或者运行出错。主要贡献者是James Gosling。 2.“java编译器将源文件编译生成的字节码是机器码”,这句话正确吗?答:不正确,字节码是很接近机器码的二进制文件,不能被机器直接识别。 3. java应用程序的主类必须含有怎么样的方法? 4. "java应用程序必须有一个类是public类".这句话正确吗? 答:一个java应用程序必须有一个类含有public static void main(String args[] )方法,称为该应用程序的主类。 5. "java applet程序的主类必须是public类",这句话正确吗?不正确 "java applet源文件的主类必须是public类",这句话正确吗?正确 6. 叙述java源文件的命名法则。 答:(1)如果源文件中有多个类,那么只能有一个类是public类。(2)如果有一个类是public类,那么源文件的名字必须和这个类的名字完全相同,扩展名为.java(3)如果源文件没有public类,那么源文件的名字只要和某个类的名字相同,并且扩展名为.java就可以了。(4)java语言区分大小写。 7. 源文件生成的的字节码运行时加载到内存中吗? 8. 怎样编写加载运行java applet的简单网页? 9. JDK1.6编译器使用"-source"参数的作用是什么,其默认的参数取值是什么? 答:在编译源文件时使用"-source"参数来约定字节码适合的java平台。 1.6 第二章 1. 什么叫标识符,标识符的规则是什么? 答:用类标识类名、变量名、方法名、数组名、类型名、文件名的有效字符序列称为标识符。规则:标识符由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字,标识符中的字母是区分大小写的。

Java核心技术习题答案

Java核心技术习题答案 马志强张然李雷孝编 清华大学出版社

目录 第一章Java语言概述 (3) 第二章 Java语法基础 (4) 第三章面向对象编程 (11) 第四章数组 (25) 第五章高级类特性 (26) 第六章 GUI编程 (26) 第七章集合框架 (29) 第九章集合框架 (42) 第十章 IO流 (46) 第十一章 JDBC访问数据库 (46) 第十二章线程 (48) 第十三章网络编程 (53)

第一章Java语言概述 一、选择题 1-5 ABBBB 6-8 AAB 二、填空题 1. MyClass 2. String数组(String[])一 3. javac java A 三、程序设计题 1、搭建Java运行环境,并写一个Java程序打印输出“开始学习Java程序设计!”。 1)首先安装JDK; 2)配置环境变量path,classpath可配可不配; 3) public class HelloWorld{ public static void main(String[] args){ "开始学习Java程序设计!"); } } 2、修改下面四个Java源文件中的错误,使其能够编译和运行。 :TestAnother1类不能再使用public修饰,一个源文件中只能有一个类或者接口用public修饰; :源文件中public修饰的类的名字为Testing2,和源文件名字不一致; :Test3类的main方法的形参类型为String[]; :Test4类的main方法必须使用static关键字修饰。

第二章 Java语法基础 一、选择题 1-5 BCADB 6-9 DCCC 二、填空题 1. abc ,a1, _abc, _1a, ab123 #a,const,$abc,1abc,if,$#1sa,$_a,_$q1 2.题目出现问题:代码修改为 ch = (char) (ch+1);结果为’B’;如果直接结果为 98。 (真) false(假) 5. 2 2 false 2 *20/100 (double)m*20/100 三、编程题 1、由命令行输入一个成绩,使用switch结构求出成绩的等级。A:90-100; B:80-89;C:70-79;D:60-69;E:0-59。 import class IfElseTest { public static void main(String[] args) { Scanner sc = new Scanner; int grade = (); if(grade<0 || grade>100){ "aaaa"); (0); } int temp =(int)(grade/10);

《Java语言程序设计(基础篇)》(第10版 梁勇 著)第八章练习题答案

《Java语言程序设计(基础篇)》(第10版梁勇著) 第八章练习题答案 8.1 public class Exercise08_01 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter a 3 by 4 matrix row by row: "); double[][] m = new double[3][4]; for (int i = 0; i < m.length; i++) for (int j = 0; j < m[i].length; j++) m[i][j] = input.nextDouble(); for (int j = 0; j < m[2].length; j++) { System.out.println("Sum of the elements at column " + j + " is " + sumColumn(m, j)); } } public static double sumColumn(double[][] m, int columnIndex) { double total = 0; for (int i = 0; i < m.length; i++) total += m[i][columnIndex]; return total; } } 8.1附加 public class Exercise08_01Extra { public static void main(String[] args) { final int N = 2; Scanner input = new Scanner(System.in); double[][] A = new double[N][N]; System.out.print("Enter a, b, c, d: "); A[0][0] = input.nextDouble(); A[0][1] = input.nextDouble();

JAVA语言程序设计(第8版)第5章完整答案programmingexercises(程序练习题)答案完整版

5_1 public class Exercise01 { public static void main(String[] args) { final int PENTAGONAL_NUMBERS_PER_LINE = 10; final int PENTAGONAL_NUMBERS_TO_PRINT = 100; int count = 1; int n = 1; while (count <= PENTAGONAL_NUMBERS_TO_PRINT) { int pentagonalNumber = getPentagonalNumber(n); n++; if (count % PENTAGONAL_NUMBERS_PER_LINE == 0) "%-7d\n", pentagonalNumber); else "%-7d", pentagonalNumber); count++; } } public static int getPentagonalNumber(int n) { return n * (3 * n - 1) / 2; } } 5_2 import class Exercise02 { public static void main(String[] args) { Scanner input = new Scanner; ; } } public static int numberOfDaysInAYear(int year) { if (isLeapYear(year)) return 366; else return 365; } public static boolean isLeapYear(int year) {

相关文档
最新文档