Java程序设计课堂练习题课案(共5则范文)

时间:2019-05-12 21:09:35下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Java程序设计课堂练习题课案(共)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Java程序设计课堂练习题课案(共)》。

第一篇:Java程序设计课堂练习题课案(共)

《Java程序设计》练习题

《Java程序设计》练习题

第一章 Java编程基础

一、选择题

1、可以使用【

】实用程序编译Java程序。A.java B.javac C.javadoc D.cmd

2、可以使用【

】实用程序运行java应用程序。A.java B.javac C.javadoc D.cmd

3、可以使用【

】实用程序从Java源文件代码中抽取Java文档注释,生成相应的HTML帮助文档。

A.java B.javac C.javadoc D.cmd

4、Java编译单元(源程序文件)的扩展名为【

】 A..java B..class C..doc D..exe

5、编译Java源程序文件产生的字节码文件的扩展名为【

】 A..java B..class C..html D..exe

6、以下Java应用程序执行入口main方法的声明中,正确的是【

】 A、public static void main()B、public static void main(String[] args)C、public static int main(String[] args)D、public void main(String[] args)

7、Java属于以下哪种语言?【

A.机器语言 B.汇编语言 C.高级语言 D.以上都不对

8、下面哪种类型的文件可以在Java虚拟机中运行?【

】 A..java B..jre C..exe D..classs

9、Java程序中声明包的关键字是【

A、java

B、package C、javadoc

D、cmd

10、如果JDK的安装路径为“d:jdk”,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项?【

A、d:jdk; B、d:jdkbin; C、d:jrebin; D、d:jre;

11、下列说法中,不正确的是【

】。

A、一个Java源文件编译通过后,得到的结果文件数也只有一个 B、一个Java源文件经过编译后,得到的文件的扩展名一定是.class C、一个Java源文件只能有一个public类定义,其类名与源文件名相同 D、一个Java源文件可以包含多个类

《Java程序设计》练习题

12、安装好JDK后,在其bin目录下有许多exe可执行文件,其中“java.exe”命令的作用是以下哪一种?【

】。A、Java文档制作工具 B、Java解释器 C、Java编译器 D、Java启动器

13、以下关于变量的说法错误的是【

】 A.变量名必须是一个有效的标识符 B.变量在定义时可以没有初始值

C.变量一旦被定义,在程序中的任何位置都可以被访问

D.在程序中,可以将一个byte类型的值赋给一个int型类型的变量,不需要特殊声明

14、假设int x=2,三元表达式x>0?x+1:5的运行结果是以下哪一个?【

】 A.0 B.2 C.3 D.5

15、下面的运算符中,用于执行除法运算的是哪个?【

】 A./ B. C.% D.*

16、下面哪种写法可以实现访问数组arr的首个元素?【

】 A.arr[0] B.arr(0)C.arr[1] D.arr(1)

17、以下哪个选项可以正确创建一个长度为3的二维数组?【

】 A.new int[2][3] B.new int[3][] C.new int[ ][3] D.以上答案都不对

18、关于变量的作用域,下列说法错误的是【

】 A.类成员变量的作用域为类定义体 B.方法参数的作用域为方法体

C.对于for语句中定义的变量,当for语句执行完时,该变量就消亡了 D.在方法void f(int i)的for语句块中,可以声明变量“int i;”

19、Java字符类型采用的是Unicode编码方案,每个Unicode码占用的位数是【

】。

A.8

B.16 C.32 D.64 20、下列赋值语句中,不合法的是【

】。A.float f=1.2 B.float f2=1.2f C.double d=1.2 D.double d2=1.2f

二、填空题

1、Java的三个技术平台分别是_java se___、__java ee__、__javame__。

2、Java程序的运行环境简称之为_jre___。

3、编译Java程序需要使用__javac__命令。

《Java程序设计》练习题

4、_____path____环境变量用来存储Java的编译和运行工具所在路径,而___classpath__环境变量则用来保存Java虚拟机要运行的“.class”文件路径。

5、在Java语言中,main()方法的参数是表示命令行参数的String数组,其中,__args[0]__表示第一个参数。

6、Java应用程序的入口方法是_____main()__,用于控制程序的开始和结束。

7、Java系统运行时,通过__自顶垃圾收集___机制周期性地释放无用对象所使用的内存,完成对象的清除。

8、Java中的程序代码都必须在一个类中定义,类使用_class__关键字来定义。

9、布尔常量即布尔类型的两个值,分别是__true__和__false___。

10、Java中的注释可分为三种类型,分别是__单行___、___多行____、____文档___。

三、判断题

1、Java语言采用面向对象的思想编程,具有跨平台、分布式、多线程等优点。

2、Java语言的语法与C或C++类似,也支持面向过程的程序设计技术。

3、Java提供了自动垃圾收集机制进行内存管理,减小了内存出错的可能性。

4、Java语言的平台无关性使得Java程序可以跨平台运行。

5、Java虚拟机是实现Java语言平台无关性的基础。

四、简答题

1、简述JRE与JDK的区别。

JRE,它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。

它包含编译工具、解释工具、文档制作工具、打包工具等多种与开发相关的工具,是提供给Java开发人员使用的。初学者学习和使用Java语言时,首先必须下载和安装JDK。JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。

2、什么是方法重载?

方法重载指的是在一个类中可以声明多个同名的方法,而方法中参数的个数或者数据类型不一致。调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。

第二章 面向对象思想

一、选择题

1、类的定义必须包含在以下哪种符号之间?【

A.方括号[] B.花括号{} C.双引号“” D.圆括号()

《Java程序设计》练习题

2、在以下什么情况下,构造方法会被调用?【

】 A.类定义时 B.创建对象时 C.调用对象方法时 D.使用对象的变量时

3、在类的继承关系中,需要遵循以下哪个继承原则?【

】 A.多重 B.单一 C.双重 D.不能继承

4、在Java语言中,以下哪个关键字用于在方法上声明抛出异常【

】 A、try B、catch C、throws D、throw

5、关于super关键字以下说法哪些是不正确的【

】。A.super关键字可以调用父类的构造方法 B.super关键字可以调用父类的普通方法

C.super与this不能同时存在于同一个构造方法中 D.super与this可以同时存在于同一个构造方法中

6、类中的一个成员方法被下面哪个修饰符修饰时,该方法只能在本类被访问?【

】。

A.public B.protected C.private D.default

7、在Java中,要想让一个类继承另一个类,可以使用以下哪个关键字?【

】 A、inherits B、implements C、extends D、modifies

8、System类位于以下哪个包中?【

】。

A、java.io B、java.util C、java.awt D、java.lang

9、以下关于继承的说法,正确的是【

】。A.继承可以避免代码复制和相关的代码维护等问题 B.Java语言中一个子类可以继承多个基类(多重继承)C.Java语言不允许实现多个接口

D.子类可以继承父类的方法,但不能重新改写父类的方法

10、下列修饰符中,不能用来修饰类的是【

】。A.public B.abstract C.final D.static

二、填空题

1、面向对象的三大特征是__封装___、___继承___和____多态___。

2、在Java中,可以使用关键字__new___来创建类的实例对象。

3、定义在类中的变量被称为__成员变量_____,定义在方法中的变量被称为__局部变量___。

4、在非静态成员方法中,可以使用关键字_this_访问类的其他非静态成员。

5、被static关键字修饰的成员变量被称为__静态变量____,它可以被该类所有的实例对象共享。

《Java程序设计》练习题

6、在一个类中,除了可以定义属性、方法,还可以定义类,这样的类被称为__内部类___。

7、在Java语言中,允许使用已存在的类作为基础创建新的类,这种技术称为___继承__。

8、一个类如果实现一个接口,那么它就需要实现接口中定义的全部_方法_,否则该类就必须定义成____抽象类__。

9、在程序开发中,要想将一个包中的类导入到当前程序中,可以使用_import_关键字。

10、一个类可以从其他的类派生出来,派生出来的类称为__子类__,用于派生的类称为__父类__或者_基类__。

三、判断题

1、在定义一个类的时候,如果类的成员被private所修饰,该成员不能在类的外部被直接访问。

2、Java中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。

3、声明构造方法时,不能使用private关键字修饰。

4、类中static修饰的变量或方法,可以使用类名或对象的引用变量访问。

5、方法内部类中不能访问外部类的成员变量。

四、简答题

1、构造方法和普通的成员方法有什么区别?

2、抽象类和接口的区别是什么?

3、什么叫多态?

1.构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。而普通方法只有在使用的时候才会被调用。在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值。

2.在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。

接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。由于接口的特殊性,在定义时需要使用interface关键字。

3.多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。

《Java程序设计》练习题

第三章 多线程

一、选择题

1、Thread类位于下列哪个包中?【

A.java.io B.java.lang C.java.util D.java.awt

2、线程调用sleep()方法后,该线程将进入以下哪种状态?【

】 A.就绪状态 B.运行状态 C.阻塞状态 D.死亡状态

3、在以下哪种情况下,线程进入就绪状态?【

】。A.线程调用了sleep()方法时 B.线程调用了join()方法 C.线程调用了yield()方法时 D.线程调用了notify()方法

4、对于通过实现Runnable接口创建线程,下面说法不正确的是【

】。A、适合多个相同程序代码的线程去处理同一个资源的情况

B、把线程同程序代码、数据有效的分离,很好地体现了面向对象的设计思想 C、可以避免由于Java的单继承带来的局限性 D、编写简单,可以不通过Thread类直接创建线程

5、对于死锁的描述,下面四种说法不正确的是【

】。A.当两个线程互相等待对方释放同步锁时会发生死锁 B.Java虚拟机没有检测和处理死锁的措施 C.一旦出现死锁,程序会发生异常

D.处于死锁状态的线程处于阻塞状态,无法继续运行

6、下面四个选项中,不是线程进入阻塞状态的原因是【

】。A.线程试图获取某个对象的同步锁,而该锁被其他线程持有 B.线程调用了另一个线程的join()方法 C.线程调用了一个阻塞式的IO方法 D.线程调用了setDaemon(boolean b)方法

7、要创建一个线程类,可通过继承【

】类。A、Object B、Thread C、Runnable D、Task

8、通过实现【

】接口,可创建一个线程类 A、Object B、Thread C、Runnable D、Task

9、通过重写继承的方法【

】,可实现线程要执行的逻辑操作。A.start()B.main()C.run()D.execute()

10、通过调用线程对象实例的【

】方法,可以启动执行该线程。A.start()B.main()C.run()D.execute()

二、填空题

1、一个应用程序中有多条并发执行的线索,每条线索都被称作一个__线程_,它

《Java程序设计》练习题

们会交替执行,彼此间可以进行__通信__。

2、在实现多线程的程序时有两种方式,一是通过继承__thread_类,二是通过实现__runnable___接口。

3、yield()方法只能让相同优先级或者更高优先级、处于__就绪_状态的线程获得运行的机会。

4、在Java语言中,同步方法需要用到关键字__synchronized___,对于同步方法而言无须指定同步锁,它的同步锁是方法所在的_对象__,也就是_this__(关键字)。

5、在Thread类中,start()方法用于开启一个_新线程___,当线程启动后,系统会自动调用___run()__方法。

三、判断题

1、当创建一个线程对象时,该对象表示的线程就立即开始运行。

2、如果前台线程全部死亡,后台线程也会自动死亡。

3、同步代码块中的锁对象可以是任意类型的对象。

4、静态方法不能使用synchronized关键字来修饰。

5、线程结束等待或者阻塞状态后,会进入运行状态。

四、简答题

1、在Java中创建线程有几种方式?

2、sleep()和wait()有什么区别?

五、分析题

1、阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。class RunHandler{

} public class Test{

} public static void main(String[] args){

} Thread t=new Thread(new RunHandler());t.start();public void run(){ } System.out.println(“run”);

《Java程序设计》练习题

2、阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。public class A extends Thread{

}

3、阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。public class Test{

}

六、设计题

1、声明线程类TalkThread,循环打印线程名称10次(表示10次发言机会);创建测试类,创建3个对象(表示3个发言人)并启动线程,观察输出结果(3个发言人的发言顺序)。

第四章 Java API

一、选择题 private Object obj=new Object();public synchronized void a(){

} public static void main(String[] args){ } new Test().a();try{

} obj.wait();System.out.println(“waiting”);System.out.println(“Exception”);protected void run(){ } public static void main(String[] args){

} A a=new A();a.start();System.out.println(“this is run()”);}catch(InterruptedException e){

《Java程序设计》练习题

1、先阅读下面的程序片段 String str=“abccdefcdh” String[] arr=str.split(“c”);System.out.println(arr.length);程序执行后,打印的结果是几?【

】 A.2 B.3 C.4 D.5

2、以下都是Math类的常用方法,其中用于计算绝对值的方法是哪个【

】。A.ciel()B.floor()C.abs()D.random()

3、Random对象能够生成以下哪种类型的随机数?【

】。A.int B.String C.double D.A和C

4、String s=“abcdedcba”;则s.subString(3,4)返回的字符串是以下选项中的哪个?【

】。

A、cd B、de C、d D、e

5、假如indexOf()方法未能找到所指定的子字符串,则返回以下选项中的哪个?【

】。

A.false B.0 C.-1 D.以上答案都不对

6、以下Math类的方法中,-4.4通过哪个方法运算后,结果为-5.0【

】。A.round()B.min()C.floor()D.ceil()

7、已知int i=(int)(Math.random()*100),则i不可能为【

】。A.0 B.1 C.99 D.100

8、已知String str=“abc计算机123”,则str.length()的值为【

】。A.9 B.10 C.12 D.18

9、已知String a=“Hello”,String b=a.subString(0,2),则b=【

】。A.Hello B.He C.Hel D.null

10、下列方法中,【

】不是StringBuffer类的成员方法 A.compareTo()B.indexOf C.append D.charAt()

二、填空题

1、在Java中定义了两个类来封装对字符串的操作,它们分别是___________和_________________。

2、Java中操作日期的类有____________、_____________、_______________。

3、Math类中用于计算所传递参数平方根的方法是_______________。

4、Java中专门用于将日期格式化为字符串的类是________________。

5、Java中用于产生随机数的类是_____________,它位于_____________包中。

6、String类中用于返回字符串字符个数的方法是________________。

《Java程序设计》练习题

三、判断题

1、String对象和StringBuffer对象都是字符串变量,创建后都可以修改。

2、用运算符==比较字符串对象时,如果两个字符串的值相同,结果为true。

3、Ssytem类中的currentTimeMillis()方法返回一个long类型的值。

4、Date、Calendar以及DateFormat类都位于java.util包中。

5、String类的方法replace(CharSequence str1, CharSequence str2)返回一个新的字符串,它是通过用str2替换此字符串中出现的所有str1得到的。

四、简答题

1、String和StringBuffer有什么区别?

2、Date和Calendar类有什么区别和联系?

第五章 集合类

一、选择题

1、Java语言中,集合类都位于哪个包中?【 】

A.java.util B.java.lang C.java.array D.java.collections

2、使用Iterator时,判断是否存在下一个元素可以使用以下哪个方法?【 】 A.next()B.hash()C.hasPrevious D.hasNext()

3、在程序开发中,经常会使用以下哪个类来存储程序中所需的配置?【 】 A.HashMap B.TreeSet C.Properties D.TreeMap

4、要想集合中保存的元素没有重复并且按照一定的顺序排列,可以使用以下哪个集合?【 】

A.LinkedList B.ArrayList C.HashSet D.TreeSet

5、以下哪个方法不是LinkedList集合中定义的?【 】

A.getLast()B.getFirst()C.remove(int index)D.next()

6、获取单列集合中元素的个数可以使用以下哪个方法?

A.length()B.size()C.get(int index)D.add(Object obj)

7、下列集合类型中,不允许集合中存在重复项的是【 】 A.Collection B.List C.Set D.Queue

8、下列关于List接口的说法,错误的是【 】 A.继承Collection接口 B.不允许重复项 C.支持遍历 D.可以使用访问索引

9、下列关于Set接口的说法,错误的是【 】 A.继承Collection接口 B.不允许重复项 C.支持遍历 D.可以使用访问索引

《Java程序设计》练习题

10、下列关于Collections类的静态方法binarySerach()的说法,错误的是【 】

A.使用二分搜索法搜索指定列表 B.如果没有找到,则返回负值 C.查找前列表必须先排序

D.如果有多个相同元素,则返回第一个的索引

二、填空题

1、JDK中提供了一系列可以存储任意对象的类,统称为____________

2、在创建TreeSet对象时,可以传入自定义的比较器,自定义比较器需要实现_______________接口。

3、使用Iterator遍历集合时,首先需要调用______________方法判断是否存在下一个元素,若存在下一个元素,则调用_____________方法取出该元素。

4、使用Iterator遍历集合时,首先需要调用______________方法判断是否存在下一个元素,若存在下一个元素,则调用_____________方法取出该元素。

5、集合按照存储结构的不同可分为单列集合和双列集合,单列集合的根接口是________________,双列集合的根接口是___________。

6、Map集合中的元素都是成对出现的,并且都是以__________、_________的映射关系存在。

7、Iterator有一个子类,不仅可以对集合进行从前向右遍历,还可以从后向前遍历,该类是______________。

8、List集合的主要实现类有__________、__________,Set集合的主要实现类有__________、__________,Map集合的主要实现类有__________、_________。

9、Map集合中存在元素需要调用____________方法,要想根据该集合的键获取对应的值需要调用___________方法。

10、java.util包中提供了一个专门用来操作集合的工具类,这个类是________,还提供了一个专门用于操作数组的工具类,这个类是____________。

三、判断题

1.Set集合是通过键值对的方式来存储对象的。

2.集合中不能存放基本数据类型,而只能存放引用数据类型。

3.如果创建的TreeSet集合中没有传入比较器,则该集合中存入的元素需要实现Comparable接口。

4.使用Iterator迭代集合元素时,可以调用集合对象的方法增删元素。5.LinkedList在内部维护了一个双向循环链表,每一个元素节点都包含前一个元素节点和后一个元素节点的引用。

《Java程序设计》练习题

四、简答题

1、集合中的List、Set、Map有什么区别?

2、请说说Collection和Collections有什么区别?

五、分析题

1、分析下面的程序,然后写出程序的运行结果: import java.util.*;public class Exp0719 {

}

2、分析下面的程序,然后写出程序的运行结果: import java.util.*;public class Exp0720 {

public static void main(String[] args){

TreeMap tm = new TreeMap();tm.put(“1”, “Jack”);tm.put(“2”, “Rose”);tm.put(“3”, “Lucy”);Set keySet = tm.keySet();Iterator it = keySet.iterator();while(it.hasNext()){ Object key = it.next();Object value = tm.get(key);public static void main(String[] args){

} Map map = new LinkedHashMap();map.put(“1”, “Jack”);map.put(“2”, “Rose”);map.put(“3”, “Lucy”);Set keySet = map.keySet();Iterator it = keySet.iterator();while(it.hasNext()){

} Object key = it.next();Object value = map.get(key);System.out.println(key + “:” + value);

《Java程序设计》练习题

}

} } System.out.println(key + “:” + value);

六、设计题

1、已知学生类s6_Stud4,成员变量有no(学号,int)、name(姓名,String)、chinese(语文成绩,int)和math(数学成绩,int)。编程,要求按总成绩降序排列,若总成绩相同,按语文成绩降序排列,并编制简单的测试类。

第六章 Java IO(输入输出)

一、选择题

1、以下选项中,哪个是FileOutputStream的父类【

A.File B.FileOutput C.OutputStream D.InputStream

2、File类中以字符串形式返回文件绝对路径的方法是 【

】 A.getParent()B.getName()C.getAbsolutePath()D.getPath()

3、以下哪个不是InputStream类的方法?【

】 A.int read(byte[])B.void flush()C.DataOutputStream D.available

4、以下选项中,哪个流中使用了缓冲区技术?【

】 A.BufferedOutputStream B.FileInputStream C.DataOutputStream D.FileReader

5、以下选项中,哪个是File类delete()方法返回值的类型?【

】 A.boolean B.int C.String D.Integer

6、以下选项中,哪个文件操作类可以实现一次读入多个文件?【

】。A、FileReader

B、BufferedReader C、FileInputStream

D、SequenceInputStream

7、以下对File类的public boolean isFile()方法的描述,哪个是正确的【

】。A、判断该File对象所对应的是否是文件 B、判断该File对象所对应的是否是目录 C、返回文件的最后修改时间 D、在当前目录下生成指定的目录

8、以下哪个包和Java.nio包共同提供了用于输入/输出流和文件操作的各种类型【

】。

《Java程序设计》练习题

A、java.lang

B、java.util C、java.io

D、java.text

9、BufferedReader的父类是【

】。

A、Reader

B、FileReader

C、PipedReader

D、InputStreamReader

10、要确定磁盘分区的容量和可用空闲空间等信息,可以使用的类是【

】。A、Drive B、Directory C、File D、FileOutputStream

二、填空题

1、Java中的IO流,按照传输数据不同,可分为____________和__________。

2、在Java中,__________类用于操作磁盘中的文件和目录,位于___________包中。

3、在Java中,______________________类用来把两个或更多的InputStream输入流对象合并为单个InputStream输入流对象使用。

4、Java中提供了一个类____________________,它不但具有读写文件的功能,并且可以随机地从文件的任何位置开始执行读写数据的操作。

5、在Java中,能实现线程间通信的流是_____________。

6、InputStreamReader类是用于将____________流转换为____________。

三、判断题

1、如果一个File表示目录下有文件或者子目录,调用delete()方法也可以将其删除。

2、装饰设计模式中,装饰对象应该包含一个被装饰对象的引用。

3、使用ObjectInputStream与ObjectOutputStream类来读取或存储的对象必须要实现Serializable接口,否则程序将出现NotSerializableException异常。

4、InputStream类的close()方法是用于关闭流并且释放流所占的系统资源。

5、一般来说,把字符转换成计算机识别的字节序列称为解码,而把字节序列转换为普通人能看懂的明文字符称为编码。

四、简答题

1、Java流被分为字节流、字符流两大流类,两者有什么区别?

六、设计题

1、创建新的文本文件myFile.txt,从控制台输入内容并写入源文件中,然后读取并显示myFile.txt内容。

2、在指定的文本文件中查找指定的关键字,并打印包含结果的行。文本文件和关键字均由命令行参数指定。

第七章 GUI(图形用户界面)

《Java程序设计》练习题

一、选择题

1、下面四个组件中哪一个不是Component的子类?【

】 A.Button B.Dialog C.Label D.MenuBar

2、每个GUI程序中必须包含一个什么组件【

】 A.按钮 B.标签 C.菜单 D.容器

3、当鼠标按键被释放时,会调用以下哪个事件处理器方法?【

】 A.mouseReleased()B.mouseUp()C.mouseOff D.mouseLetGo

4、ActionEvent的对象会被传递给以下哪个事件处理器方法?【

】 A.addChangeListener()B.addActionListener()C.stateChanged()D.actionPerformed()

5、下面哪个不是FlowLayout类中表示对齐方式的常量?【

】 A.FlowLayout.LEFT B.FlowLayout.CENTER C.FlowLayout.VERTICAL D.FlowLayout.RIGHT

6、下面对Swing的描述,不正确的是【

】。A、Swing是在AWT基础上构建的一套新的图形界面系统 B、Swing提供了AWT所能够提供的所有功能 C、Swing组件是用Java代码来实现的 D、Swing组件都是重量级组件

7、下面四对AWT和Swing对应组件中,错误的是【

】。A、Button和JButton B、Dialog和JDialog C、MenuBar和JMenuBar D、ComboBox和JComboBox

8、使用下面哪个组件可以接收用户的输入信息【

】。

A、JButton

B、JLabel C、JTextField

D、以上都可以

9、JFrame的默认布局管理器为【

】。

A、BorderLayout

B、FlowLayout

C、BoxLayout

GridLayout

10、Japplet的默认布局管理器为【

】。

A、BorderLayout

B、FlowLayout

C、BoxLayout

GridLayout

11、Jpanel的默认布局管理器为【

A、BorderLayout

B、FlowLayout

C、BoxLayout

GridLayout

12、将组件垂直摆放在一列或水平摆放在一行中的布局管理器是【

】15

D、D、D、《Java程序设计》练习题

A、BorderLayout

B、FlowLayout

C、BoxLayout

D、GridLayout

13、下列事件中,不属于低级事件【

】。

A.KeyEvent B.MouseEvent C.Windowevent D.ActionEvent

14、在类中若要处理ActionEvent事件,则该类需要实现的接口是【

】 A.Action B.Runnable C.Serializable D.ActionListener

15、下列关于事件的说法中,不正确的是【

】 A.一个组件可以引发多种事件 B.一个组件可以注册多个事件监听器 C.一个监听器只能监听一个组件 D.一个监听器可以监听处理多种事件

二、填空题

1、在Java中,图形用户界面简称__________,它的组件包含在___________和____________这两个包中。

2、为了避免实现监听器中定义的所有方法,造成代码的臃肿,在JDK中提供了一些__________类,这些类实现了接口所有的方法,但是方法中没有任何代码,属于一种空实现。

3、在Java中,____________类相当于一个抽象的画笔对象,使用它可以在组件上绘制图形。

4、_____________负责监听事件源上发生的事件,并对各种事件做出响应处理。

5、在部分的Swing组件都是_____________类的直接或者间接子类,其名称都是在原来AWT组件名称前加上字母J。

三、判断题

1、容器(Container)是一个可以包含基本组件和其他容器的组件。

2、可以通过实现ActionListener接口或者继承ActionAdapter类来实现动作事件监听器。

3、CardLayout布局管理器将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的。

4、非模态对话框是指用户需要等到处理完对话框后才能继续与其他窗口进行交互。

5、JFrame的默认布局管理器是FlowLayout。

四、简答题

1、简述AWT和Swing的区别。

六、设计题

《Java程序设计》练习题

1、使用JLabel、JTextField、JButton控件实现摄氏温度和华氏温度的转换。运行结果如图所示:

(a)摄氏转华氏

2、编程,在程序中建立一个窗口,其中包含两个文本框和一个按钮,单击按钮,能将一个文本框中的内容复制到另一个文本框中,程序运行结果如图所示:

(b)华氏转摄氏

第八章 网络编程

一、选择题

1、使用UDP协议通信时,需要使用哪个类把要发送的数据打包?【

】 A.Socket B.DatagramSocket C.DatagramPacket D.ServerSocket

2、以下哪个是serverSocket类用于接收来自客户端请求的方法?【

】 A.accept()B.getOutputStream()C.receive()D.get()

3、以下说法不正确的是【

A.TCP连接中必须要明确客户端与服务器端

B.TCP协议是面向连接的通信协议,它提供了两台计算机之间可靠无差错的数据传输

C.UDP协议是面向无连接的协议,可以保证数据的完整性

D.UDP协议消耗资源小,通信效率高,通常被用于音频、视频和普通数据的传输

4、以下哪个类用于实现TCP通信的客户端程序?【

】 A.ServerSocket B.Socket C.Client D.Server

《Java程序设计》练习题

5、进行UDP通信时,在接收端若要获得发送端的IP地址,可以使用DatagramPacket的哪个方法?【

A.getAddress()B.getPort()C.getName()D.getData()

6、以下哪个方法是DatagramSocket类用于发送数据的方法?【

】 A.receive()B.accept()C.set()D.send()

7、在程序运行时,DatagramSocket的哪个方法会发生阻塞?【

】 A.send()B.receive()C.close()D.connect()

8、TCP协议的“三次握手”中,第一次握手指的是什么?【

】 A.客户端再次向服务器端发送确认信息,确认连接

B.服务器端向客户端回送一个响应,通知客户端收到了连接请求 C.客户端向服务器端发出连接请求,等待服务器确认 D.以上答案全部错误

9、TCP/IP系统中的端口号是一个多少位的数字?【

】 A.8 B.16 C.32 D.64

10、要获取URL对象的端口号,可调用其成员方法是【

A.getHost()B.getProtocol()C.getPort()D.getRef()

二、填空题

1、TCP协议的特点是_______________,即在传输数据前先在___________和____________建立逻辑连接。

2、在计算机中,端口是用__________字节,也就是16位的二进制数表示,它的取值范围是_________________。

3、TCP/IP协议被分为四个层:分别是__________、___________、_________、______________。

4、在JDK中,IP地址用________________类表示,该类提供了许多和IP地址相关的操作。

5、使用UDP协议开发网络程序时,需要使用两个类,分别是_______________、__________________。

6、URL一般由3部分组成:______________、主机地址和资源路径。

7、Socket(套接字)由一个IP地址和____________唯一确定。

8、可以通过Socket对象的成员方法______________获取其对应的输入流。

9、可以通过Socket对象的成员方法______________获取其对应的输出流。

10、Java类库java.net包中实现数据报套接字的类是_______________。

三、判断题

1、由于UDP是面向连接的协议,可以保证数据的完整性,因此在传输重要数据

《Java程序设计》练习题

时建议使用UDP协议。

2、在网络通信中,对数据传输格式、传输速率、传输步骤等作了统一规定,只有通信双方共同遵守这个规定才能完成数据的交互,这种规定称为网络传输协议。

3、在创建发送端的DatagramPacket对象时,需要指定发送端的目标IP地址和端口号。

4、IPv4版本的IP地址使用4个字节来表示,IPv6版本的IP地址使用8个字节来表示。

5、使用TCP协议通信时,通信的两端以IO的方式进行数据的交互。

四、简答题

1、TCP协议和UDP协议有什么区别?

2、Socket类和ServerSocket类各有什么作用?

第九章 数据库及其它

一、选择题

1、下列数据库产品中,哪个为适合于个人用户的桌面DBMS【

】 A.Oracle B.Microsoft SQL Server C.IBM DB2 D.Microsoft Access

2、Microsoft SQL Server的数据库模型属于【

A.层次模型 B.网状模型 C.关系模型 D.面向对象的数据模型

3、要删除数据库表,可以使用的SQL命令是【

A.DELETE TABLE B.REMOVE TABLE C.ERASE TABLE D.DROP TABLE

4、在Java编程语言中,JDBC是指【

A.Java类编译程序 B.访问关系数据库的编程接口标准 C.Java类库名称 D.与浏览器交互的一种机制

二、填空题

1、每个数据表中通常都有一个____________,用于唯一确定一条记录。

2、JDBC的相关类都位于_______________包中。

3、通常可以采用Class类的______________静态方法显示地加载一个驱动程序类。

4、使用DriverManager类的_______________静态方法实现与URL所指定的数据源建立连接并返回一个Connection类的对象。

5、_______________________对象是对应于预编译SQL语句的Statement。

6、ResultSet对象具有指向其当前数据行的游标,使用_____________方法可以

《Java程序设计》练习题

将游标移动到下一行。

三、判断题

1、一个数据表中可以设定多个主关键字。

2、重复执行相同结构的SQL语句时,Statement比PreparedStatement具有更高的效率。

3、executeQuery()方法获得的结果集ResultSet对象的游标默认指向第一行数据。

4、默认的ResultSet对象不可更新,仅有一个向前移动的光标。

第二篇:java程序设计简明教程--上机练习题参考答案

《java程序设计简明教程》上机练习题参考答案

目 录

上机练习题1..................................................3 1.用循环语句分别打印九九乘法表......................................................................................................................3 2.定义两个数组......................................................................................................................................................4 3.编写一个简单的考试程序..................................................................................................................................4 上机练习题2..................................................6 1.编写程序,包括一个文本域和三个命令按钮...................................................................................................6 2.编写程序,包括一个文本框、一个密码框和两个按钮...................................................................................7 3.编写程序,建立一个带有菜单的窗体..............................................................................................................8 4.编写程序,将窗口尺寸设置为不可更改,并处理窗口事件...........................................................................9 5.编写程序,用列表框列出一些选项,设置一个按钮.....................................................................................10 6.编写程序,用标签显示一道简单测试题,答案使用单选按钮列出.............................................................11 上机练习题3.................................................13 1.编写Application在窗口内画54个不同颜色的小圆......................................................................................13 2.编制Applet程序,使用Graphics类中的各种图形绘制方法........................................................................14 3.编制Applet程序,以百叶窗效果显示图像....................................................................................................14 4.编制Applet程序,实现12个钢琴键及其声音的模拟..................................................................................17 上机练习题4.................................................18 1.假设在addressbook数据库表中,存在多个姓氏相同的人,根据这一情况,建立相应的查询功能.......18 2.编写一个应用程序,使其可以从一个数据库的某个表中查询一个列的所有信息.....................................20 3.设计一个数据库应用程序,功能是在学生数据库的成绩表中加入某门课程的所有学生的成绩.............23 上机练习题5.................................................26 1.编写GUI程序,制作一个文本文件阅读器....................................................................................................26

Java程序设计简明教程

2.编制程序,计算表达式“2*4*6+8*10*12+……+26*28*30”的值,并把结果输出到文件中....................27 3.编制程序............................................................................................................................................................28 4.编写程序,实现压缩、解压缩Zip文件.........................................................................................................29 5.编写程序,从试题文件中抽取Java单选题进行测试练习............................................................................32 上机练习题6.................................................34 1.编制程序,求如下表达式的值........................................................................................................................34 2.用继承Thread类的方法实现一个多线程程序...............................................................................................35 3.编制程序,同时显示两个时区的时钟,并将时钟的结果显示在Fram窗体中...........................................37 4.使用异常处理机制和输入/输出处理机制编写一个程序................................................................................41 上机练习题7.................................................42 1.编制Applet程序,使用Graphics类的常用方法,绘制一面五星红旗........................................................42 2.编制Applet程序,实现一行文字的动画显示,即文字跑马灯....................................................................42 3.编制Applet程序,实现图片的水中倒影........................................................................................................44 4.结合图形用户界面与事件处理,创建一个日历GUI程序............................................................................46 上机练习题8.................................................48 1.设计Java Applet程序,实现在图片上飘雪花的特效....................................................................................48 2.设计一个通讯录,保存读者信息....................................................................................................................50 3.构造一个程序,它在一个窗口描绘出一个小鸟的图标.................................................................................54

上机练习题参考答案

上机练习题1 1.用循环语句分别打印如图1-24所示的九九乘法表。【参考程序】

//文件XiTi1_1_1_1.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_1_1{ public static void main(String args[]){ String str=“ ”;int i,j;for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ str=i+“*”+j+“=”+i*j;if(ij)System.out.print(” “);else System.out.print(str.length()==5?str+” “:str+” “);} System.out.println(”“);} } }

//文件XiTi1_1_3.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_1_3{ public static void main(String args[]){ String str=” “;3

Java程序设计简明教程

int i,j;for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ str=i+”*“+j+”=“+i*j;System.out.print(str.length()==5?str+” “:str+” “);} System.out.println(”“);} } } 2.定义两个数组,首先将第一个数组中的元素复制到第二个数组中,然后将第二个数数组进行从大到小的排序,最后将两个数组中的对应元素进行比较,试统计两个数组中对应位置上相同元素的个数。

【参考程序】

//文件XiTi1_2.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_2{ public static void main(String[] args){ int a[]={278,109,063,930,589,184,505,269,8,83};int b[]=new int[10];int t,cnt=0;for(int i=0;i<10;i++)b[i]=a[i];for(int i=1;i<10;i++)for(int j=0;j<10-i;j++)if(b[j]

System.out.println(”“);System.out.println(”********************* b **********************“);System.out.println(”“);for(int i=0;i<10;i++)System.out.print(b[i]+” “);System.out.println(”“);System.out.println(”“);System.out.println(”对应元素相同的个数为:“+cnt);System.out.println(”“);} } 3.编写一个简单的考试程序。【参考程序】

上机练习题参考答案

//文件XiTi1_3.java package XiTi;import java.io.*;import java.util.Date;public class XiTi1_3{ public static void main(String[] args){ String yes=”Y“,ok=”“;int x,x1,y,opr=2,s,h,m,t1,t2;String op,str=”“,re=”“,a=”A“;do{ x=new Long(Math.round(Math.random()*99+1)).intValue();y=new Long(Math.round(Math.random()*99+1)).intValue();opr=new Long(Math.round(Math.random()*3+1)).intValue();s=new Date().getSeconds();h=new Date().getHours();m=new Date().getMinutes();t1=h*3600+m*60+s;switch(opr){ case 1: str=x+”+“+y+”=?“;re=Integer.toString(x+y);break;case 2: str=x+”-“+y+”=?“;re=Integer.toString(x-y);break;case 3: str=x+”*“+y+”=?“;re=Integer.toString(x*y);break;case 4: x1=Math.max(x,y);y=Math.min(x,y);x=x1;x=x-x%y;str=x+”/“+y+”=?“;re=Integer.toString(x/y);break;} System.out.print(str);try{ BufferedReader in =new BufferedReader(new InputStreamReader(System.in));ok=in.readLine();

}catch(IOException e){};s=new Date().getSeconds();h=new Date().getHours();m=new Date().getMinutes();t2=h*3600+m*60+s;if(ok.equals(re.trim()))System.out.println(”正确!用时:“+(t2-t1)+”秒“);else if(a.equals(ok.toUpperCase()))5

Java程序设计简明教程

System.out.println(”答案:“+re+”,请多努力!“);else System.out.println(”错误!答案:“+re);System.out.print(”继续吗(Y/N)?“);try{ BufferedReader in =new BufferedReader(new InputStreamReader(System.in));ok=in.readLine();

}catch(IOException e){};}while(yes.equals(ok.toUpperCase()));System.out.println(”“);} }

上机练习题2 1.编写程序,包括一个文本域和三个命令按钮,按钮标题分别为红色、黄色和蓝色,单击相应的按钮,将文本域的前景色设置为红色、黄色和蓝色。

【参考程序】

import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.awt.*;public class xiti2_1 extends JFrame implements ActionListener{ JButton red,yellow,blue;JTextArea ta=new JTextArea(5,20);xiti2_1(){ red=new JButton(”红色“);yellow=new JButton(”黄色“);blue=new JButton(”蓝色“);red.addActionListener(this);yellow.addActionListener(this);blue.addActionListener(this);JPanel jp=new JPanel();jp.setLayout(new FlowLayout(FlowLayout.CENTER));jp.add(red);jp.add(yellow);jp.add(blue);Container con=getContentPane();con.add(ta,BorderLayout.CENTER);con.add(jp,BorderLayout.SOUTH);setSize(300,200);setTitle(”上机练习题2_1“);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);validate();} public void actionPerformed(ActionEvent e){ JButton btn=(JButton)e.getSource();if(btn==red){ ta.setForeground(Color.red);

上机练习题参考答案

} if(btn==yellow){ ta.setForeground(Color.yellow);} if(btn==blue){ ta.setForeground(Color.blue);} } public static void main(String args[]){ new xiti2_1();} } 2.编写程序,包括一个文本框、一个密码框和两个按钮。按钮标题分别为确定和取消,用户在密码框中输入密码,单击确定按钮,将在密码框中输入的字符显示在文本框中。

【参考程序】

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class xiti2_2 extends JFrame implements ActionListener{ JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();JPanel p5=new JPanel();JTextField text=new JTextField(15);JPasswordField password=new JPasswordField(15);JButton ok=new JButton(”确定“);JButton cancel=new JButton(”取消“);xiti2_2(){ Container con=getContentPane();con.setLayout(new GridLayout(5,1));p2.add(new JLabel(”密码:“));p2.add(password);p3.add(new JLabel(”文本:“));p3.add(text);p4.add(ok);p4.add(cancel);ok.addActionListener(this);cancel.addActionListener(this);con.add(p1);con.add(p2);con.add(p3);con.add(p4);con.add(p5);setSize(300,200);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle(”上机练习题2_2“);validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==ok){ text.setText(password.getText());7

Java程序设计简明教程

} if(e.getSource()==cancel){ dispose();System.exit(0);} } public static void main(String args[]){ new xiti2_2();} } 3.编写程序,建立一个带有菜单的窗体。当用户选择“Color”或“Style”菜单的相关选项时,标签中文字的字体和颜色会发生相应的变化。

【参考程序】

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;class xiti2_3 extends JFrame implements ActionListener{ JMenuBar menubar=new JMenuBar();JTextArea ta=new JTextArea(”Hello Java!“);xiti2_3(){ setJMenuBar(menubar);JMenu menu,submenu;JMenuItem menuItem;menu=new JMenu(”Color“);menu.setMnemonic(KeyEvent.VK_C);menubar.add(menu);menuItem=new JMenuItem(”Yellow“);menuItem.setMnemonic(KeyEvent.VK_Y);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Orange“);menuItem.setMnemonic(KeyEvent.VK_O);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Pink“,KeyEvent.VK_P);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Blue“);menuItem.setMnemonic(KeyEvent.VK_B);menuItem.addActionListener(this);menu.add(menuItem);menu=new JMenu(”Style“);menu.setMnemonic(KeyEvent.VK_S);menubar.add(menu);menuItem=new JMenuItem(”Plain“);menuItem.setMnemonic(KeyEvent.VK_P);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Bold“);menuItem.setMnemonic(KeyEvent.VK_B);menuItem.addActionListener(this);8

上机练习题参考答案

menu.add(menuItem);menuItem=new JMenuItem(”Italic“);menuItem.setMnemonic(KeyEvent.VK_I);menuItem.addActionListener(this);menu.add(menuItem);menu=new JMenu(”Exit“);menu.setMnemonic(KeyEvent.VK_E);menubar.add(menu);menuItem=new JMenuItem(”Close Window“);menuItem.setMnemonic(KeyEvent.VK_W);menuItem.addActionListener(this);menu.add(menuItem);Container cp=getContentPane();cp.add(ta,BorderLayout.SOUTH);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle(”菜单演示“);setSize(300,200);setVisible(true);} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”Yellow“)ta.setForeground(Color.yellow);if(e.getActionCommand()==”Orange“)ta.setForeground(Color.orange);if(e.getActionCommand()==”Pink“)ta.setForeground(Color.pink);if(e.getActionCommand()==”Blue“)ta.setForeground(Color.blue);if(e.getActionCommand()==”Plain“)ta.setFont(new Font(”Dialog“,Font.PLAIN,24));if(e.getActionCommand()==”Bold“)ta.setFont(new Font(”Dialog“,Font.BOLD,24));if(e.getActionCommand()==”Italic“)ta.setFont(new Font(”Dialog“,Font.ITALIC,24));if(e.getActionCommand()==”Close Window“)System.exit(0);} public static void main(String args[]){ xiti2_3 menuexmple=new xiti2_3();} } 4.编写程序,将窗口尺寸设置为不可更改,并处理窗口事件,使得点击窗口关闭按钮时,会弹出对话框,提示用户是否确定要关闭窗口。

【参考程序】

import java.awt.event.*;import javax.swing.*;class MyFrame extends JFrame{ private JLabel label;public MyFrame(){ setTitle(”我的窗口“);label=new JLabel(”请点击关闭按钮!“,JLabel.CENTER);getContentPane().add(label);9

Java程序设计简明教程

//为窗口添加关闭事件

addWindowListener(new WindowCloseListener(this));//将点击窗口关闭按钮默认的关闭窗口功能去掉

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置窗口大小不可更改 setResizable(false);setSize(300,200);setVisible(true);} class WindowCloseListener extends WindowAdapter{ JFrame f;public WindowCloseListener(JFrame frame){ f=frame;//f是对话框的父窗口 } public void windowClosing(WindowEvent e){ int i=JOptionPane.showConfirmDialog(f,”确定要关“,”“,JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);if(i==JOptionPane.OK_OPTION){ System.exit(0);//点击确定退出程序 } } } public static void main(String[] args){ JFrame frame=new MyFrame();} }

闭窗口吗?5.编写程序,用列表框列出一些选项,设置一个按钮,点击按钮就会将所选的选项添加到另一个列表框中,其中第二个列表框中显示的已选项目可以删除。程序运行界面如图2-16所示。

【参考程序】

import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;class MyList extends JFrame { JPanel panel;JButton add,remove;DefaultListModel listModel1,listModel2;JList list1,list2;String[] s={”计算机科学与技术“,”计算机通信“,”应用电子“,”电子商务“,”会计电算化“,”法律“,”工商管理“,”生物技术“,”建筑工程技术“,”工业设计“,”商务英语“,”统计“};ArrayList array1,array2;public MyList(){ setTitle(”列表框“);add=new JButton(”>>“);add.addActionListener(new AddActionListener());//为按钮注册监听器 remove=new JButton(”<<“);remove.addActionListener(new RemoveActionListener());//为按钮注册监听器

listModel1=new DefaultListModel();//为列表1创建一个列表框模型 listModel2=new DefaultListModel();//为列表2创建一个列表框模型 for(int i=0;i

上机练习题参考答案

list1=new JList(listModel1);//通过列表框模型1创建列表框1 list2=new JList(listModel2);//通过列表框模型2创建列表框2 panel=new JPanel();panel.setLayout(new GridLayout(2,1));//面板用来放置按钮 panel.add(add);panel.add(remove);Container c=getContentPane();c.setLayout(new FlowLayout(FlowLayout.LEFT));c.add(list1);c.add(panel);c.add(list2);setSize(280,280);setVisible(true);} class AddActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ int id=-1;id=list1.getSelectedIndex();//得到列表框1中被选中的项 if(id>=0){ listModel2.addElement(listModel1.get(id));//向列表框2中添加所选项 listModel1.remove(id);//将列表框1中所选项删除 } } } class RemoveActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ int id=-1;id=list2.getSelectedIndex();//得到列表框2中被选中的项 if(id>=0){ listModel1.addElement(listModel2.get(id));//向列表框1中添加所选项 listModel2.remove(id);//将列表框2中所选项删除 } } } public static void main(String args[]){ new MyList();} } 6.编写程序,用标签显示一道简单测试题,答案使用单选按钮列出,用户选择答案后,会弹出对话框显示结果或说明。

【参考程序】

import javax.swing.*;import java.awt.*;import java.awt.event.*;class Question{ public JFrame frame;public JPanel panel;static JLabel label;public JRadioButton b1,b2,b3;static String question=”如果你意外地拿到一千元奖金,想去买一件很需要的大衣,但是钱不够;如果去买一双不急需要的运动鞋,则又多了数百元,你会怎么做?“;static String xx1=”自已添些钱把大衣买回来。“;11

Java程序设计简明教程

static String xx2=”买运动鞋再去买些其它的小东西。“;static String xx3=”什么都不买先存起来。“;static String dd1=”你的决断力不错,虽然有时也会三心二意、犹豫徘徊,可总是在重要关头作出决定,你最大的特色是作了决定不再反悔。“;static String dd2=”你是拿不定主意的人,做事没主见,处处要求别人给你意见,很少自已做判断,因为个性上你有些自卑,不肯定自己。“;static String dd3=”你是判断力超级强的人,不客气地说,你甚至有点莽撞,就是因为你冲动率直的个性,反而考虑不够周详,你常常后悔自己匆匆作决定,忽略了其它事情。“;public JOptionPane optionPane;public Question(){ //构造方法,完成布局 frame=new JFrame(”心理测试“);panel=new JPanel();panel.setLayout(new GridLayout(3,1));label=new JLabel(question,JLabel.CENTER);b1=new JRadioButton(xx1);b2=new JRadioButton(xx2);b3=new JRadioButton(xx3);ButtonGroup group=new ButtonGroup();group.add(b1);group.add(b2);group.add(b3);RadioListener myListener=new RadioListener();b1.addActionListener(myListener);b2.addActionListener(myListener);b3.addActionListener(myListener);Container c=frame.getContentPane();c.add(label,BorderLayout.NORTH);c.add(panel,BorderLayout.CENTER);panel.add(b1);panel.add(b2);panel.add(b3);frame.pack();frame.setVisible(true);} class RadioListener implements ActionListener{ public void actionPerformed(ActionEvent e){ //事件处理,点击选项弹出相应的对话框 JRadioButton rb=(JRadioButton)e.getSource();if(rb==b1){ JOptionPane.showMessageDialog(frame,dd1,”“,JOptionPane.DEFAULT_OPTION);} if(rb==b2){ JOptionPane.showMessageDialog(frame,dd2,”“,JOptionPane.DEFAULT_OPTION);} if(rb==b3){ JOptionPane.showMessageDialog(frame,dd3,”“,JOptionPane.DEFAULT_OPTION);} } } public static void main(String[] args){ new Question();} } 12

上机练习题参考答案

上机练习题3 1.编写Application在窗口内画54个不同颜色的小圆,每当窗口显示在显示器上、从隐藏变成显示、从缩小图标还原、改变窗口的大小时,小圆所呈现的颜色也可以发生变化。(提示:使用随机数产生随机颜色)。程序以不同颜色的小圆铺满窗口。如果在窗口内只显示某个特定的部分,其他部分则不显示时。

【参考程序】

//文件RandomColorDemo.java import java.awt.*;import javax.swing.*;class RandomColorDemo extends JFrame{ static RandomColorDemo frm=new RandomColorDemo();public static void main(String args[]){ frm.setTitle(”Random Color“);frm.setSize(200,150);frm.setVisible(true);} public void paint(Graphics g){ for(int x=10;x<=180;x=x+20)for(int y=30;y<=140;y=y+20){ int red=(int)(Math.random()*255);// 红色的随机数 int green=(int)(Math.random()*255);// 绿色的随机数 int blue=(int)(Math.random()*255);// 蓝色的随机数 g.setColor(new Color(red,green,blue));// 设置颜色

g.fillOval(x,y,15,15);// 用指定的颜色填满小圆 } } }

//文件RandomColor.java import java.awt.*;import javax.swing.*;class RandomColor extends JFrame{ static RandomColor frm=new RandomColor();public static void main(String args[]){ frm.setTitle(”Random Color“);frm.setSize(200,150);frm.setVisible(true);} public void paint(Graphics g){ g.setClip(35,37,125,100);//g.clipRect(35,37,125,100);for(int x=10;x<=180;x=x+20)for(int y=30;y<=140;y=y+20){ int red=(int)(Math.random()*255);// 红色的随机数 int green=(int)(Math.random()*255);// 绿色的随机数 int blue=(int)(Math.random()*255);// 蓝色的随机数 g.setColor(new Color(red,green,blue));// 设置颜色

g.fillOval(x,y,15,15);// 用指定的颜色填满小圆 } //g.clearRect(35,37,125,100);

Java程序设计简明教程

} } 2.编制Applet程序,使用Graphics类中的各种图形绘制方法,绘制一个可爱的熊宝宝(或其他自己爱好的小动物,例如,小猪,小兔等)。在小应用程序浏览器中查看程序的执行结果。

【参考程序】

import java.applet.*;import java.awt.*;import java.awt.Graphics;public class Bear extends Applet{ public void paint(Graphics g){ g.drawOval(100,40,180,180);//face g.fillOval(120,90,40,35);//left eye g.fillOval(220,90,40,35);//right eye g.fillOval(180,140,25,25);//nose g.setColor(Color.red);g.fillArc(166,170,50,30,180,180);//mouse g.fillArc(85,25,80,80,25,223);//left ear g.fillArc(215,25,80,80,-57,213);//right ear g.drawLine(156,210,96,320);//body g.drawLine(96,320,126,410);g.drawLine(236,210,296,320);g.drawLine(296,320,256,410);g.drawLine(126,410,256,410);g.fillOval(80,240,50,50);//arm g.fillOval(260,240,50,50);g.fillOval(100,390,50,50);//leg g.fillOval(230,390,50,50);} } 3.编制Applet程序,以百叶窗效果显示图像。【参考程序】

//文件Efficient.java import java.awt.*;import java.applet.*;import java.io.*;import java.awt.image.*;public class Efficient extends Applet implements Runnable{ private Image img[],showImage;private MediaTracker imageTracker;private int ImageW,ImageH,totalImage=5,currentImage,nextImage;private Thread thread;private int delay;private int totalPix,pix1[],pix2[],pix3[],pix4[],pix5[],pixA[],pixB[];public void init(){ this.setBackground(Color.black);img=new Image[totalImage];imageTracker=new MediaTracker(this);String s=new String(”“);for(int i=0;i

上机练习题参考答案

imageTracker.addImage(img[i],0);} try{ imageTracker.waitForID(0);}catch(InterruptedException e){} if(getParameter(”delay“)==null){ delay=3000;} else{ delay=Integer.parseInt(getParameter(”delay“));} ImageW=img[0].getWidth(this);ImageH=img[0].getHeight(this);totalPix=ImageW*ImageH;pix1=new int[totalPix];PixelGrabber PG1=new PixelGrabber(img[0],0,0,ImageW,ImageH,pix1,0,ImageW);try{ PG1.grabPixels();}catch(InterruptedException ex){} pix2=new int[totalPix];PixelGrabber PG2=new PixelGrabber(img[1],0,0,ImageW,ImageH,pix2,0,ImageW);try{ PG2.grabPixels();}catch(InterruptedException ex){} pix3=new int[totalPix];PixelGrabber PG3=new PixelGrabber(img[2],0,0,ImageW,ImageH,pix3,0,ImageW);try{ PG3.grabPixels();}catch(InterruptedException ex){} pix4=new int[totalPix];PixelGrabber PG4=new PixelGrabber(img[3],0,0,ImageW,ImageH,pix4,0,ImageW);try{ PG4.grabPixels();}catch(InterruptedException ex){} pix5=new int[totalPix];PixelGrabber PG5=new PixelGrabber(img[4],0,0,ImageW,ImageH,pix5,0,ImageW);try{ PG5.grabPixels();}catch(InterruptedException ex){} currentImage=0;pixA=new int[totalPix];pixB=new int[totalPix];showImage=img[0];thread=new Thread(this);thread.start();} public void paint(Graphics g){ g.drawImage(showImage,0,0,this);} public void update(Graphics g){ paint(g);} public void run(){ 15

Java程序设计简明教程

if(thread==null){ thread=new Thread(this);thread.start();} while(true){ try{ thread.sleep(delay);nextImage=((currentImage+1)%totalImage);if(currentImage==0){ System.arraycopy(pix1,0,pixA,0,totalPix);System.arraycopy(pix2,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==1){ System.arraycopy(pix2,0,pixA,0,totalPix);System.arraycopy(pix3,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==2){ System.arraycopy(pix3,0,pixA,0,totalPix);System.arraycopy(pix4,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==3){ System.arraycopy(pix4,0,pixA,0,totalPix);System.arraycopy(pix5,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==4){ System.arraycopy(pix5,0,pixA,0,totalPix);System.arraycopy(pix1,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} while(true){ for(int i=0;i<(int)(ImageH/10);i++){ try{ thread.sleep(100);for(int j=0;j

上机练习题参考答案

currentImage=nextImage;repaint();}catch(InterruptedException e){} } } } 4.编制Applet程序,实现12个钢琴键及其声音的模拟。【参考程序】

//文件Piano.java import java.awt.*;import java.applet.*;class Keyboard extends Canvas {//钢琴键类

Color keyColor=Color.white;AudioClip key;int width,height;Keyboard(Color c, AudioClip k){//初始化钢琴键的颜色及声音 keyColor=c;setBackground(keyColor);key=k;width=this.getSize().width;height=this.getSize().height;} public boolean mouseDown(Event event, int x, int y){//鼠标按下事件 key.play();return true;} public void paint(Graphics g){//画钢琴键 width=this.getSize().width;height=this.getSize().height;g.setColor(Color.black);g.drawRect(0,0,width-1,height-1);} } public class Piano extends Applet{ private int height,width;private Keyboard key[];private AudioClip sound[];public void init(){ this.setLayout(null);width=this.size().width;height=this.size().height;key=new Keyboard[12];sound=new AudioClip[12];String s=new String(”“);for(int i=0;i<12;i++){ s=i + ”.au“;sound[i]=getAudioClip(getCodeBase(),s);} key[0]=new Keyboard(Color.white,sound[0]);key[1]=new Keyboard(Color.black,sound[1]);key[2]=new Keyboard(Color.white,sound[2]);key[3]=new Keyboard(Color.black,sound[3]);17

Java程序设计简明教程

key[4]=new Keyboard(Color.white,sound[4]);key[5]=new Keyboard(Color.white,sound[5]);key[6]=new Keyboard(Color.black,sound[6]);key[7]=new Keyboard(Color.white,sound[7]);key[8]=new Keyboard(Color.black,sound[8]);key[9]=new Keyboard(Color.white,sound[9]);key[10]=new Keyboard(Color.black,sound[10]);key[11]=new Keyboard(Color.white,sound[11]);key[1].setBounds(30,0,20,60);add(key[1]);key[3].setBounds(70,0,20,60);add(key[3]);key[6].setBounds(150,0,20,60);add(key[6]);key[8].setBounds(190,0,20,60);add(key[8]);key[10].setBounds(230,0,20,60);add(key[10]);key[0].setBounds(0,0,40,110);key[2].setBounds(40,0,40,110);key[4].setBounds(80,0,40,110);key[5].setBounds(120,0,40,110);key[7].setBounds(160,0,40,110);key[9].setBounds(200,0,40,110);key[11].setBounds(240,0,40,110);add(key[0]);add(key[2]);add(key[4]);add(key[5]);add(key[7]);add(key[9]);add(key[11]);} }

上机练习题4 1.假设在addressbook数据库表中,存在多个姓氏相同的人,根据这一情况,建立相应的查询功能,使用户可以在ResultSet中滚动记录。要求设计一个合适的图形界面。

程序源代码如下: 【参考程序】

//数据库连接使用ConnectServer类 import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;import javax.swing.table.*;public class ex4_1 extends JFrame implements ActionListener{ JTable table;TableModel model;

上机练习题参考答案

DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p3=new JPanel();JLabel bq1=new JLabel(”按姓氏或姓名查询“);JTextField combSs=new JTextField(6);JButton btn1=new JButton(”确定“);String strs=null,xxno,xscore;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_1(){ String sql=”select * from address “;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title);table=new JTable(dtm);initTable();table.setRowHeight(20);p1=new JScrollPane(table);btn1.addActionListener(this);p3.add(bq1);p3.add(combSs);p3.add(btn1);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});setTitle(”学生信息查询“);setSize(600,400);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();while(rs.next()){ Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} }catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();} public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ strs=(String)combSs.getText();String sql=”select * from address where 姓名 LIKE '“+strs+”%'“;19

Java程序设计简明教程

try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”学生信息“);table.setRowHeight(20);setSize(600,400);setVisible(true);} } public static void main(String args[]){ if(!ConnectServer.conn(”jdbc:odbc:xsgl“,”sa“,”“)){ JOptionPane.showMessageDialog(null,”数据库连接不成功“);System.exit(0);} new ex4_1();} } 2.编写一个应用程序,使其可以从一个数据库的某个表中查询一个列的所有信息。【参考程序】

import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import javax.swing.table.*;public class ex4_2 extends JFrame implements ActionListener{ JTable table;DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p2=new JPanel();JPanel p3=new JPanel();JButton b1=new JButton(”首页“);JButton b2=new JButton(”上页“);JButton b3=new JButton(”下页“);JButton b4=new JButton(”尾页“);JLabel bb=new JLabel(” “);JButton btn1=new JButton(”查询“);JComboBox combSs=new JComboBox();int count=0;int pagesize=6;int pagecount=0;20

上机练习题参考答案

int page=1;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_2(){ String sql=”select * from baseinf“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);count=getcount();pagecount=(int)count/pagesize+(count%pagesize==0?0:1);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++){ title.addElement(dbmd.getColumnName(i));combSs.addItem(dbmd.getColumnName(i));} dtm=new DefaultTableModel(null,title);table=new JTable(dtm);initTable();table.setRowHeight(20);p1=new JScrollPane(table);if(pagecount!=0)bb.setText(”第“+page+”页“);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);btn1.addActionListener(this);p2.add(b1);p2.add(b2);p2.add(b3);p2.add(b4);p2.add(bb);p3.add(btn1);p3.add(combSs);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);this.getContentPane().add(p2,”South“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ try{ rs.close();stmt.close();ConnectServer.con.close();System.exit(0);}catch(SQLException ee){ee.printStackTrace();} }});setTitle(”书目信息分页浏览“);setSize(500,300);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();for(int i=1;i<1+pagesize*(page-1);i++)rs.next();int j=0;while(j

Java程序设计简明教程

j++;Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} }catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();this.getContentPane();} public int getcount(){ int n=0;try{ if(rs.last()){ n=rs.getRow();rs.beforeFirst();return n;}else return 0;}catch(SQLException e){System.out.println(”有异常抛出“);return 0;} } public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ String strs=(String)combSs.getSelectedItem();String sql=”select no ,“+strs.trim()+” from baseinf“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);count=getcount();dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”书目信息按某一列查询浏览“);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});setSize(500,300);setVisible(true);} else if(e.getSource()==b1)page=1;else if(e.getSource()==b2){if(page>1)page=page-1;} else if(e.getSource()==b3){if(page

”+page+“页”);} 22

上机练习题参考答案

public static void main(String args[]){ Font font=new Font(“JFrame”,Font.PLAIN,14);Enumeration keys=UIManager.getLookAndFeelDefaults().keys();while(keys.hasMoreElements()){ Object key=keys.nextElement();if(UIManager.get(key)instanceof Font)UIManager.put(key,font);} if(!ConnectServer.conn(“jdbc:odbc:libbook”,“sa”,“")){ JOptionPane.showMessageDialog(null,”数据库连接不成功“);System.exit(0);} new ex4_2();} } 3.设计一个数据库应用程序,功能是在学生数据库的成绩表中加入某门课程的所有学生的成绩。【参考程序】

//数据库为xsgl,表grade的结构为xno,xname,shx,yy,wl import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;import javax.swing.JTable.*;import javax.swing.table.*;public class ex4_3 extends JFrame implements ActionListener{ JTable table;TableModel model;DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p2=new JPanel();JPanel p3=new JPanel();JButton b1=new JButton(”刷新“);JLabel bq1=new JLabel(”插入一列或某列成绩“);JTextField combSs=new JTextField(6);JButton btn1=new JButton(”插入列“);String strs=null,xxno,xscore;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_3(){ String sql=”select * from grade“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title);23

Java程序设计简明教程

table=new JTable(dtm);initTable();model=table.getModel();model.addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e){ int row=e.getFirstRow();int column=e.getColumn();Object data=model.getValueAt(row,column);try{ System.out.println(data);strs=combSs.getText();xscore=(String)data;xxno=(String)model.getValueAt(row,0);String sql=”update grade set “+strs+”=“+xscore+” where xno=“+xxno;stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);stmt.executeUpdate(sql);System.out.println(”xno=“+xxno);table.requestDefaultFocus();}catch(Exception ee){System.out.println(”有异常“+ee.getMessage());} }});table.setRowHeight(20);p1=new JScrollPane(table);b1.addActionListener(this);btn1.addActionListener(this);p2.add(b1);p3.add(bq1);p3.add(combSs);p3.add(btn1);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);this.getContentPane().add(p2,”South“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ try{ rs.close();stmt.close();ConnectServer.con.close();System.exit(0);}catch(SQLException ee){ee.printStackTrace();} } });setTitle(”学生成绩浏览“);setSize(600,400);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();while(rs.next()){ Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} 24

上机练习题参考答案

}catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();} public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ strs=(String)combSs.getText();String sql=”ALTER TABLE grade ADD “+strs.trim()+” int“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);stmt.executeUpdate(sql);stmt.close();sql=”select * from grade“;stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”学生成绩信息“);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });setSize(600,400);} else if(e.getSource()==b1){ String sql=”select * from grade“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();setTitle(”学生成绩浏览“);setSize(600,400);} } public static void main(String args[]){ Font font=new Font(”JFrame“,Font.PLAIN,14);Enumeration keys=UIManager.getLookAndFeelDefaults().keys();25

Java程序设计简明教程

while(keys.hasMoreElements()){ Object key=keys.nextElement();if(UIManager.get(key)instanceof Font)UIManager.put(key,font);} if(!ConnectServer.conn(”jdbc:odbc:xsgl“,”sa“,”“)){ JOptionPane.showMessageDialog(null,”数据库连接不成功“);System.exit(0);} new ex4_3();} }

上机练习题5 1.编写GUI程序,制作一个文本文件阅读器,文件菜单设置打开和退出命令,可以打开本地硬盘上文本文件,并将文件内容显示到文本框中,文本框不能编辑,退出命令能够退出程序。

【解题思路】

(1)界面设计:一个窗口,窗口中设置一个菜单条,菜单条上设置一个“文件”菜单,菜单中设置“打开”和“退出”菜单项,窗口中放置一个不可编辑的文本框并使其充满窗口;

(2)界面实现:创建一个类继承JFrame类,在构造方法中设置菜单条,添加文本框;

(3)功能设计:使两个菜单项响应事件,点击“打开”可将选中的文件内容显示在文本框中,点击“退出”可以退出程序;

(4)功能实现:在构造方法中为两个菜单项注册ActionListener监听器,用本类实现监听器接口,在实现的actionPerformed()方法中进行判断,如果事件源是“打开”菜单项,则调出打开文件对话框,获取选中的文件名,调用另一个显示文件内容的方法,该方法负责将文件内容用输入流读取后显示在文本框中,如果事件源是“退出”,则退出程序。

【参考程序】

//文件Reader.java import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Reader implements ActionListener{ private JFrame frame;private TextArea textArea;FileDialog fileDialog;public Reader(){//构造方法,完成布局 frame=new JFrame(”文本文件阅读器“);MenuBar mb=new MenuBar();Menu m1=new Menu(”文件“);MenuItem mi1=new MenuItem(”打开“);mi1.setActionCommand(”打开“);mi1.addActionListener(this);MenuItem mi2=new MenuItem(”退出“);mi2.setActionCommand(”退出“);mi2.addActionListener(this);m1.add(mi1);m1.add(mi2);mb.add(m1);frame.setMenuBar(mb);26

上机练习题参考答案

textArea=new TextArea();Container c=frame.getContentPane();c.add(textArea);frame.setSize(500,600);frame.setVisible(true);} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”打开“){ //若点击“打开”,调出文件打开对话框,打开文件 fileDialog=new FileDialog(frame,”打开“,FileDialog.LOAD);fileDialog.setVisible(true);String path=fileDialog.getDirectory();String name=fileDialog.getFile();String file=path+name;openFile(file);} else{ //若点击“退出”,退出程序 System.exit(1);} } public void openFile(String file){ //打开文件方法,读取指定文件的内容,并显示在文本域中 try{ FileReader fr=new FileReader(file);BufferedReader br=new BufferedReader(fr);String s=br.readLine();while(s!=null){ textArea.append(s+”n“);s=br.readLine();} frame.setTitle(file);}catch(FileNotFoundException e1){ System.out.println(”文件没有找到!“);}catch(IOException e2){ System.out.println(e2.getMessage());} } public static void main(String[] args){ new Reader();} } 2.编制程序,计算表达式“2*4*6+8*10*12+„„+26*28*30”的值,并把结果输出到文件中。【参考程序】

//文件名xiti5_2.java import java.io.*;import java.awt.*;import java.applet.Applet;import java.awt.event.*;import javax.swing.*;public class xiti5_2 extends Applet implements ActionListener{ String Savepath;//用来指定文件的路径。JButton Button1,Button2;JLabel Label1,Label2;int s,i;27

Java程序设计简明教程

public void init(){ this.setSize(400,400);//设置了窗体显示的大小

Label1=new JLabel(”计算表达式2*4*6+8*10*12+......+26*28*30的值“,JLabel.CENTER);add(Label1);Label2=new JLabel(” “,JLabel.CENTER);add(Label2);Button1=new JButton(” 计算 “);add(Button1);Button2=new JButton(” 保存 “);add(Button2);Button1.addActionListener(this);Button2.addActionListener(this);this.setSize(400,180);} public void actionPerformed(ActionEvent e){ if(e.getSource()==Button1){ s=0;for(i=2;i<30;){ s=s+i*(i+2)*(i+4);i=i+6;} Label2.setText(” 计算结果为:“+s+” “);} //下面的一段代码是打开一个文本文件,并显示在文本框中 if(e.getSource()==Button2){ try{ Label2.setText(” 将结果输出到c:save.txt文件中“);Savepath=”c:save.txt“;//指定保存文件的路径

PrintWriter out=new PrintWriter(new FileWriter(Savepath));out.print(”“+s);//将文本框中的内容写入指定的文件中 out.close();//关闭文件流,释放资源 }catch(Exception eee){} } } } 3.编制程序,其功能是:读入一个顺序文件,该文件每条记录的三个数据项分别是职工姓名、基本工资和奖金,在读入每条记录后,将每个职工的基本工资增加百分之十后得到新的数据记录。

【参考程序】

//文件名为:xiti5_3.java import java.io.*;import java.awt.*;import java.applet.Applet;import java.awt.event.*;public class xiti5_3 extends Applet implements ActionListener{ Button Button1,Button2;Label Label1,Label2;TextArea ta;String Openpath;double chenji[]=new double[5];public static int i=0;public static String str[]=new String[5];public void init(){ 28

上机练习题参考答案

Button1=new Button(”打开文件“);add(Button1);Button2=new Button(”增加工资“);add(Button2);ta=new TextArea();add(ta);Button1.addActionListener(this);Button2.addActionListener(this);this.setSize(400,200);} public void actionPerformed(ActionEvent e){ if(e.getSource()==Button2){ Openpath=”d:save.txt“;int j;ta.setText(”“);try{ BufferedReader in=new BufferedReader(new FileReader(Openpath));//建立一个BufferedReader流对象 while((Openpath=in.readLine())!=null){//把文件中的内容一行一行地读出 str[i]=Openpath;i=i+1;} in.close();//关闭文件流,释放资源 for(j=0;j<5;j++){ str[j].trim();} for(j=0;j<5;j++){ chenji[j]=Integer.valueOf(str[j].toString().substring(15)).intValue();} for(j=0;j<5;j++){ chenji[j]=chenji[j]*(1+0.1);ta.setText(ta.getText()+str[j]+” “+chenji[j]+”n“);} }catch(Exception ee){} } if(e.getSource()==Button1){ ta.setText(”“);Openpath=”d:save.txt“;try{ BufferedReader in=new BufferedReader(new FileReader(Openpath));//建立一个BufferedReader流对象。

while((Openpath=in.readLine())!=null){ //把文件中的内容一行一行地读出 ta.setText(ta.getText()+Openpath+”n“);//将读出的内容显示在文本框中 } in.close();//关闭文件流,释放资源

}catch(Exception ee){ java.lang.System.exit(-1);} } } } 4.编写程序,实现压缩、解压缩Zip文件。【参考程序】

import java.awt.*;import java.awt.event.*;29

Java程序设计简明教程

import java.io.*;import java.util.*;import java.util.zip.*;import javax.swing.*;public class xiti5_4 extends JFrame implements ActionListener{ JTextArea textarea;JTextField infotip;String doc;long doczipsize=0;public xiti5_4(){ JMenuBar menubar=new JMenuBar();setJMenuBar(menubar);JMenu file=new JMenu(”File“,true);menubar.add(file);JMenuItem neww=new JMenuItem(”New“);neww.addActionListener(this);file.add(neww);JMenuItem open=new JMenuItem(”Open“);open.addActionListener(this);file.add(open);JMenuItem save=new JMenuItem(”Save“);save.addActionListener(this);file.add(save);JMenuItem exit=new JMenuItem(”Exit“);file.add(exit);add(”Center“,textarea=new JTextArea());add(”South“,infotip=new JTextField());this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} private void openFile(){ FileDialog dlg=new FileDialog(this,”Open“,FileDialog.LOAD);dlg.setVisible(true);textarea.setText(”“);String filename=dlg.getDirectory()+dlg.getFile();try{ File f=new File(filename);if(!f.exists())return;ZipInputStream zipis=new ZipInputStream(new FileInputStream(f));zipis.getNextEntry();DataInputStream dis=new DataInputStream(zipis);doc=dis.readUTF();dis.close();doczipsize=f.length();showTextandInfo();}catch(IOException ioe){ System.out.println(ioe);} } private void saveFile(){ 30

上机练习题参考答案

FileDialog dlg=new FileDialog(this,”Save“,FileDialog.SAVE);dlg.setVisible(true);String filename=dlg.getDirectory()+dlg.getFile();try{ if(!filename.endsWith(”.zip“)){ filename+=”.zip“;} File f=new File(filename);if(!f.exists())f.createNewFile();ZipOutputStream zipos=new ZipOutputStream(new FileOutputStream(f));zipos.setMethod(ZipOutputStream.DEFLATED);zipos.putNextEntry(new ZipEntry(”zip“));DataOutputStream os=new DataOutputStream(zipos);doc=textarea.getText();os.writeUTF(doc);os.close();doczipsize=f.length();showTextandInfo();}catch(IOException ioe){ System.out.println(ioe);} } private void showTextandInfo(){ textarea.replaceRange(doc,0,textarea.getText().length());infotip.setText(”uncompressed size:“+doc.length()+”compressed size:“+doczipsize);} public void actionPerformed(ActionEvent e){ String arg=e.getActionCommand();if(”New“.equals(arg)){ doc=”“;textarea.setText(”“);doczipsize=0;showTextandInfo();} else if(”Open“.equals(arg))openFile();else if(”Save“.equals(arg))saveFile();else if(”exit“.equals(arg)){ dispose();System.out.println(”无此命令“);} } public static void main(String args[]){ xiti5_4 ok=new xiti5_4();ok.setTitle(”zip sample“);ok.setSize(600,300);ok.setVisible(true);} } 31

Java程序设计简明教程

5.编写程序,从试题文件中抽取Java单选题进行测试练习。【参考程序】

import java.io.*;import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.awt.*;import java.util.*;public class xiti5_5 extends JFrame implements ActionListener,ItemListener{ String str[]=new String[7],s;FileReader file;BufferedReader in;JButton restart=new JButton(”重新练习“);JButton next=new JButton(”下一题目“);JButton finish=new JButton(”交卷“);JCheckBox option[]=new JCheckBox[4];JTextField score=new JTextField(10);JTextField question=new JTextField(40);int account=0;xiti5_5(){ for(int i=0;i<4;i++){ option[i]=new JCheckBox();option[i].addItemListener(this);} restart.addActionListener(this);next.addActionListener(this);finish.addActionListener(this);try{ file=new FileReader(”D:java.txt“);in=new BufferedReader(file);}catch(IOException e){} Box boxV=Box.createVerticalBox();JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();p1.setLayout(new FlowLayout(FlowLayout.LEFT));p1.add(new JLabel(”题目“));p1.add(question);p2.setLayout(new FlowLayout(FlowLayout.LEFT));p2.add(new JLabel(”选择答案“));for(int i=0;i<4;i++){ p2.add(option[i]);} p3.setLayout(new FlowLayout(FlowLayout.CENTER));p3.add(new JLabel(”您的得分:“));p3.add(score);p4.setLayout(new FlowLayout(FlowLayout.CENTER));p4.add(restart);p4.add(next);p4.add(finish);boxV.add(p1);boxV.add(p2);boxV.add(p3);boxV.add(p4);Container con=getContentPane();con.add(boxV);this.setSize(800,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);32

上机练习题参考答案

this.validate();reading();} public void reading(){ int i=0;try{ s=in.readLine().trim();if(!(s.startsWith(”end“))){ StringTokenizer tokenizer=new StringTokenizer(s,”#“);while(tokenizer.hasMoreTokens()){ str[i]=tokenizer.nextToken();i++;} question.setText(str[0]);for(int j=1;j<=4;j++){ option[j-1].setLabel(str[j]);} } else if(s.startsWith(”end“)){ question.setText(”考试结束,点击交卷按钮查看得分。“);next.setEnabled(false);in.close();file.close();} }catch(Exception exp){question.setText(”无试题文件“);} } public void actionPerformed(ActionEvent e){ if(e.getSource()==restart){ account=0;next.setEnabled(true);score.setText(account+”分“);try{ file=new FileReader(”D:java.txt“);in=new BufferedReader(file);}catch(IOException ee){} reading();} if(e.getSource()==next){ reading();for(int j=0;j<4;j++){ option[j].setEnabled(true);option[j].setSelected(false);} } if(e.getSource()==finish){ int n=JOptionPane.showConfirmDialog(null,”交卷以后将不能再修改,确实要交卷吗?“, ”确认对话框“,JOptionPane.YES_NO_OPTION);if(n==JOptionPane.YES_OPTION){ for(int i=0;i<4;i++){ option[i].setEnabled(false);} score.setText(account*10+”分“);restart.setEnabled(false);next.setEnabled(false);33

Java程序设计简明教程

finish.setEnabled(false);} } } public void itemStateChanged(ItemEvent e){ for(int j=0;j<4;j++){ if(option[j].getLabel().equals(str[5])&&option[j].isSelected()){ account++;} } } public static void main(String args[]){ xiti5_5 ET=new xiti5_5();} }

上机练习题6 1.编制程序,求如下表达式的值。

M = sin(x)sin(xy)sin(xz)+

sin(y)sin(yx)(yz)+

sin(z)sin(zx)(zy)*E

式中,x,y,z从键盘输入,要求用自定义异常来捕获异常。E=5,PI=3.14159。【参考程序】

import java.awt.event.*;import java.applet.*;import java.awt.*;import java.math.*;public class xiti6_1 extends Applet implements ActionListener{ Label Label1,Label2,Label3,Label4,Label5;TextField Text1,Text2,Text3;int E=5;double PI=3.14159;double shu[]=new double[3];String answerStra;double jishu[]=new double[3];public void init(){ Label1=new Label(”输入x的值:“);add(Label1);Text1=new TextField(6);add(Text1);Label2=new Label(”输入y的值:“);add(Label2);Text2=new TextField(6);add(Text2);Label3=new Label(”输入z的值:“);add(Label3);Text3=new TextField(6);add(Text3);Label4=new Label(” “);add(Label4);34

上机练习题参考答案

Label5=new Label(” “);add(Label5);Text1.addActionListener(this);Text2.addActionListener(this);Text3.addActionListener(this);} public void actionPerformed(ActionEvent evt){ try{ shu[0]=Double.valueOf(Text1.getText()).doubleValue();shu[1]=Double.valueOf(Text2.getText()).doubleValue();shu[2]=Double.valueOf(Text3.getText()).doubleValue();Label5.setText(”“+ Result1());}catch(NumberFormatException e){ answerStra=”输入的必需是数字“;Label4.setText(answerStra);} catch(NumberRangeExcetion ee){ answerStra=ee.getMessage();Label4.setText(answerStra);} repaint();} public double Result1()throws NumberRangeExcetion{ int i;double answer=0;try{ jishu[0]=Math.sin(shu[0])/(Math.sin(shu[0]-shu[1])*Math.sin(shu[0]-shu[2]));jishu[1]=Math.sin(shu[1])/(Math.sin(shu[1]-shu[0])*Math.sin(shu[1]-shu[2]));jishu[2]=Math.sin(shu[2])/(Math.sin(shu[2]-shu[1])*Math.sin(shu[2]-shu[0]))*E;for(i=0;i<3;i++){ answer=jishu[i]+answer;} }catch(ArithmeticException eee){ answerStra=eee.toString();} return answer;} } class NumberRangeExcetion extends Exception{ NumberRangeExcetion(String msg){ super(msg);} }

2.用继承Thread类的方法实现一个多线程程序。程序先后启动三个线程,每个线程首先打印出一条线程创建信息,然后休眠一个随机时间,最后打印出线程结束信息退出。

【参考程序】

//文件xiti6_2.java import java.applet.*;import java.awt.*;import java.awt.event.*;import java.math.*;import javax.swing.*;public class xiti6_2 extends Applet implements ActionListener{ 35

Java程序设计简明教程

JTextArea TextA;JButton Button1;public void init(){ Button1=new JButton(”启动线程“);add(Button1);TextA=new JTextArea();add(TextA);Button1.addActionListener(this);this.setSize(400,220);} public void actionPerformed(ActionEvent e){ TextA.setText(”创建线程1“+”n“);xiancheng1 aa=new xiancheng1();aa.start();xiancheng2 bb=new xiancheng2();TextA.setText(TextA.getText()+”创建线程2“+”n“);bb.start();xiancheng3 cc=new xiancheng3();TextA.setText(TextA.getText()+”创建线程3“+”n“);cc.start();} class xiancheng1 extends Thread{ public void run(){ while(true){ try{ sleep((int)(Math.random()*1000));TextA.setText(TextA.getText()+”线程1运行结束“+”n“);} catch(InterruptedException e){} catch(Exception v){} } } } class xiancheng2 extends Thread{ public void run(){ while(true){ try{ sleep((int)(Math.random()*1000));TextA.setText(TextA.getText()+”线程2运行结束“+”n“);} catch(InterruptedException ee){} catch(Exception vv){} } } } class xiancheng3 extends Thread{ public void run(){ while(true){ try{ sleep((int)(Math.random()*1000));TextA.setText(TextA.getText()+”线程3运行结束“+”n“);} catch(InterruptedException eee){} 36

上机练习题参考答案

catch(Exception vvv){} } } } } 3.编制程序,同时显示两个时区的时钟,并将时钟的结果显示在Fram窗体中。【参考程序】

//文件xiti6_3.java import java.applet.*;import java.awt.*;import java.awt.event.*;import java.lang.NullPointerException;import java.util.*;import javax.swing.*;public class xiti6_3{ public static void main(String[] args){ JFrameDemo frame=new JFrameDemo();frame.init();frame.show();} } class JFrameDemo extends JFrame implements ActionListener{ JTextArea TextA;Date time;thead thead1;JMenuBar myMenu=new JMenuBar();//建立了一个菜单条。

JMenuItem[] fileMenuItems={new JMenuItem(”显示时间“),new JMenuItem(”隐藏时间“),new JMenuItem(”退出“)};JMenu[] menus={new JMenu(”文件“),new JMenu(”编辑“),new JMenu(”帮助“)};String str1,str2;int datB,datA;long yearB,monthB,dataB;long yearA,monthA,dataA;long hoursB,minutesB,secondsB;long hoursA,minutesA,secondsA;public void init(){ for(int i=0;i

if(e.getSource()==fileMenuItems[0]){ datB=time.getDay();37

Java程序设计简明教程

datA=time.getDay();switch(datB){ case 1:str1=”星期一“;break;case 2:str1=”星期二“;break;case 3:str1=”星期三“;break;case 4:str1=”星期四“;break;case 5:str1=”星期五“;break;case 6:str1=”星期六“;break;default :str1=”星期日“;break;} switch(datA){ case 1:str2=”星期一“;break;case 2:str2=”星期二“;break;case 3:str2=”星期三“;break;case 4:str2=”星期四“;break;case 5:str2=”星期五“;break;case 6:str2=”星期六“;break;default :str2=”星期日“;break;} yearB=time.getYear()+1900;monthB=time.getMonth()+1;dataB=time.getDate();hoursB=time.getHours();minutesB=time.getMinutes();secondsB=time.getSeconds();yearA=time.getYear()+1900;monthA=time.getMonth()+1;dataA=time.getDate();hoursA=time.getHours()+12;if(hoursA>=24){ hoursA=hoursA-24;} if(hoursB>=0 & hoursB<=12){ dataA=time.getDate()-1;} minutesA=time.getMinutes();secondsA=time.getSeconds();thead1=new thead();thead1.start();} //隐藏时间

if(e.getSource()==fileMenuItems[1]){ TextA.setText(”“);} //退出程序

if(e.getSource()==fileMenuItems[2]){ java.lang.System.exit(0);} } class thead extends Thread{ public void run(){ while(true){ TextA.setText(”n“+” 北京时间“+” 纽约时间“+”n“+”n“+yearB+”年“+monthB+”月“+dataB+”日

上机练习题参考答案

“+str1+” “+yearA+”年“+monthA+”月“+dataA+”日“+str2+”n“);TextA.setText(TextA.getText()+” “+hoursB+”时“+minutesB+”分“+secondsB+”秒“+” “+hoursA+”时“+minutesA+”分“+secondsA+”秒“);try{ sleep(1000);secondsB=secondsB+1;secondsA=secondsA+1;if(secondsB==60){ secondsB=0;minutesB=minutesB+1;} if(secondsA==60){ secondsA=0;minutesA=minutesA+1;} if(minutesB==60){ minutesB=0;hoursB=hoursB+1;} if(minutesA==60){ minutesA=0;hoursA=hoursA+1;} if(hoursB==24){ hoursB=0;dataB=dataB+1;datB=datB+1;} if(hoursA==24){ hoursA=0;dataA=dataA+1;datA=datA+1;} if(datB>7){ datB=1;} if(datA>7){ datA=1;} switch(datB){ case 1:str1=”星期一“;break;case 2:str1=”星期二“;break;case 3:str1=”星期三“;break;case 4:str1=”星期四“;break;case 5:str1=”星期五“;break;case 6:str1=”星期六“;break;default :str1=”星期日“;break;} switch(datA){ case 1:str2=”星期一“;break;case 2:str2=”星期二“;break;case 3:str2=”星期三“;break;case 4:str2=”星期四“;break;

Java程序设计简明教程

case 5:str2=”星期五“;break;case 6:str2=”星期六“;break;default :str2=”星期日“;break;} if(monthB==1||monthB==3||monthB==5||monthB==7||monthB==8||monthB==10||monthB==12){ if(dataB>31){ dataB=0;monthB=monthB+1;} } if(monthB==4||monthB==6||monthB==9||monthB==11){ if(dataB>30){ dataB=0;monthB=monthB+1;} } if(monthB==2){ if(yearB%4!=0||(yearB%100==0 & yearB%400!=0)){ if(dataB>28){ dataB=0;monthB=monthB+1;} } else{ if(dataB>29){ dataB=0;monthB=monthB+1;} } } if(monthA==1||monthA==3||monthA==5||monthA==7||monthA==8||monthA==10||monthA==12){ if(dataA>31){ dataA=0;monthA=monthA+1;} } if(monthA==4||monthA==6||monthA==9||monthA==11){ if(dataA>30){ dataA=0;monthA=monthA+1;} } if(monthA==2){ if(yearA%4!=0||(yearA%100==0 & yearA%400!=0)){ if(dataA>28){ dataA=0;monthA=monthA+1;} } else{ if(dataA>29){ dataA=0;monthA=monthA+1;40

上机练习题参考答案

} } } if(monthB>12){ monthB=0;yearB=yearB+1;} if(monthA>12){ monthA=0;yearA=yearA+1;} } catch(InterruptedException e){} } } } } 4.使用异常处理机制和输入/输出处理机制编写一个程序,实现当用户输入一个文件名时,判断这个文件名是否存在,若不存在,允许用户重新输入,直到输入了一个正确的文件名后,则打开这个文件并将文件中的内容输出到屏幕上。

【解题思路】

(1)定义从键盘接收数据的标准输入流对象和文件对象;

(2)在此文件对象的基础上建立缓冲文件输入流,如果文件不存在,通过异常处理机制显示错误的处理结果,并要求重新输入文件路径;

(3)如果输入的文件路径正确,使用缓冲文件输入流对象的方法将文件中的内容读取出来,并在屏幕上显示,然后退出整个程序。

【参考程序】

//文件xiti6_4.java import java.io.*;public class xiti6_4{ public static void main(String args[]){ File f;BufferedReader br;String str;while(true){ try{ InputStreamReader isr=new InputStreamReader(System.in);BufferedReader br1=new BufferedReader(isr);System.out.print(”请输入文件的全部路径:“);str=br1.readLine();f=new File(str);br=new BufferedReader(new FileReader(f));while((str=br.readLine())!=null)System.out.println(str);isr.close();br1.close();break;}catch(IOException e){ System.out.println(”输入错误!请重新输入:“);} } } 41

Java程序设计简明教程

}

上机练习题7 1.编制Applet程序,使用Graphics类的常用方法,绘制一面五星红旗。【参考程序】

import java.applet.*;import java.awt.*;import java.awt.Graphics;public class Flag extends Applet{ public void paint(Graphics g){ int x1[]={100,105,118,107,112,100,88,93,83,95,100};int y1[]={60,74,74,82,96,87,96,82,74,74,60};int x2[]={135,137,140,137,138,135,132,133,130,133,135};int y2[]={54,58,58,60,64,62,64,60,58,58,54};g.setColor(Color.red);g.fillRect(60,40,250,160);g.setColor(Color.yellow);g.fillPolygon(x1,y1,11);g.fillPolygon(x2,y2,11);g.copyArea(130,54,10,10,10,15);g.copyArea(130,54,10,10,10,30);g.copyArea(130,54,10,10,0,42);} } 2.编制Applet程序,实现一行文字的动画显示,即文字跑马灯。【参考程序】

import java.awt.*;import java.applet.*;public class ShadowText extends Applet implements Runnable{ private Image img;private Image offI;private Graphics offG;private Thread thread = null;private MediaTracker imageTracker;private int height,width;private String text;private int FontSize;private Font font;private int textcolor, backcolor, shadowcolor;public void init(){ width = this.size().width;height = this.size().height;

上机练习题参考答案

String s = new String(getParameter(”Text“));text = new String(”Hello“);if(s!= null)text = s;FontSize = 30;s = new String(getParameter(”FontSize“));if(s!= null)FontSize = Integer.parseInt(s);s = getParameter(”Fore“);textcolor =(s==null)? 0x000000 : Integer.parseInt(s, 16);s = getParameter(”Back“);backcolor =(s==null)? 0x000000 : Integer.parseInt(s, 16);s = getParameter(”shadow“);shadowcolor =(s==null)? 0x000000 : Integer.parseInt(s, 16);this.setBackground(new Color(backcolor));img = createImage(width,height);Graphics temp = img.getGraphics();temp.setColor(new Color(backcolor));temp.fillRect(0,0,width,height);temp.setColor(new Color(shadowcolor));font = new Font(”TimesRoman“,Font.BOLD,FontSize);temp.setFont(font);temp.drawString(text,10,height*3/4);temp.setColor(new Color(textcolor));temp.drawString(text,10-3,height*3/4-3);imageTracker = new MediaTracker(this);imageTracker.addImage(img,0);try{ imageTracker.waitForID(0);} catch(InterruptedException e){} offI = createImage(width,height);offG = offI.getGraphics();} public void start(){ if(thread == null){ thread = new Thread(this);thread.start();} } public void run(){ int x=width;while(thread!= null){ try{ offG.drawImage(img,x,0,this);repaint();thread.sleep(50);}catch(InterruptedException e){} x-=3;if(x <-width){ x = width;} } } 43

Java程序设计简明教程

public void update(Graphics g){ paint(g);} public void paint(Graphics g){ g.drawImage(offI,0,0,this);} } 3.编制Applet程序,实现图片的水中倒影。【参考程序】

//文件Ripple.java import java.awt.*;import java.applet.*;public class Ripple extends Applet implements Runnable{ Thread thread=null;private Graphics g,refraction;private Image image,refimage;private int currentImg;private int imageW=0,imageH=0;private boolean finishLoad=false;private final int frames=12;private String name=”“;public void init(){ String param;param=getParameter(”image“);if(param!=null)name=param;} public void start(){ if(thread==null){ thread=new Thread(this);thread.start();} } public void stop(){ if(thread!=null){ thread.stop();thread=null;} } public void run(){ currentImg=0;g=getGraphics();MediaTracker imageTracker=new MediaTracker(this);image=getImage(getDocumentBase(),name);imageTracker.addImage(image,0);try{ imageTracker.waitForID(0);finishLoad=!imageTracker.isErrorAny();}catch(InterruptedException e){} imageW=image.getWidth(this);imageH=image.getHeight(this);createRipple();repaint();44

上机练习题参考答案

while(true){ try{ if(!finishLoad)return;if(refimage!=null){ g.drawImage(refimage,(-currentImg*imageW),imageH,this);g.drawImage(refimage,((frames-currentImg)*imageW),imageH,this);} g.drawImage(image,0,-1,this);if(++currentImg==frames)currentImg=0;thread.sleep(50);}catch(InterruptedException e){} } } public void createRipple(){ Image offI=createImage(imageW,imageH+1);//创建一个缓冲区图像 Graphics offG=offI.getGraphics();int phase=0;int x,y;double p;offG.drawImage(image,0,1,this);for(int i=0;i<(imageH>>1);i++){ offG.copyArea(0,i,imageW,1,0,imageH-i);offG.copyArea(0,imageH-1-i,imageW,1,0,-imageH+1+(i<<1));offG.copyArea(0,imageH,imageW,1,0,-1-i);} refimage=createImage((frames+1)*imageW,imageH);refraction=refimage.getGraphics();refraction.drawImage(offI,frames*imageW,0,this);for(phase=0;phase

Java程序设计简明教程

g.drawImage(image,0,-1,this);} } 4.结合图形用户界面与事件处理,创建一个日历GUI程序,要求能够选择并更新显示2007年12个月份中的任意一个月份的具体信息。

【参考程序】

//文件Calendar.java import java.applet.Applet;import java.awt.*;import java.util.Date;public class Calendar extends Applet{ static final int TOP=90;static final int HEADER=30;static final int NCELLX=7;static final int CELLSIZE=60;static final int MARGIN=8;static final int FEBRUARY=1;Label yearLabel=new Label(”年份:“);TextField yearTextField=new TextField(”1996“,5);Label monthLabel=new Label(”月份:“);Choice monthChoice=new Choice();Button updateButton=new Button(”更新“);Date now=new Date();Font smallArialFont=new Font(”Arial“,Font.PLAIN,15);Font bigArialFont=new Font(”Arial“,Font.BOLD,30);String days[]={”星期日“,”星期一“,”星期二“,”星期三“,”星期四“,”星期五“,”星期六“};String months[]={”一月“,”二月“,”三月“,”四月“,”五月“,”六月“,”七月“,”八月“,”九月“,”十月“,”十一月“,”十二月“};int DaysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};int userMonth;int userYear;public void init(){ setBackground(Color.white);userMonth=now.getMonth();userYear=now.getYear()+1900;yearLabel.setFont(smallArialFont);add(yearLabel);yearTextField.setFont(smallArialFont);yearTextField.setText(String.valueOf(userYear));add(yearTextField);monthLabel.setFont(smallArialFont);add(monthLabel);monthChoice.setFont(smallArialFont);for(int i=0;i<12;i++)monthChoice.addItem(months[i]);monthChoice.select(userMonth);add(monthChoice);updateButton.setFont(smallArialFont);add(updateButton);} public void paint(Graphics g){ FontMetrics fm;int fontAscent;int dayPos;46

上机练习题参考答案

int xSize,ySize;int numRows;int xNum,yNum;int numDays;String dayStr;int margin;String caption;fm=g.getFontMetrics();fontAscent=fm.getAscent();dayPos=TOP+(HEADER+fontAscent)/2;xSize=NCELLX * CELLSIZE;g.drawRect(0,TOP,xSize,HEADER);for(int i=0;ixSize){ xNum=CELLSIZE-MARGIN;yNum += CELLSIZE/2;} } g.setFont(bigArialFont);fm=g.getFontMetrics();margin=2 * fm.getDescent();caption=String.valueOf(userYear)+”年“ +months[userMonth];g.drawString(caption,(xSize-fm.stringWidth(caption))/2,TOP-margin);} public boolean action(Event e,Object o){//事件处理 int userYearInt;if(e.target instanceof Button){ if(”更新“.equals((String)o)){ userMonth=monthChoice.getSelectedIndex();userYearInt=Integer.parseInt(yearTextField.getText(),10);if(userYearInt>1581)userYear=userYearInt;repaint();return true;} } return false;} int NumberRowsNeeded(int year,int month){ //返回某年某月需要的行数 int firstDay;int numCells;if(year<1582)return(-1);47

Java程序设计简明教程

if((month<0)||(month>11))return(-1);firstDay=CalcFirstOfMonth(year,month);if((month==FEBRUARY)&&(firstDay==0)&&!IsLeapYear(year))return(4);numCells=firstDay+DaysInMonth[month];if((month==FEBRUARY)&&(IsLeapYear(year)))numCells++;return((numCells <= 35)? 5 : 6);} int CalcFirstOfMonth(int year,int month){//计算某年某月的第一天 int firstDay;int i;if(year<1582)return(-1);if((month<0)||(month>11))return(-1);firstDay=CalcJanuaryFirst(year);for(i=0;iFEBRUARY)&& IsLeapYear(year))firstDay++;return(firstDay%7);} boolean IsLeapYear(int year){ //判某年是否是闰年 if((year%100)==0)return((year%400)==0);return((year%4)==0);} int CalcJanuaryFirst(int year){//计算某年一月份的第一天 if(year<1582)return(-1);return((5+(year-1582)+CalcLeapYears(year))%7);} int CalcLeapYears(int year){ //计算闰年一月份的第一天 int leapYears;int hundreds;int fourHundreds;if(year<1582)return(-1);leapYears=(year-1581)/4;hundreds=(year-1501)/100;leapYears-= hundreds;fourHundreds=(year-1201)/400;leapYears += fourHundreds;return(leapYears);} }

上机练习题8 1.设计Java Applet程序,实现在图片上飘雪花的特效。【参考程序】

上机练习题参考答案

import java.applet.Applet;import java.awt.*;import java.util.Random;public class SnowPic extends Applet implements Runnable{ Thread mainThread;Image offScreen,gAlc[];Random rand;int stopFlag,snows,wind,threadSleep,snowSize;int[] snowX,snowY;long stopTime=0;Dimension dim;MediaTracker mt;public SnowPic(){} int getParameter(String s1,int s2){ String s=getParameter(s1);return(s!=null)?Integer.parseInt(s):s2;} int getParameter(String s1,int s2,int max,int min){ String s=getParameter(s1);if(s!=null){ if((s2=Integer.parseInt(s))>max)return max;else if(s2

Java程序设计简明教程

mainThread=new Thread(this);mainThread.start();} } public void stop(){ mainThread=null;} public void run(){ while(mainThread!=null){ try{ Thread.sleep(threadSleep);}catch(InterruptedException _ex){return;} repaint();} } public void drawBackSnow(Graphics g){ g.setColor(Color.white);for(int i=0;i=dim.width)snowX[i]=0;if(snowX[i]<0)snowX[i]=dim.width-1;if(snowY[i]>=dim.height||snowY[i]<0){ snowX[i]=Math.abs(rand.nextInt()%dim.width);snowY[i]=0;} } wind=rand.nextInt()%5-2;} public void paint(Graphics g){ offScreen.getGraphics().setColor(Color.black);offScreen.getGraphics().fillRect(0,0,dim.width,dim.height);offScreen.getGraphics().drawImage(gAlc[0],0,0,this);drawBackSnow(offScreen.getGraphics());g.drawImage(offScreen,0,0,null);} public void update(Graphics g){ paint(g);} } 2.设计一个通讯录,保存读者信息。要求:通讯录中包括一般通讯录中的基本信息,也需要实现普通的检索功能。通讯录写入文件中。程序执行时,需要从文件中导入数据,程序退出后,再将数据保存到文件中。

【参考程序】

import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;import java.math.*;import java.io.*;import java.util.*;import javax.swing.text.*;50

第三篇:java程序设计教案

《Java程序设计》

授 课 人:授课班级:电子商务专业

第一章

Java语言简介

教学目的要求

 了解Java的基本特点和用途  掌握如何下载Java SDK软件包  了解设置Java程序的开发环境SDK  如何运行Java程序  了解Java的概貌 主要内容

 Java语言的发展历程;  Java语言的特点;     Java语言的开发工具;

Java应用程序和小程序; Java程序的注释方法; 写Java程序的风格规范。

重点内容

 Java语言的特点;  Java语言的开发工具;

 Java应用程序和小程序;

难点内容

课时分配

1课时 教学方法

讲授法、演示法、对比法 讲授内容提要

1.1

Java语言的发展简介

1991年Sun Mircosystem 公司成立了一个Green项目开发小组,Jame Gosling 为组长; 设计Java 采用虚拟机代码(Virtual Machine Code),即.class文件,它通过解释器运行 ; 1995年5月Sun Mircosystem 公司对外正式发布Java1.0;

Java2 用途:适用于各种应用开发,尤其是网络应用,网络服务和嵌入式系统。1.2

Java语言的特点 1.简单性 2.面向对象 3.网络适用性 4.健壮性 5.安全性

6.平台无关性 7.可移植性 8.解释型 9.高性能 10.多线程 11.动态性 12.丰富的类库 13.嵌入浏览器运行

1.3

Java类库的概念 1.4

网络浏览器 1.5

Java开发工具

NetBeans: 这个集成环境可以方便地进行程序的编辑、编译、生成和运行。J2sdk :

http:// java.sun.com免费下载;Visual J++ 6.0 / 8.0: VJ++还吸收了VB集成开发环境IDE的特征,是一个强有力的Java程序开发工具。Jcreator

Eclipse(MyEclipse)等

1.6

Java程序的分类 基于控制台的应用程序;

基于浏览器运行的小程序applet。

小程序与应用程序的区别是:小程序必须依赖一个HTML文件和支持Java的网络浏览器。老师演示小程序和applet程序

应用程序举例(程序1-1): public class hello {

public static void main(String args[ ]){

System.out.println(“Hello Java!”);

} }

小程序举例(程序1-2):

import java.awt.Graphics;

// 注意该行的含义 import java.applet.Applet;public class sayhello extends Applet {

public void paint(Graphics g){

g.drawString(“Hello Java!”,35,30);

} }

小程序对应的HTML文件:

height=100 width=200>

1.7

1.8 对Java程序的解释

编写Java程序的风格要求 课堂练习:

请编写一个应用程序输出你自己的学号和姓名 课外练习(作业): 下载并安装J2SDK; 设置系统环境变量 下载并安装MyEclipse 熟悉MyEclipse的开发环境

第2章

数据类型、运算符和表达式

教学目的要求

 掌握字符常量和符号表示的常量的概念和应用     掌握整形、浮点型、字符型和布尔型变量的概念和应用 掌握数据的概念 理解参数传递方式

学会逻辑运算符、算术运算符和位运算符的使用方法

主要内容

 常量:包括字面常量和符号表示的常量;  变量:整形、浮点型、字符型和布尔型;  数组:Java的数组属于类类型;  参数传递方式;

 运算符:包括逻辑运算符、算术运算符和位运算符等;

重点内容

 整形、浮点型、字符型和布尔型变量的概念和应用;  符常量和符号表示的常量的概念和应用

难点内容

 参数传递方式

课时分配

2课时 教学方法

讲授法、演示法、对比法、实验验证法 讲授内容提要

2.1

常量

整形常量:采用八进制、十进制、十六进制表示,但不能采用二进制表示,和C/C++中的一样。

浮点常量:采用十进制或科学记数法表示。在缺省情况下一个浮点数是double型。布尔常量:true和false,它们不是数,不能进行算术运算。字符常量:与C/C++中的表示类似

。字符串常量:Java中字符串常量是对象。

2.2

变量

变量的命名原则是:以字母(’a’„’z’和 ’A’„’Z’)、下划线(‘_’)和‘$’符号开头的,由字母、数字(’0’„’9’)、下划线和‘$’构成的一个符号序列。

例如,a,_a,NameOfStudent,$10均是合法变量名,而-a和9a是非法变量名。关键字不能用作变量名(见表2-1)注意:Java对变量是区分大小写.2.2.1

整形类型的变量 字节(byte)型,8个位。

短整形(short),占16个位。整形(int),占32个位。

长整形(long int),占64个位。

Java中的整形最值均有符号。例如程序2-1测试最值:

public class Test_Int {

// 程序2-1 测试整形变量的最值

public static void main(String [ ] args){

System.out.println(Byte.MAX_VALUE);

System.out.println(Byte.MIN_VALUE);

System.out.println(Short.MAX_VALUE);System.out.println(Short.MIN_VALUE);

System.out.println(Integer.MAX_VALUE);

System.out.println(Integer.MIN_VALUE);

System.out.println(Long.MAX_VALUE);

System.out.println(Long.MIN_VALUE);

} }

注意: byte、short、int、long是原子类型,而Byte、Short、Integer和Long分别是四种原子类型对应的类类型。

2.2.2

字符类型变量

Java字符量的长度为16个位,表示范围是从‘u0000’ 到 ‘uffff’ 即从0 到 65535; Character是char类型对应的类类型 ; 最大值 Character.MAX_VALUE ; 最小值 Character.MIN_VALUE ; 2.2.3

浮点类型变量 分类:float和double。

Float、Double 是对应的类类型 ;

Float.MAX_VALUE、Float.MIN_VALUE是最值。Float.POSITIVE_INFINITY 和

Float.NEGATIVE_INFINITY是正/负无限大。2.2.4

布尔类型变量

boolean变量取值:true和false ;

true和false不能转换成任何数值表示,true不是1,false也不是0。

2.2.5

原子类型变量的生存空间

一个变量的生存空间是由两个大括号决定的 范围。下列写法在C/C++中是正确的,但在Java中是错误的(注意)。{

int x=1;{ int x=0;// 错误 } }

2.3

变量赋值问题

如果类中定义的原子类型变量,未给出初值,那么它们将有缺省值 :byte、short、int 和long变量的缺省值是0;char、float、double和boolean变量的缺省值分别是’u0’、0.0f、0.0d和false。

方法内定义的局部变量,应当对其赋值,否则无法通过编译。例如: // 程序2-4 class Test {

// 定义一个类

int Value;// 类中的变量未赋值,缺省就是0 } public class Test_Var{ public static void main(String [ ] args){

int x=100;

// 必须赋值,否则无法通过编译

Test obj=new Test();// 对象赋值

System.out.println(obj.Value +“

”+x);

} } 2.4

数组

Java数组是系统定义类Array 的子类; 数组的分类同C/C++:一维和多维。

2.4.1

一维数组

定义数组的格式 :int a[ ] ; 或

int[ ] a ;其值是null ;

在定义数组时不能指定大小。a仅是一个引用,代表一个数组名,但没有对应的空间。产生数组空间的方法有两种 :

在定义时直接赋值:int a[ ]={1,2,3};

通过new分配空间: int a[ ]=new int[10];public class Test_Array{

public static void main(String [ ] args){

int a[ ]={1,2,3}, b[ ];

b= a;

for(int i=0;i<3;i++)b[ i ]++;

for(int i=0;i<3;i++)System.out.println(a[i]);

} }

public class Test_Array{

public static void main(String [ ] args){

int a[ ]={1,2,3}, b[ ];

b = new int[6];

System.out.println(“b数组长度 = ” + b.length);

for(int i=0;i

System.out.print(b[i]+“

”);

} }

注意:(1)获得数组元素的个数:数组名.length;

(2)一个整形数组若仅仅采用new分配空间,而没有对其赋值,那么每个元素的值是0

注意:Java数组名是一个引用,当将一个数组名赋值给另一个数组时,实际上是名字的复制 2.5

Java中的参数传递方式

Java的参数传递的形式有两种:基本类型按值传递,对象类型按引用传递;

通过return语句从方法中返回时,基本类型总是以值的方式返回,而对象总是以引用方式返回。例如程序2-8 : class test{ int x;} public class Test_Paras {

static test fun(test o,int y){ o.x=20;

}

} y=1;

return o;public static void main(String [ ] args){ test obj1 , obj2;int

Val = 3;obj1=new test();obj1.x=100;

obj2=fun(obj1,Val);

System.out.println(obj1.x+“ ”+ obj2.x+“ ”+Val);

} 2.6

Java的运算符 主要包括:

算术运算符、关系运算符、逻辑运算符、位运算符和三元条件运算符。2.6.1

算术运算符

算术运算符:+、-、*、/、%、++和--,与C/C++基本相同。

%运算符不但可以对整形数据运算,而且可以对浮点型数据运算。例如:3.14 % 2.5的值约等于0.64 ; 隠式数据类型转换:

当整型与浮点型数据进行混合运算时,表达式中的数据类型会进行相应的自动转换,规则为:byte->short->int->long->float->double。

这种转换规则也适应于赋值语句,当赋值符左右两侧变量类型不一致时,只要转换过程中不丢失数据,便进行自动转换。

class number { int x;}

public class relationalOperator{

public static void main(String args[ ]){

} number n1,n2;

n1=new number();

n2=new number();n1.x=1;

n2.x=1;if(n1.x==n2.x)

System.out.println(“对象的数据成员x相等!”);

if(n1==n2)

System.out.println(“n1和n2是一个对象!”);else

System.out.println(“n1和n2不是一个对象!”);}

2.6.2

关系运算符

关系运算符不能同其它类型的变量一同

参与运算,例如假设a,b,c是三个整形的变量,那么 a=b==c 是

正确 OR 错误? ;

关系运算符用于对象时,是判别两个引用是否代表同一个对象。而不是判断两个引用所指向的对象是否同属一个类。

2.6.3

逻辑运算符

逻辑运算符有&&、|| 和!,分别是与、或和非。运算结果是true或false;

逻辑运算有求值“短路”现象,例如程序2-11 : public class shortCut {

static boolean testOne(int x){ System.out.println(x+“ < ”+1+“ ” +(x<1));return x < 1;}

static boolean testTwo(int x){ System.out.println(x+“ < ”+1+“ ” +(x<2));return x < 2;

}

public static void main(String [ ] args){

} if(testOne(6)&& testTwo(1))System.out.println(“表达式为真”);else

System.out.println(“表达式为假”);

}

2.6.4

位运算符 位运算符:&、|、^、~、<<、>>,分别称为位与、或、异或、左移、右移;

Java引入一个专门用于逻辑右移运算符>>>,它采用了所谓的零扩展技术,不论原值是正或负,一律在高位补0。例如:

int a=-2 , b;

b=a>>>30;2.6.5

三元条件运算符 语法格式:(exp)?(exp1):(exp2);

Java要求:(exp1)与(exp2)必须同类型。2.6.6

“+”运算符

Java对“+”进行了重载,可以将任何类型的对象(包含原子类型)转化为String类型。例如:

int x=1;char ch='A';double d=9.8;System.out.println(“Result: ”+x+ch+9.8);课堂练习:

课外练习(作业):

P32 3、4、6题。

第3章

控制语句

教学目的要求

 了解Java程序的结构,学习使用各种语句结构来控制程序的流程,完成程序的功能任务。

主要内容

 Java的分支语句;  循环控制语句;

 break和continue语句;

 带标号的break和continue语句。

重点内容

 Java的分支语句;  循环控制语句;

 break和continue语句;

难点内容

 循环控制语句;

 break和continue语句;

课时分配

3课时 教学方法

讲授法、演示法、对比法、实验验证法 讲授内容提要

3.1

分支语句 if-else语句;

switch-case语句。

3.1.1

if 语句

if语句的语法格式 同C/C++;

条件表达式必须是布尔类型,例如:

下面的写法在C/C++中是合法的,但在Java中却是非法的 : int i=10;if(i)

...程序3-1描述了用applet从文本框获取数据,然后将比较的结果显示出来。

// 程序 3-1 import java.awt.*;import java.applet.*;

public class compareNumbers extends Applet{

Label lab1,lab2;TextField input1,input2;

int num1,num2;public void init(){ lab1=new Label(“输入第1个整数”);

input1=new TextField(10);

lab2=new Label(“输入第2个整数”);input2=new TextField(10);

add(lab1);

add(input1);add(lab2);add(input2);} public boolean action(Event e , Object o){

} if(e.target==input1 || e.target==input2){ num1=Integer.parseInt(input1.getText());

num2=Integer.parseInt(input2.getText());

if(num1num2)showStatus(num1+“ > ”+num2);else showStatus(num1+“ == ”+num2);} return true;} 3.1.2

switch 语句

switch语句的语法结构 同C/C++;

switch后面的表达式类型必须是字符类型或整形 ; case后面的常量不能重复 ;

程序3-3采用小程序实现将学生的百分制成绩转换为优、良,中、及格和不通过五个等级: // 程序3-3 import java.awt.*;import java.applet.*;

public class scoreConvert extends Applet{

Label prompt;

TextField input;int Excellent,Good,Middle,Pass,Failure;public void init(){ prompt=new Label(“输入成绩”);

} public void paint(Graphics g){ g.drawString(“各等级的人数:”,25,40);g.drawString(“优秀

: ”+Excellent,25,55);g.drawString(“良好

: ”+Good,25,70);g.drawString(“中等

: ”+Middle,25,85);g.drawString(“及格

: ”+Pass,25,100);g.drawString(“不通过: ”+Failure,25,115);input=new TextField(2);add(prompt);add(input);} public boolean action(Event e , Object o){

int score=Integer.parseInt(input.getText());

showStatus(“");

input.setText(”“);

switch(score/10){

case 10: case 9: Excellent++;

break;case 8: Good++;

break;case 7: Middle++;

break;case 6: Pass++;

break;case 5:

case 4:

case 3: case 2:

case 1:

case 0: Failure++;

break;default: showStatus(”输入有误,重新输入!“);

}

repaint();

return true;} } 程序3-3需要注意的地方

在action()方法中调用的repaint()方法,是一个系统方法,它具有自动调用paint()方法的能力,从而实现对网页的刷新。3.2

循环控制语句

Java中的循环控制语句有三种,分别是:while,do-while和for语句;循环体内的语句会反复执行,直到控制布尔表达式的值变为false为止。3.2.1

while语句 while语句格式:

while(Boolean-Expression)

StatementS

程序示例3-4 略

3.2.2

do-while语句

do-while语句的语法格式如下: do{

Statement }while(Boolean-Expression);

程序3-5 如下:

// 产生一个大于0.9的随机数为止 public class GenerateDoubleNumbers {

public static void main(String args[ ]){

} double d;do{ d=Math.random();System.out.println(d);

}while(d<0.9);} 3.2.3

for语句

for语句语法格式如下:

for(ForInitopt;Boolean-Expression;ForUpdateopt)

Statement // 程序3-6输出一个*三角形

public class printGraphics extends Applet{

public void paint(Graphics g){ int xpos,ypos=0;

for(int row=6;row>=1;row--){ xpos=25;ypos+=15;

} for(int column=1;column<=row;column++){

} g.drawString(”*“,xpos,ypos);xpos+=7;

} } 3.3

break语句和continue语句

3.3.1

不带标号的break语句和continue语句

break语句可以跳出包含它的最内层的循环,不再执行剩余的语句;

continue语句停止执行当前的循环,回到循环处,开始执行下一轮的循环。这些特性和C/C++的功能一样。for(int i=1;i<10;i++)

{

if(i%3==0)

continue;

else

System.out.println(”i = “+i);

}

for(int i=1;i<10;i++)

{

if(i%3==0)

break;

else

System.out.println(”i = “+i);

}

课堂练习:

1、仔细分析下面程序,写出程序的最终运行结果。public class s_switch {

public static void main(String args[])

{

int ch=8;

int r=10;

switch(ch-1){

case 7: r=r+3;

case 8: r=r+5;

case 9: r=r+6;break;

default:;

}

System.out.println(”r=“+r);

} }

2、随机产生26个英文字母a~z,直到大于u为止。用while和for语句实现。

课外练习(作业):

P44

1—4

第4章

Java的类

教学目的要求

 理解面向对象编程的基本概念  了解类的封装方法

 如何创建类和对象

 了解成员变量和成员方法的特性

 学习使用OOP方式进行程序设计

 深刻理解类的继承性和多态性

主要内容

 类的定义和使用;  方法的定义和使用;  实例变量和局部变量;  构造方法;     方法的覆盖和重载; 关键字this的用法; 继承的概念和应用; 组合与继承;

 抽象方法和抽象类;

 对象类型转换;

 访问权限限制符:public、private、protected。

重点内容

 类的定义和使用;  方法的定义和使用;  构造方法;

 方法的覆盖和重载;  关键字this的用法;     继承的概念和应用; 组合与继承;

抽象方法和抽象类; 对象类型转换;

难点内容

 构造方法;

 方法的覆盖和重载;  继承的概念和应用;  组合与继承;  抽象方法和抽象类

课时分配

8课时 教学方法

讲授法、演示法、对比法、实验验证法、学生讨论法 讲授内容提要

4.1

类与对象

在Java程序中,除原子类型的变量以外都是对象,连Java程序本身也不例外。

类是面向对象程序设计的基础,OO始终是围绕着对象的封装性、继承性和多态性展开讨论的。

4.1.1

类与对象的区别

类是一个抽象的概念,对象是一个具体的概念。

类是在一组对象的基础上,通过抽象和概括获得的一个概念。

对象是由数据和方法紧密结合的一个封装体,具有信息隐藏的能力。

对象可以通过方法(函数)与其它对象进行通信,但并不知道这些方法的实现细节。4.1.2

Java和C编程思想的区别

C是结构化的编程语言,以函数为编程单元,程序员把注意力集中在编写函数上。Java是面向对象的编程语言,以类为编程单元,程序员的精力集中在对类的设计上。

对象将实例变量(instance variable)和对数据的操作(即方法)约束在一起,类似一个独立的程序,易于扩充,易于维护,代码可复用。

4.1.3

如何定义类

类是对象的模板,它定义了对象的结构和操作数据的方法。public class Sayhello extends Applet {

public void paint(Graphics g){

int xPos=35;

int yPos=30;

g.drawString(”Hello Java!“,xPos,yPos);

} } 定义类的通用格式如下:

class className extends superClassName{ type instance-vairbale1;return-type methodName1(parameter-list){

method-body;} }

public class Hello {

public static void main(String args[ ]){

System.out.println(”Hello Java!“);

} }

系统类Object是整个类层次结构中的根。

如果我们要定义Object的子类,可以不指明extends Object,默认情况下一个类就是Object类的子类。

类内定义的变量称为实例变量,函数称为方法;

Java将类的定义和类的实现放在一起,便于系统维护。例如: class point {

// Object类的子类

int x , y;

void init(int a, int b){

int i=0;

x=a;

y=b;

}

} 4.1.4

对象和引用

对象是客观存在的变量,对象的引用就是对象的名字,例如:Point

p1;创建对象:p1=new Point();

一个对象可以有多个别名;

p2=p1;将一个变量设置为null,表明该变量不代表任何对象 :

p1 = null;

每个对象都有自己的变量,改变一个对象的实例变量并不影响到另外一个对象。例如: class Point { // 程序4-1

int x , y;

void init(int a, int b){

x=a;

y=b;

}

} public class TwoPoint{

public static void main(String [ ]args){

Point p1= new Point(), p2= new Point();

p1.x=10;p2.x=30;p1.y=20;p2.y=40;System.out.println(”x = “+ p1.x +” y= “+p1.y);System.out.println(”x = “+ p2.x +” y= “+p2.y);

} } 4.2

方法

方法是一个功能模块,类似C中的函数;

方法和实例变量都必须定义在类内,方法是类的功能接口 ;

定义方法的原则:方法应当只执行单一的任务,并且方法名能有效地表达该任务; 方法的返回值类型、方法名和参数表共同称之为方法的特征。调用方法的格式:引用.方法名(参数表);例如:

Point

p1=new point(),p2=new point();Point p3=p2;p1.init(10,20);//仅对p1对象的x和y进行赋值 p2.init(30,40);//仅对p2对象的x和y进行赋值

对象是客观存在的变量,对象的引用就是对象的名字,例如:point

p1;创建对象:p1=new point();

一个对象可以有多个别名;

p2=p1;将一个变量设置为null,表明该变量不代表任何对象 :

p1 = null;

每个对象都有自己的变量,改变一个对象的实例变量并不影响到另外一个对象。

4.3

实例变量和局部变量 class Loc {

// 程序4-2

int x=1;// 实例变量

void printLocVar(){

int x=25;// 局部变量

}

System.out.println(”n x is :“+x);

++x;

System.out.println(” x is :“+x);

void printInstanceVar(){

System.out.println(”n x is :“+x);

x*=10;

System.out.println(x is :”+x);} } public class TestInstanceVar { // 程序的主类

public static void main(String args[ ]){

System.out.println(“ x is :”+x);

obj.printLocVar();

obj.printInstanceVar();

System.out.println(“ x is :”+x);

loc obj=new Loc();

int x=5;

// 局部变量 x }

} 4.3

实例变量和局部变量

Java中的变量分为两种:类内定义的实例变量,方法中定义的局部变量。

在同一个作用域内,不允许定义两个同名的局部变量。

局部变量可以掩盖实例变量。

实例变量属于对象,它描述了对象的属性,随着对象的存在而存在;

局部变量是随着方法的调用而存在,一旦方法调用结束,局部变量也就消亡了。4.4

构造方法

构造方法的功能是在创建对象时初始化对象的实例变量; 讨论:构造方法的特点: 无返回值,无void 方法名与类名相同 仅在创建对象时调用 class point { // 程序4-3

}

public class createPoint {

public static void main(String args[ ]){

point

p= new point(10,20);

System.out.println(p.x +“ ”+p.y);} int x, y;point(int a, int b){

} x=a;y=b;

} 如果类中没有定义构造方法,编译器会自动创建一个缺省的、不带参数的构造方法。构造方法是在对象创建之后,new操作完成前被调用的。

4.5

方法重载

方法重载是在一个类中定义二个或多个同名的方法,但方法的参数个数或类型不完全相同;例如: class

point { int x, y;point(int a, int b){ x=a;y=b;} point(){ x=-1;y=-1;}

point(double a, int b){ x=(double)a;y=b;} } 方法重载的一个误区:是靠返回值区别重载,即定义多个方法,它们的名称和形参类型完全相同,但返回值不同,这是不允许的;

4.6

关键字this

this指代对象,是对当前对象的一个引用。例如: class IntVector { // 程序4-6 int v[ ];

boolean equals(IntVector other){

if(this == other)return true;

return false;} } class testIntVector {

public static void main(String args[ ]){

IntVector

t1=new IntVector(),t3=new IntVector(),t2=t1;

System.out.println(t1.equals(t2));

System.out.println(t3.equals(t2));

} }

Java中的级连调用,仍是指代当前对象的this。例如:// 程序4-7 import java.awt.*;import java.applet.*;

class time{

private int hour, min, sec;

time(){ setHour(0);setMin(0);

setSec(0);}

time setHour(int h){

hour=((h>=0 && h<24)? h: 0);return this;} time setMin(int m){

min=((m>=0 && m<60)? m: 0);

return this;}

time setSec(int s){

sec=((s>=0 && s<60)? s: 0);

return this;}

String tostring(){ return hour+“:”+min+“:”+sec;} public class timeToString extends Applet{

private time t;

public void init(){

}

t=new time();}

public void paint(Graphics g){ t.setHour(18).setMin(30).setSec(20);

} g.drawString(“ time:”+t.tostring(),25,45);} 在构造方法内部使用this,它用于指代另外一个构造方法,但不能指代非构造方法。例如: class point {

}

4.7

继承

继承是软件重用的一种形式,可以提高系统的性能;

继承语法:

class className

extends

superClassName{

各实例变量和方法的定义

}

例如: class point{

int x, y;

point(int x, int y){

this.x=x;this.y=y;}

point(){ this.x=0;

this.y=0;} }

class circle extends point{

int

radius;

circle(int r, int x, int y){

radius=r;

this.x=x;

this.y=y;

} } Java不支持多继承,但支持多接口;

子类的对象也是其超类的对象,反之未必;

继承具有传递性:

B继承于A,C又继承于B,则C也继承了A中的实例变量和方法。

关键字super

构造方法是一种特殊的方法,子类不能继承超类的构造方法,但子类构造方法可以通过super调用超类的构造方法。int x, y;point(){ this(-1,-1);} point(int a, int b){ x=a;y=b;}

当创建子类对象时,首先执行超类构造方法,然后执行子类的构造方法。例如: class point{

// 程序4-8

int x, y;

point(int x, int y){

} } class circle extends point{

int radius;

circle(int r, int x, int y){

super(x, y);

radius=r;

System.out.println(“子类构造函数被调用!”);

this.x=x;this.y=y;

System.out.println(“父类构造函数被调用!”);

} } public class testInherence {

public static void main(String args[ ]){ circle

c1;

c1=new circle(1,1,1);

} }

再次讨论构造方法

若父类没有定义构造方法,那么对父类数据的初始化将采用系统缺省的构造方法;例如: class point{

int

x, y;

}

class circle extends point{

int radius;

circle(int r, int x, int y){

this.x=x;

this.y=y;

radius=r;

} } 若父类定义有缺省构造方法,那么子类可根据自己的需要设置自己的构造方法。例如: class point{

int x, y;

point(){

this(0,0);

}

point(int x, int y){

this.x=x;this.y=y;

} } class circle extends point{ // 注意子类的构造函数

int radius;

circle(int r, int x, int y){

radius=r;} } 若父类定义的构造方法都是有参的,那么子类构造方法必须通过super调用父类构造方法,class point{

private int x, y;

point(int x, int y){

this.x=x;

this.y=y;

} } class circle extends point{

int radius;

circle(int r, int x, int y){

super(x, y);

radius=r;

} } 4.8

方法的覆盖

方法的覆盖发生在父类和子类之间,若子类中定义的某个方法的特征,与父类中定义的某个方法的特征完全一样,那么就说子类中的这个方法覆盖了父类对应的那个方法。

4.8.1

覆盖与重载的区别 重载可以出现在一个类中,也可以出现在父类与子类的继承关系中,并且重载方法的特征一定不完全相同。

覆盖特点:子类中的方法特征与父类定义的对应方法的特征完全一样。例如: // 程序4-9 class point{

int x, y;

point(){ this(0,0);}

point(int x, int y){

this.x=x;this.y=y;

}

double area(){ return 0;} }

class circle extends point{

int radius;

circle(int r, int x, int y){super(x, y);

radius=r;

}

double area(){ return Math.PI*radius*radius;} } public class testOverWrite {

public static void main(String args[ ]){

} circle c1;

c1=new circle(1,1,1);

System.out.println(c1.area());} 4.8.2

方法的动态调用

Java的所有对象运行时都有一个类型标识(RTTI:Run-Time Type Identification),该标识记录了每个对象所属于的类。Java用此标识在运行时选择正确的方法。例如: // 程序4-11 class point{

int x, y;

point(){ this(0,0);}

point(int x, int y){ this.x=x;this.y=y;

}

double area(){ return 0;} }

class circle extends point{

int radius;

circle(int r, int x, int y){ super(x, y);

radius=r;}

double area(){

// 覆盖了父类的area方法

return

Math.PI*radius*radius;

} } public class dynamicalCall {

public static void main(String args[ ]){

point p[ ]={new point(2,2), new circle(1,1,1)};

for(int i=0;i

System.out.print(“类名: ”+

} p[i].getClass().getName());System.out.print(“父类:”+ p[i].getClass().getSuperclass());System.out.println(“

面积: ”+ } p[i].area());} 子类对象调用方法时:

(1)子类检查是否具有同名和同参数类型的方法,若有则调用该方法,否则继续执行。

(2)到父类中寻找同名和同参数类型的方法,若有则调用该方法。若找不到,将产生编译错误。

对象决定自己到底该调用哪个方法,取决于该对象在继承链中的位置。

4.9

多态性不适合继承链中的实例变量 引用.方法:根据多态性调用;

引用.实例变量:根据引用的类型调用。即:多态性仅仅适用于方法的调用,而不适合实例变量。例如: class Base{

// 程序4-12

int x=1;void print(){ System.out.println(“当前类为 ”+

}

this.getClass().getName());System.out.println(“对象的x= ”+this.x);

} class Derived extends Base{

} int x=2;void print(){ System.out.println(“当前类为 ”+

}

this.getClass().getName());System.out.println(“对象的x= ”+this.x);

public class confusions{ public static void main(String [ ] args){

Base obj=new Derived();

}

}

obj.print();System.out.println(“对象的x= ”+obj.x);

4.10

finalize

Java的垃圾回收器具有自动回收垃圾的能力。

垃圾回收器是一个优先级比较低的线程,在系统空闲时运行。

在对象被回收之前,有时需要执行一些特殊的操作,例如保存文件、清除屏幕等,这时就要用Java的finalize方法。例如: class point{

// 程序4-13

int x, y;

point(int a, int b){

} x=a;y=b;System.out.println(“point constructor:”+getString());

public void finalize(){

// 注意该方法

System.out.println(“point finalizer:”+getString());

}

String getString(){ return “x=”+x+“ y=”+y;

} } class circle extends point{

int radius;

circle(int r, int a, int b){ super(a,b);radius=r;System.out.println(“circle constructor:”+getString());

}

public void finalize(){

System.out.println(“circle finalizer:”+getString());

}

String getString(){

return super.getString()+“

radius=”+radius;

} } public class testFinalize {

public static void main(String args[ ]){

point c1,c2;c1=new circle(1,1,1);c2=new circle(2,2,2);c1=null;c2=null;System.gc();

} }

4.11

static

static修饰变量(与C中的不同);

static修饰方法(与C中的不同);

4.11.1

static变量

static变量是指这样的成员变量:不管在程序运行中生成多少个该类的对象,它们都共享该变量。

即使没有创建对象,该变量仍然存在。因此,static变量又称为类变量。定义格式为:static type variableName;

static变量和一般的实例变量不同,在构造方法中不能对它进行初始化。例如: class point{

// 程序4-14

static int count;int x, y;static{ // 静态初始化块

}

} count=0;System.out.println(“static variable is initialized!”);

point(int a, int b){ count++;x=a;

y=b;

System.out.println(“Call point constructor!”);} public class testStaticVariable {

public static void main(String args[ ]){ point c1=new point(0,0);

System.out.println(“There are ”+

}

4.11.2

static方法

(可举例说明Math类的PI和sqrt等,为什么要用静态变量。)static方法是类中的成员方法,它属于整个类,即使不创建任何对象,也可使用静态方法。调用静态方法格式:类名.方法名(参数); 在子类中不能覆盖父类中定义的静态方法。

静态方法中只能出现静态变量和其它静态方法。并且还不能使用this和super。例如: class point{

// 程序4-15

static int count;

int x, y;

static{ count=0;System.out.println(“static variable is initialized!”);

// 定义静态变量 } point.count +“ points”);

}

point(int a, int b){

count++;x=a;y=b;

System.out.println(“Call point constructor!”);

}

static int getCount(){ // 静态方法 return count;

} } public class testStaticMethod {

public static void main(String args[ ]){

} point c1=new point(0,0);point c2=new point(1,1);

System.out.println(“There are ”+ point.getCount()+“ points”);} 4.12

关键字final

在实例变量、局部变量和方法的形参定义之前加上final,那么这个变量值只能被引用,而不能修改。

final修饰的局部变量和实例变量必须给出初值,因为它修饰的变量代表一个常量。例如: class Base{ // 程序4-16 final int x=1;

// 形式1:修饰实例变量

}

public class finalVariables{

public static void main(String [ ] args){ final int var=100;// 形式3:修饰局部变量

} Base obj=new Base();

obj.print(var);void print(final int y){ // 形式2:修饰参数

// y=0;

// 错误

} System.out.println(x+y);

} 在方法定义前加上final,该方法就不能被子类覆盖,成为终极方法 ;

包含终极方法的类仍然可以被子类继承,子类虽然不能覆盖父类中的终极方法,但可以重载该方法。例如: class Base{

final int x=1;

}

class Derived extends Base { void print(){ // 重载了父类中的print方法

} System.out.println(x);final void print(int y){

}

// 父类中的final方法

System.out.println(x+y);}

4.12.3 final类

在一个类定义前加上final,意味着这个类就不能被其它类继承,成为终极类。

系统类基本上都是final类,如String类。

将class定义为final是为了杜绝继承,类中的方法自然都变成了终极方法。例如: final class Base{ // 声明为final类

final int x=1;

void print(final int y){

System.out.println(x+y);

} }

// 错误:不能继承final 修饰的Base类 class Derived extends Base { }

4.13

组合与继承

面向对象中的软件重用表现为两种形式:继承和对象组合。

设计这类程序的关键是构造方法:子类构造方法调用父类构造、成员对象的初始化。class date{ // 程序4-17

int year, mon,day;

date(int y, int m, int d){ year=y;

mon=(m>0 && m<13)?m:1;day=checkday(d);

}

int checkday(int d){

int daydisp[ ]={0,31,28,31,30,31,30,31,31,30,31,30,31};

if(d>0 && d<=daydisp[mon])

return d;

if(mon==2 && d==29 &&(year%400==0 ||

year%4==0&& year%100!=0))

return d;return 1;

}

String tostring(){ return year+“/”+mon+“/”+day;} }

class employee{ // 雇员类

long id;date birthday;

例如:

employee(long no, int year, int mon, int day){ id=no;

// 设置组合对象

}

String tostring(){

return id+“ , ”+birthday.tostring();} birthday=new date(year,mon,day);}

class manager extends employee { // 经理类

double basePay;

String tostring(){

return basePay+“ , ”+super.tostring();} } public

class compositionAndInherence {

} public static void main(String [ ] args){ manager

boss;

}

boss=new manager(1001,1971,11,5);System.out.println(boss.tostring());

manager(long no, int y, int m, int d){ super(no,y,m,d);

// 调用父类构造函数

} basePay=1000;

4.14

抽象类和抽象方法

抽象方法:仅有方法特征,但没有代码; 抽象类:包含抽象方法的类。

抽象类的作用:提供一种适当的超类,子类通过继承实现父类中的抽象方法。

抽象类不能用final修饰。

抽象类体现了多态性,通过继承可以从抽象类派生出具有相似操作的子类。例如: abstract instrument abstract void play()继承 wind void play()继承 继承 stringed void play()percussion void play()继承 继承 woodwind void play()brass void play()

// 程序4-18 abstract class instrument{

abstract void play();}

// wind不是抽象类

class wind extends instrument{

void play(){ System.out.println(“wind play!”);} }

// percussion也不是抽象类

class percussion extends instrument{

void play(){ System.out.println(“percussion play!”);} }

// stringed也不是抽象类 class stringed extends instrument{

void play(){ System.out.println(“stringed play!”);} }

class woodWind extends wind{ // 覆盖父类中的play方法

void play(){System.out.println(“woodWind play!”);} }

class brass extends wind{

// 覆盖了父类中的play方法

void play(){ System.out.println(“brass play!”);} } public

class music { static void tuneAll(instrument e[ ]){

} for(int i=0;i

e[i].play();

// 抽象方法

public static void main(String [ ] args){ instrument orchestra[ ] = new instrument[5];int i=0;

orchestra[i++]=new wind();orchestra[i++]=new percussion();orchestra[i++]=new stringed();orchestra[i++]=new woodWind();orchestra[i++]=new brass();tuneAll(orchestra);

} } 程序运行结果: wind play!percussion play!stringed play!woodWind play!brass play!

4.15

对象的类型转换 4.15.1

向上类型转换

从子类向父类转换,在继承图中是向上移动,通常称为向上类型转换。

类型向上转换是安全的,因为这是从特殊类型到通用类型的转换。

进行向上类型转换时,出现的唯一问题是可能丢失子类中定义的方法和变量。例如: // 程序4-19 class point{

int x, y;

point(int x, int y){

this.x=x;this.y=y;} int getX(){

return x;} }

class circle extends point{

int radius;circle(int r, int x, int y){ super(x, y);radius=r;} double area(){

return Math.PI*radius*radius;

} } public

class testUpCasting {

} public static void main(String [ ] args){

circle c=new circle(1,1,1);point p=c;// 注意:p和c的类型不同 } System.out.println(p.getX());4.15.2

向下类型转换

从父类向子类转换,在继承图中是向下移动,称为向下类型转换。

类型向下转换是不安全的,因为这是从一般类型到特殊类型的转换。例如: public static void main(String [ ] args){

}

4.16

访问权限限制

Java提供的访问权限修饰符有四个,即public、private、protected和友元;

修饰符要置于每个类成员(实例变量和成员方法)的定义之前,且仅能控制它所修饰的那个成员。

4.16.1

友员

缺省修饰符的情况就是友员。友员修饰符意味着同一个目录(包)中的所有类都可以访问这种类型的成员。

friendly不属于Java关键字,是C++的一个关键字。

例如: public class Base{

// 该类位于Base.java文件中

int friend_data=1;// 友员数据成员 }

// 该类位于Derived.java文件中 public class Derived extends Base{ Base p=new Base();

// 访问Base类中的friend_data

}

4.16.2

public 成员

不管两个类是否位于同一个目录中,一个类总可以访问另一个类的public成员。

public还可以用于修饰主类,文件名必须与主类名一致。除此之外,其它3个修饰符都不能用于修饰类,只能修饰成员。例如: public class Base{

public int friend_data=1;// public成员 } void dataUse(){

System.out.println(“data=”+p.friend_data);

} point p=new point(1,1);circle c;c=p;

//注意:此处编译时出错

c=(circle)p;//注意:此处运行时出错 System.out.println(c.area());

public class Derived extends Base{ public Base p=new Base();

public void dataUse(){

}

4.16.3

private成员

private成员的特性:除了其所在类能够访问该成员以外,其它类都不能访问它。

在多人合作开发一个系统的过程中,private可以让你自由使用自己定义的成员,无须担心与其他人写的类相冲突。例如: // 程序4-20 class Base{

private Base(){ }

public class testPrivate {

public static void main(String args[ ]){

// Base p=new Base();

// 编译有错

}

}

Base p = Base.makeBase();} // 注意

}

System.out.println(“data=”+p.friend_data);} static Base makeBase(){ return new Base();

4.16.4

protected成员

protected与继承有关,这种类型的成员可以被子类访问。

同一个包内的非子类,也可以访问这种类型的成员。即:protected天生就具有友元权限,例如:

// 程序4-21 class Base{

// 该类位于Base.java文件中

int friend_data=1;

// 友元成员

public int public_data=2;

// public成员

private int private_data=3;// private成员

protected int protected_data=4;// protected成员 }

class Derived extends Base{ // Derived.java文件

Base a=new Base();void dataUse(){

} System.out.println(a.friend_data);System.out.println(a.public_data);// System.out.println(a.private_data);System.out.println(a.protected_data);} // 将主类存放在testData.java文件中 public class testData {

public static void main(String args[ ]){

} Derived d=new Derived();d.dataUse();

} 访问权限总结

课堂练习:

1、定义一个Student类:

该类的功能有:可以保存、修改和获取学生的姓名、学号等。可以设置学生的英语成绩、数学成绩、Java成绩,并能计算平均分、最高分和最低分。

2、以下代码定义了一个类,请指出其中三条不合法的代码行(行号参见注释)。

class Test22{

//1

//7

} static float fac1(boolean f){ return f?u:v;}

//8 float fac2(boolean f){ return f?u:v;}

//9 float u;

//2 static float v;

//3 static void setUV(boolean f){

//4 u=fac1(f);

//5 v=fac2(!f);

//6 }

课外练习(作业):

P87 1、3、4、6

第5章

接口和包

教学目的要求

 掌握接口的定义和使用

 了解接口与抽象类的异同点  掌握包的定义和使用 主要内容

 接口的定义和使用  包的定义和使用 重点内容

 接口的定义和使用  包的定义和使用

难点内容

无 1课时 课时分配 教学方法

讲授法、演示法 讲授内容提要

5.1

接口

引入接口的原因:在程序设计中经常遇到这样一个问题:有些类互不相关,但却具有相似的方法。并且这些方法在各个类中的实现互不相同。我们不能为这些类定义一个共同的父类,但又希望在程序中体现出它们共同的接口。

5.1.1

接口的定义和应用

接口是一系列常量和空方法的集合,它提供了多个类共同的方法,但不限制每个类如何实现这些方法。

Java允许一个类同时实现多个接口,相当于实现多继承的功能。声明一个接口的语法格式:

[public] interface interfaceName [extends super-interface-List]{

type ConstantName=value;

type MethodName(Parameter lists);} 例如:

interface

Sortable{ // 定义一个接口

int Compare(Sortable

s);} 接口中不能声明任何变量和构造方法。

如果一个类实现多个接口,应该在接口名之间用逗号隔开。

当一个类实现接口时,必须实现接口中给出的空方法,若实现接口的类是一个抽象类,可以把实现接口的任务交给子类去实现。例如: // 程序5-1 interface

Sortable{

// 定义一个接口

int Compare(Sortable

s);} class Sort{

// 定义一个排序类,仅有一个静态的方法

public static void SelectSort(Sortable a[ ]){ int i, j, k;Sortable

temp;

for(i=0;i

// 选择排序

k=i;

for(j=i+1;j

if(a[k].Compare(a[j])<0)k=j;

temp=a[i];a[i]=a[k];a[k]=temp;}

} } class Student implements Sortable{

// 定义一个学生类

private int score;

Student(int x){score=x;}

// 实现接口Sortable中的方法 public int Compare(Sortable s){

Student st=(Student)s;

// 类型强制转换

return score-st.score;}

public String toString(){ return “score=”+score;} } class Rectangle implements Sortable{ // 矩形类也实现了接口

} public class interfaceTest {

public static void main(String args[ ]){ Student stud[ ]=new Student[20];int i;private int length,width;

Rectangle(int x,int y){ length=x;width=y;}

int area(){return length*width;}

public int Compare(Sortable s){

// 实现接口

}

public String toString(){ return “area=”+area();} Rectangle rec=(Rectangle)s;

// 类型强制转换 return

area()-rec.area();

for(i=0;i

stud[i]=new Student((int)(Math.random()*100));Sort.SelectSort(stud);

// 排序 for(i=0;i

System.out.println(stud[i].toString());Rectangle R[ ]=new Rectangle[10];for(i=0;i

R[i]=newRectangle((int)(Math.random()*10),(int)(Math.random()*10));Sort.SelectSort(R);

// 排序 for(i=0;i

System.out.println(R[i].toString());

} } 接口中定义的变量实际上是常量,必须给出它们的初始值,实现接口的类可以自由引用这些常量。例如: // 程序5-2的部分 interface constant {

int int int int

EXCELLENT=5;

GOOD=4;

PASS=3;

FAIL=2;} 在类中实现接口中方法时,方法的特征必须和接口中声明的方法特征保持一致;

实现方法时必须在方法前加上public;

若一个类没有对接口中的方法具体实现,那么必须将该类声明为abstract类。例如: interface inter {

// 接口

} void methodA();

abstract class Derived1 implements inter {

// 此处不需要写出methodA()的原型 }

class Derived2 extends Derived1{

public void methodA(){ // 实现方法

} } System.out.println(“Hi,methodA”);5.1.2

接口和抽象类的异同点 接口和抽象类的相同点:

(1)都有空的方法,都必须在子类中实现这些方法。

(2)都不能用new关键字来创建这两种类型的对象。

(3)都可以具有继承关系。

(4)接口和类一样可以具有public属性。接口和抽象类的不同点:

(1)在抽象类中,空的方法必须加abstract关键字,而在接口中不需要。

(2)在抽象类中,除空的方法外,可以定义实例变量和非空的方法,而在接口中,只能定义常量和空的方法。

(3)接口允许多继承,类仅支持单继承。

5.2

在Java中可以将自己写的类,按一定的方法归属于不同的子目录中(包)。

在缺省情况下,Java将所有的类归属一个缺省包中。在不同的包中可以有同名的类存在。

Java中的包与C++中的名字空间相似。

5.2.1

package语句

package语句告诉编译器当前类属于哪个包。如果没有package语句,类就存放在无名的缺省包中(即当前目录中)。

引进包的概念主要是为了名字冲突。

格式: package pkgl[.pkg2[.pkg3]];

5.2.2

import语句

import语句位于package语句之后,类的定义之前;格式:import package1[.package2].(class-name | *);

采用*号不影响程序的运行性能,但会影响编译速度。指明具体类比引入整个包更为合理。5.2.3

包应用举例

package Base;

// 将该类存放在d:myjavaBase包中 public class Base { int friend_data=1;// 友元成员

public int public_data=2;// public成员

private int private_data=3;// private成员 protected int protected_data=4;// protected成员

} package Derived;

// 将Base类存放在Derived包中

import Base.*;

// 需要使用Base包中的类

public class Derived extends Base{ Base a=new Base();

// 为了让testData类能调用该方法,修改为public

// 不能访问 public void dataUse(){

// System.out.println(a.friend_data);

System.out.println(a.public_data);

// System.out.println(a.private_data);

// 不能访问

// System.out.println(a.protected_data);// 不能访问

} }

// testData.java文件的内容如下:

import Derived.*;

//需要使用Derived包中的类

// 该类位于工作目录,不需要package语句 public class testData { public static void main(String args[ ]){

}

} Derived d=new Derived();

d.dataUse();

课堂练习:

课外练习(作业):

P108

3~6

第6章

字符串处理

教学目的要求

 掌握字符串的分类;

 掌握内容不可改变的字符串类String;  掌握字符串常量;

 掌握内容可以改变的字符串类StringBuffer;  掌握字符串应用。

主要内容

 字符串的分类;

    内容不可改变的字符串类String; 字符串常量;

内容可以改变的字符串类StringBuffer; 字符串应用。

重点内容

 掌握内容不可改变的字符串类String;

 掌握内容可以改变的字符串类StringBuffer;  掌握字符串应用。

难点内容

String和StringBuffer的区别和联系 课时分配

2课时 教学方法

讲授法、演示法、对比法、实验验证法 讲授内容提要

6.1

字符串的分类

java.lang包中定义了 String和StringBuffer两个类;

在运行中值不会改变的字符串,用String类存储;值会改变的字符串用StringBuffer类来存储。

两个类都有final修饰,这样可以优化字符串的操作。

6.2

String类

String类的定义原型 :

public final class java.lang.String

extends java.lang.Object

{

} 6.2.1

字符串常量

字符串常量属于String类型;相同的字符串常量属于同一个对象,占用同一块空间,例如: // 程序6-1 public class TestConstString{

public static void main(String args[ ]){

}

} String str1=“Hello”, str2=“Hello”;

System.out.println(str1==str2);System.out.println(“Java”==“Java”);6.2.2

创建String类对象

用new运算符,并调用构造函数创建这种类型的对象,常见构造函数如下:

1.public String()采用该构造函数创建一个不含字符的空对象。例如:

String str =new String();

2.public String(char value[ ])

将字符数组的内容转换为字符串,并赋予新建的对象。例如:

char a[ ]={'J','a','v','a'};String str=new String(a);3.public String(char value[ ], int offset, int count)

例如:char a[ ]={'J','a','v','a'};

String str=new String(a,1,2);

// 字符串str的内容是“av”

4.public String(String value)

采用value对象的值构造一个新的string对象。

例如: String str1=“Java”;String str2=new String(“Java”);

System.out.println(str2);

System.out.println(str1==str2);

5.public String(StringBuffer Buffer)注意采用字符串常量初始化一个String引用的问题。例如: String str = “abc”;相当于:

char data[ ] = {'a', 'b', 'c'};String str = new String(data);应用举例,注意程序6-2的输出结果: public class TestString{

// 程序6-2

public static void main(String args[ ]){

String s1=“Java”, s2=“Java”;String s3=new String(s1);

System.out.println(“ s1==s2 is ”+(s1==s2));System.out.println(“ s1==s3 is ”+(s1==s3));s1=“ABC”;s2=“DEFG”;System.out.println(“ s1==s2 is ”+(s1==s2));s1=s2;

System.out.println(“ s1==s2 is ”+(s1==s2));} } 6.2.3

String类常用方法 1.public int

length():

求串长。例如:

String str=“Java” ;

System.out.println(str.length());2.public char charAt(int

index)

提取指定位置上的字符。

3.public int compareTo(String

anotherString)

对字符串内容按字典序进行大小比较。例如: public class SortStringArrary{

// 程序6-3

public static void main(String args[ ]){

String str,s[ ]={“Computer”,“CHINA”,“world”,“U.S.A”};

int i,j,k;

System.out.print(“排序之前:”);for(i=0;i

System.out.print(“t”+s[i]);for(i=0;i

for(k=i,j=i+1;j

if(s[k].compareTo(s[j])>0)

k=j;

str=s[i];

s[i]=s[k];

s[k]=str;// 注意该行的含义 } System.out.print(“n排序之后:”);for(i=0;i

System.out.print(“t”+s[i]);

} } 4.char[ ]

toCharArray()

将String对象转换到一个字符数组中,例如:

String s=“Hello,Java!”;

char a[ ];

a=s.toCharArray();

for(int i=6;i

System.out.print(a[i]);5.public boolean equals(String anString)

比较两个字符串对象的内容是否相等。

6.public boolean equalsIgnoreCase(String anotherString)

以忽略大小写方式,比较两个字符串对象的内容是否相等。

注意:equals()方法与“==” 之间的区别。例如: public class ConfuseQuestion{

// 程序6-5

public static void main(String args[ ]){

String

s1=“java”;

String

s2=new String(s1);

String

s3=s2;

} } System.out.println(s1.equals(s2));System.out.println(s2.equals(s3));System.out.println(s2==s3);System.out.println(s2.equals(s3));7.public int indexOf(int ch / String str)

在字符串中搜索字符或子串,返回字符或子串在String对象中从左边起首次出现的位置。如果没有出现,返回-1。

8.public String substring(int begin, int end)

提取string对象中从begin开始,到end-1结束的子串,返回提取的子串。

9.public String concat(String str)将str对象接到调用对象的后面,返回新串。例如:

String

s1=“Hello ” , s2=“Java” , s3;s3=s1.concat(s2);

System.out.println(s3);注意:如果参数str为空(null),则concat方法不创建新串,而仅仅返回当前串,10.public String replace(char oldChar, char newChar)

将String对象中所有的oldChar字符替换为newChar,返回替换后的新串。例如:

String path=“d:/myjava/documents”;

System.out.println(path.replace('/' , ''));

public String toString()

返回当前字符串对象本身。

12.public static String valueOf(各种类型

f)

将各种数据类型转换成一个相应的字符串表示,该方法是一个static方法。

程序6-6演示了valueOf()方法的应用。

程序6-7自学。

public class TestValueOf{

// 程序6-6

public static void main(String args[ ]){

char a[ ]={'A','B','C','D','E','F'};

int i=123456;float f=3.14159f;boolean b=true;Object

o=null;System.out.println(String.valueOf(a));System.out.println(String.valueOf(a,2,3));System.out.println(String.valueOf(i));System.out.println(String.valueOf(f));System.out.println(String.valueOf(b));

System.out.println(String.valueOf(o));} } 6.2.4 Java应用程序的命令行参数

应用程序可以通过main方法的String数组,访问由解释器传递的命令行参数。例如: public class ShowMainArguments{ //程序6-8

public static void main(String args[ ]){

for(int i = 0;i < args.length;i++)

System.out.println(args[ i ]);

} } 6.3

StringBuffer类

StringBuffer类对象是一个内容可以改变的字符串。可以减少由于少量字符的插人而引起的空间分配问题。

StringBuffer类的原型:

public final class java.lang.StringBuffer

extends java.lang.Object { …

} StringBuffer类对象有一块缓冲区,字符串被存放在缓冲区中,缓冲区的大小可以随程序的需要进行调整。缓冲区的大小称为对象的容量。

当修改对象的内容时,只要StringBuffer对象包含的字符个数没有超出容量,就不会分配新的空间,而直接在原空间内进行修改。若字符的个数超出了容量,该对象会自动调整其容量,从而适应新的存储。

6.3.1

创建StringBuffer类对象

StringBuffer类的构造函数有三种方式:

1.public StringBuffer()创建一个内容为空的StringBuffer对象,容量为16。

例如:StringBuffer s=new StringBuffer();2.public StringBuffer(int length)初始内容为空,容量为length指定的大小。注意:length应大于等于0,不能为负数,否则会产生异常。例如:

StringBuffer s2=new StringBuffer(2);3.public StringBuffer(String str)

初始内容和参数str的内容相同,容量为参数str的长度加上16。例如: String s1=“Java”;

StringBuffer s2=new StringBuffer(s1);则s2的容量是20,内容是“Java”。

6.3.2

StringBuffer类常用方法

1.public int length()

返回字符串的长度

2.public int capacity()

返回缓冲区大小

3.public void setLength(int newLength)

指定对象的长度,将对象的内容进行裁减。如果参数小于对象的长度,则将对象截断;如果参数大于等于对象的长度,则填充空字符('u0')扩充新增加的部分。

4.public void ensureCapacity(int NewCapacity)

设定对象的缓冲区的大小,若参数 小于对象的容量,则新的设置将不起作用,也就是说容量只能扩大而不能缩小。

程序6-9演示了这几个方法的具体应用。

public class TestCapacity{

// 程序6-9

public static void main(String args[ ]){ String

s=“Java”;

StringBuffer

str=new StringBuffer(s);System.out.println(“Length=”+str.length());System.out.println(“Capacity=”+str.capacity());str.setLength(8);

// 设置长度为8 str.ensureCapacity(80);// 设置容量为80 System.out.println(“nstr= ”+str);System.out.println(“Length = ”+str.length());System.out.println(“capacity = ”+str.capacity());

str.setLength(3);

str.ensureCapacity(20);System.out.println(“nstr= ”+str);System.out.println(“Length = ”+str.length());System.out.println(“capacity = ”+str.capacity());

} } 5.public void setCharAt(int index, char ch)

将参数index指定位置上的字符,设置成参数ch

指定的字符。例如:

StringBuffer str=new StringBuffer(“Hello,Java”);

str.setCharAt(3,'L');

则str的内容变成了“HelLo,Java” 6.public StringBuffer append(多种数据类型)

将其它类型的数据添加到StringBuffer对象的尾部,返回修改后的StringBuffer对象。

例如:StringBuffer s1,s2=new StringBuffer();

s1=s2;// s1和s2代表同一个对象

s2.append(3.14).append(' ').append(“Java”);

System.out.println(s1==s2);

// 输出true

System.out.println(s1);

// 输出3.14 Java

7.public String toString()

该方法把StringBuffer对象的内容复制到一个新的String类对象中,返回这个新的String类对象。例如程序6-10。

public class BufferToString{

// 程序6-10

public static void main(String args[ ]){ String s1;StringBuffer s2=new StringBuffer(“Hello ”);s1=s2.append(“Java!”).toString();System.out.println(“s1=”+s1+“"+”s2=“+s2);

} }

8.public StringBuffer insert(int offset, 多种类型

b)该方法是将一个其它类型的对象b插入到offset指定的位置。例如: StringBuffer str=new StringBuffer(” Java!“);

// 将字符串”Hello“插入到下标为0的位置

str.insert(0,”Hello“);

System.out.println(”str= “+str);输出结果为: str= Hello Java!

6.4

应用举例

课堂练习:

无 课外练习(作业):

P119 2、3、4

第7章

异常处理

教学目的要求

 了解异常的层次结构;

 掌握异常处理语句;  了解自定义异常;

 了解异常处理中常用的调试方法。主要内容

    异常的层次结构;

异常处理语句; 自定义异常;

异常处理中常用的调试方法。

重点内容

 异常处理语句;

难点内容

课时分配

1课时 教学方法

讲授法、演示法、对比法、实验验证法 讲授内容提要

7.1

异常的层次结构

Throwable是异常类的根节点,定义在java.lang包,它的子类也定义在该包中; Error代表系统错误类,由系统直接处理;

Exception类及其子类是在程序中可捕捉到的异常。见图7.1

Throwable Error achineError … AW TError LinkageError VirtualM RuntimeException ArithmeticException ArrayIndexO utO fBoundsException … Interrupted Exception AWTException IOException Exception FileNotFoundException… EOFException

1.java.lang.ArithmeticException

0作除数(包括模),将产生这类异常。例如:int x=0 , y;

y=100/x;

2.java.lang.ArrayIndexOutOfBoundsException

例如:int a[ ]=new int[10];

a[10]=0;

3.java.lang.ArrayStoreException 例如:int a[ ]=new int[10];

boolean b[ ]=new boolean[10];

System.arraycopy(a,0,b,3,6);//有异常

4.java.lang.ClassCastException 例如: Object obj=new Object();

int a[ ]=(int[ ])(obj);

5.java.lang.IndexOutOfBoundsException

例如:char ch=”ABC“.charAt(99);

注意: 2 是5的子类。

6.java.lang.NegativeArraySizeException

例如: int a[ ]=new int[-10];

7.java.lang.NullPointerException 例如:int a[ ]=null;

System.out.print(a.length);7.2

异常处理语句

缺省的异常处理的情况,例如:

public class DefaultException{

// 程序7-1

public static void main(String args[ ]){ int a,b=0;

a=2/b;

// 此处有异常

System.out.println(“a=”+a);// 不运行此行

} }

异常处理语句有try、catch、finally、throw和throws。异常处理的形式为:

try{

程序执行体

}catch(异常类型1

异常对象1){ 异常处理程序体1 }catch(异常类型2

异常对象2){

异常处理程序体2 }finally {

异常处理结束前的执行程序体 }

7.2.1

try和catch语句

try语句指明可能产生异常的代码段;catch语句在try语句之后,用于捕捉异常,一个try语句可以有多个catch语句与之匹配。异常处理以后,程序从try语句代码段后继续执行。例如:程序7-2。public class TryCatchTest{

// 程序7-2

public static void main(String args[ ]){ int a=99,b=0,c;

try{ System.out.println(”产生异常之前“);c=a/b;

// 该行有异常 System.out.println(”产生异常之后“);}catch(ArrayIndexOutOfBoundsException e){

System.out.println(”处理下标越界异常“);}catch(ArithmeticException e){

System.out.println(”处理算术异常“);}

System.out.println(”异常处理结束“);

} }

注意:用catch语句捕捉异常时,若找不到相匹配的catch语句,将执行缺省的异常处理。例如:

int a=99,b=0,c;

try{ c=a/b;//产生的异常和捕捉的异常类型不一致

}catch(ArrayIndexOutOfBoundsException e){

System.out.println(”处理异常“);

}

注意:当有多个catch语句时,系统依照先后顺序逐个检查。例如: try{ c=a/b;

}catch(ArithmeticException e){ System.out.println(”Divided by zero“);}catch(RuntimeException e){

System.out.println(”Divided by zero“);}

7.2.2

finally语句

无论是否产生异常,finally语句指明的代码一定被执行。例如: public class testFinally{

// 程序7-3

public static void main(String args[ ]){

int a,b=0;

for(int i=0;i<=3;i++){ System.out.println(”Test No: “+(i+1));try{

switch(i){

} case 0:

a=3/b;

break;case 1:

int c[ ]=new int[10];

c[10]=0;

break;case 2:

char ch=”ABC“.charAt(99);

break;case 3:

return;}catch(ArithmeticException e){ System.out.println(“零作除数!”);

}catch(ArrayIndexOutOfBoundsException e){ System.out.println(”数组下标越界!“);}catch(IndexOutOfBoundsException e){ System.out.println(”下标越界!“);}finally{ System.out.println(”在finally块中!“);

} }

7.2.3

throw语句

throw语句用于指出当前行有异常,当程序执行到throw语句时,流程就转到相匹配的异常处理语句,所在的方法也不再返回值。

throw语句可以将异常对象提交给调用者,以进行再次处理。例如:程序7-4。public class ThrowException{

// 程序7-4

public static void Test(){

try{ int c[ ]=new int[10];c[10]=0;}catch(ArrayIndexOutOfBoundsException e){ System.out.println(”t 数组下标越界!“);

}

}

throw e;

// 异常抛出点

//System.out.println(“t产生异常后!”);

该行无法通过编译 }

}

public static void main(String args[ ]){

try{ Test();}catch(IndexOutOfBoundsException e){ System.out.println(”t 下标越界!“);}finally{

System.out.println(”t 在finally块中!“);}

} }

7.2.4

throws语句

throws语句指明方法中可能要产生的异常类型,由调用者进行异常处理。例如: import java.io.*;

// 程序7-6 public class testThrows {

public static String readString()throws IOException{

int ch;String r=”“;boolean done=false;

while(!done){ ch=System.in.read();

} if(ch<0 || ch==0xd)

done=true;else r = r +(char)ch;

return r;

}

public static void main(String args[ ]){ String str;

try{

str=readString();}catch(IOException e){

System.out.println(”产生了输出/输出异常“);

return;}

System.out.println(”整数是:"+Integer.parseInt(str));

} } 建议:在多人合作写程序时,一个方法中产生的异常,最好在该方法中进行处理,不要将异常传播给其他人处理。

7.3

自定义异常类

通过继承Exception类或它的子类,实现自定义异常类;

对于自定义异常,必须采用throw语句抛出异常,这种类型的异常不会自行产生。总体上分为两步:

第1步:定义异常类。例如: class userException extends Exception{

int n=0;

// 计数器

第四篇:Java程序设计教案

Java程序设计

第一讲 绪论

一、安装netbean系统

二、hello world 典型程序结构中各部分的说明:

/* * To change this template, choose Tools | Templates * and open the template in the editor.*/ package test1;

//@author Jie

public class Test1 {

public static void main(String[] args){

System.out.println(“Hello World!”);

} }

1、注释语句

2、类定义的包:package

3、public class Test1,定义类,类名称是Test1,属性为public

4、public static void main(String[] args),main函数

5、main函数的函数体{

System.out.println(“Hello World!”);

}

三、Java程序设计语言的基本内容: 数据类型 运算符&表达式 3 程序控制语句 4 数组 5 类 6 对象 7 继承 8 接口 9 包 APPLET 11 异常处理 12 线程 13 字符串 14 GUI 15 输入输出系统

我们的课堂教学内容:时间17周,包括17次课堂教学,17次实验室上机。

四、几个案例:

1、计算根号2;

2、显示1-100

3、从1加到100

4、打印一个“*”组成的10*10的矩形

5、求N!,递归算法

6、GUI的例子,在GUI界面下输入和显示(this.jLabel1.setText(this.jTextField1.getText());)

7、演示几个复杂一点例子

五、Java语言中保留的关键字:

Java语言一共使用了48个保留关键字,他们主要可以 分为如下几类。

1.访问控制

private , protected , public.2.类、方法和变量修饰符

abstract , class , extends , final , implements , interface, native(用于与其他语言的接口), new , static strictfp:java 语言采用固定的位数来存储浮点型数据,但是有些处理器使用更高位的浮点寄存器,这些寄存器增加了中间过程的计算精度。例如double类型数据jvm采用64为存储,二有些处理器使用80位的浮点寄存器来保存中间数据。例如:double w = x*y/z;很多处理器计算x*y后将中间结果存储在80位的寄存器中,再除以z并将结果截断为64位;但是这个结果可能会与始终在64位机器上计算的结果不一致,如果将所有的中间结果都截断,可能会导致溢出,而截断操作同样需要时间,计算速度比较慢。

因此JVM默认允许中间结果精度扩展。但是在使用关键字strictfp标记的方法,必须使用严格的浮点计算。使用strictfp标记的类中所有的方法都必须严格按照浮点计算。

synchronized:多线程同步访问控制

transient:transient 关键字表示在Serializable 的时候不保存该值

volatile:Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

3.程序控制语句

break, continue, return, do, while, if, else, for, instanceof, switch, case,default, 4.错误处理

catch 捕获, finally 最后, throw 投试, throws 投试, try 尝试

5.包相关

import 输入, package 包.6.基本类型

boolean 布尔型, byte 字节型, char 字符型, double 双精度, float 浮点, int 整型, long 长整型, short 短整型 7.变量引用

super 特殊, this 这个, void 无值

除了这48个关键字以外,还有3个语法保留字:

null 空, true 真, false 假.六、如何学习一门程序设计语言

1、理解什么是程序设计语言

2、练习、练习、再练习

第二讲 数据类型、运算符与表达式

一、Java语言中的数据类型

数据类型

大小

范围

默认值 byte(字节)

-12832768

0 int(整型)

-2147483648-2147483648

0 long(长整型)

-***7808-***7808 0

float(浮点型)

32-3.40292347E+38-3.40292347E+38

0.0f double(双精度)

-1.797693***E+308-1.797693***E+308

0.0d char(字符型)

„ u0000-+=!~ +(一元)-(一元)

左右

* / %

右左

+(二元)-(二元)

右左

<< >> >>>

右左

< > <= >= instanceof

右左

= =!=

右左

&

右左

^

右左

|

右左

&&

右左

||

右左

?:

左右

= *= /= %= += -= <<= >>= >>>= &= ^= |=

左右

三、实验课任务

1、熟悉netbeans的工作环境,自己编写HELLO WORLD程序

2、输入并运行测试,至少10个不同运算符号组合的算术表达式

3、输入并运行测试,至少5个不同运算符号组合的逻辑表达式

4、联系字符串对象的基本用法:声明赋值对象,显示对象,两个字符串连接,截取子串等 第三讲 输入输出

一、介绍数据流的概念

1、流的基本概念

2、字节流

字节是8比特,等价于0-255范围的十进制数。字节是计算机中最基本的编码单位。如字符型是2个字节,浮点型是4个字节。

字符流的顶层包括inputstream和outputstream两个抽象类。可以通过fileinoutstream和fileoutputstream两个子类对文件进行输入和输出。通过datainputstream和dataoutputstream两个子类处理整数、浮点数等数据。

3、字符流

字符流是特殊的字节流,专门用于处理字符数据,目前的字符集通常是unicode,16比特,一个字符是两个字节。

顶层有两个抽象类:reader和writer,有两个最主要的方法:read(),write()

4、预定义流

标准输入流:in 标准输出流:out 出错流:err

举例:

输出一串字符,在显示器上显示出来

二、文件字节流

1、文件字节流的输入输出

常用方法:

read(),write(ch)案例1:在显示器上显示文本文件的内容。案例2:复制文件

2、文件字节流的随机访问

常用方法:

1、读数据方法:readInt()readBoolean()readLine()

2、写数据方法:wirteChar()writerDouble()

3、指针控制方法:

long getFilePointer();void seek(long pos);int skipBytes(int n)案例:建立一个可读写随机访问文件,写入10个浮点数,然后关闭该文件。再次以读写方式打开该文件,修改其中第3个数据,然后关闭该文件。再次以只读方式打开盖文件,显示文件内容,然后关闭该文件。

三、过滤流

过滤流是对输入输出流提供了一种包装。我们主要介绍一组: DataInputStream DataOutputStream 案例:从键盘输入一些同学的信息,将信息保存到文件中。

四、字符流

五、File类

六、对象的串行化 第四讲 程序控制语句 第五讲 综合练习第六讲 数组

第七讲 函数、函数调用、递归函数 第八讲 综合练习第九讲 类和对象

第十讲 继承、接口和包与异常处理 第十一讲 综合练习第十二讲APPLET、GUI 第十三讲 线程 第十四讲 综合练习

第十五讲 字符串及信息处理的应用 第十七讲 综合练习

第五篇:java培训-Java程序设计

Java程序设计:图形与多媒体处理(1)

本文主要介绍了Java的图形设计以及多媒体处理,源码作者也做了详细的注释,对于初学者应该不难。详细请看下文

同心圆效果图:

1./**

2.*程序要求:新建一个600*600像素的应用程序窗口,并在窗口中绘制5个不同颜色的同心圆,3.*所有圆心都是屏幕的中心点,相邻两个圆直接的半径相差50像素

4.*效果图如下图所示(颜色随机设置),源程序保存为Ex7_1.java。

5.*作者:wwj

6.*日期:2012/4/25

7.*功能:显示一个有5个不同颜色的同心圆

8.**/

9.10.import javax.swing.*;11.import java.awt.*;12.import java.awt.Color;13.public class Ex7_1 extends JFrame 14.{

15.int red,green,blue;16.Color color;17.18.public Ex7_1()19.{

20.super(“一个有5个不同颜色的同心圆”);//显示窗口名称

21.setSize(600,600);//设置窗口大小

22.setVisible(true);//设置为可见

23.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭动作

24.25.} 26.27.28.public void paint(Graphics g)29.{

30.//第一个圆

31.red=(int)(Math.random()*255);32.green=(int)(Math.random()*255);33.blue=(int)(Math.random()*255);34.color=new Color(red,green,blue);35.g.setColor(color);

36.g.fillOval(175,175,250,250);37.//第二个圆

38.red=(int)(Math.random()*255);39.green=(int)(Math.random()*255);40.blue=(int)(Math.random()*255);41.color=new Color(red,green,blue);42.g.setColor(color);

43.g.fillOval(200,200,200,200);44.//第三个圆

45.red=(int)(Math.random()*255);46.green=(int)(Math.random()*255);47.blue=(int)(Math.random()*255);48.color=new Color(red,green,blue);49.g.setColor(color);

50.g.fillOval(225,225,150,150);51.//第四个圆

52.red=(int)(Math.random()*255);53.green=(int)(Math.random()*255);54.blue=(int)(Math.random()*255);55.color=new Color(red,green,blue);56.g.setColor(color);

57.g.fillOval(250,250,100,100);58.//第五个圆

59.red=(int)(Math.random()*255);60.green=(int)(Math.random()*255);61.blue=(int)(Math.random()*255);62.color=new Color(red,green,blue);63.g.setColor(color);

64.g.fillOval(275,275,50,50);65.66.} 67.68.public static void main(String[] args)69.{

70.Ex7_1 e = new Ex7_1();71.} 72.73.}

播放音乐和切换图片的小程序效果图:

1./** 2.*程序要求:编写一个Applet的小程序,准备5幅图片和三个音乐文件,绘制到Applet中,3.*并增加几个按钮,控制图片的切换、放大、缩小和音乐文件的播放。

4.*作者:wwj

5.*日期:2012/4/29

6.*参考:neicole

7.*功能:能进行图片和歌曲的选择变换的applet小程序

8.**/

9.10.import javax.swing.*;11.import java.awt.*;12.import java.awt.event.*;13.import java.applet.Applet;14.import java.applet.AudioClip;15.16.17.public class Ex7_2 extends Applet implements ActionListener,ItemListener 18.{ 19.20.//创建两个面板

21.JPanel p1=new JPanel();22.JPanel p2=new JPanel();23.JPanel p3=new JPanel();24.//声音对象

25.AudioClip[] sound=new AudioClip[3];26.int playingSong=0;27.//切换图片的按钮

28.JButton lastPic=new JButton(“上一张”);29.JButton setLarge=new JButton(“放大”);30.JButton setLittle=new JButton(“缩小”);31.JButton nextPic=new JButton(“下一张”);32.//切换歌曲的按钮

33.JButton lastSound=new JButton(“上一首”);34.JButton play=new JButton(“播放”);35.JButton loop=new JButton(“连续”);36.JButton stop=new JButton(“停止”);37.JButton nextSound=new JButton(“下一首”);38.//曲目下拉列表

39.JComboBox xx;

40.String names[]={ “曲目1.wav”,“曲目2.wav”,“曲目3.wav”};41.42.//创建画布对象

43.MyCanvasl showPhotos;44.45.46.47.public void init()48.{

49.//窗口布局

50.this.setLayout(new BorderLayout());51.52.//为图片控制按钮注册监听器

53.lastPic.addActionListener(this);54.setLarge.addActionListener(this);55.setLittle.addActionListener(this);56.nextPic.addActionListener(this);57.58.//向面板p1添加组件

59.p1.add(lastPic);60.p1.add(setLarge);61.p1.add(setLittle);62.p1.add(nextPic);63.p1.repaint();64.65.//实例化下拉列表对象

66.xx = new JComboBox(names);67.xx.addItemListener(this);68.69.//为控制播放音乐按钮注册监听器

70.lastSound.addActionListener(this);71.play.addActionListener(this);72.loop.addActionListener(this);73.stop.addActionListener(this);74.nextSound.addActionListener(this);75.76.for(int i=0;i<3;i++)77.{

78.sound[i]=getAudioClip(getCodeBase(),“music/”+“曲目”

79.+Integer.toString(i+1)+“.wav”);80.} 81.82.83.84.//向面板p2添加组件

85.p2.add(xx);

86.p2.add(lastSound);87.p2.add(play);88.p2.add(loop);89.p2.add(stop);90.p2.add(nextSound);91.p2.repaint();92.93.showPhotos = new MyCanvasl();94.p3.add(showPhotos);95.p3.repaint();96.97.//把面板p1和p2分别布置到窗口的北部和南部

98.add(p1,BorderLayout.NORTH);99.add(p2,BorderLayout.SOUTH);100.add(p3,BorderLayout.CENTER);101.102.this.repaint();103.104.} 105.106.107.//按钮的事件处理

108.public void actionPerformed(ActionEvent e)109.{ 110.111.112.if(e.getSource()== lastPic){

113.showPhotos.changePhotoShow('P');114.}

115.else if(e.getSource()== nextPic){ 116.showPhotos.changePhotoShow('N');117.}

118.else if(e.getSource()== setLarge){ 119.showPhotos.changePhotoSize('B');120.}

121.else if(e.getSource()== setLittle){ 122.showPhotos.changePhotoSize('S');123.} 124.125.else if(e.getSource()==lastSound){ //上一首

126.sound[playingSong].stop();127.playingSong=(playingSong-1+3)%3;128.xx.setSelectedIndex(playingSong);129.sound[playingSong].play();130.131.}

132.else if(e.getSource()==play){ //按下播放按钮

133.sound[playingSong].play();134.}

135.else if(e.getSource()==loop){ //按下循环按钮

136.sound[playingSong].loop();137.}

138.else if(e.getSource()==stop){ //按下停止按钮

139.sound[playingSong].stop();140.}

141.else{ //下一首

142.sound[playingSong].stop();143.playingSong=(playingSong+1)%3;144.xx.setSelectedIndex(playingSong);145.sound[playingSong].play();146.147.} 148.} 149.150.151.//下拉列表的事件处理

152.public void itemStateChanged(ItemEvent e)153.{ 154.155.sound[playingSong].stop();

156.sound[playingSong]=getAudioClip(getCodeBase(),“music/”+xx.getSelectedItem());157.} 158.159.class MyCanvasl extends Canvas 160.{ 161.162.public Image[] img=new Image[5];163.164.int MaxWidth = 600;165.int MaxHeight = 500;166.int nowImageIndex = 0;167.int coordinateX = 0;168.int coordinateY = 0;

169.int currentWidth = MaxWidth;170.int currentHeight = MaxHeight;171.172.173.MyCanvasl(){

174.setSize(MaxWidth,MaxHeight);175.//获取当前目录下的图片

176.for(int i=0;i<5;i++){

177.img[i]=getImage(getCodeBase(),“image/”+Integer.toString(i+1)+“.jpg”);178.} 179.} 180.181.182.private void changePhotoIndex(int index){ 183.nowImageIndex = index;184.changePhotoSize('M');185.} 186.187.188.189.public void changePhotoShow(char command){ 190.if('P' == command){

191.changePhotoIndex((nowImageIndex + 5100))&&(0 <(currentHeight100;214.currentHeight = currentHeightcurrentWidth)/ 2;218.coordinateY =(MaxHeight-currentHeight)/ 2;219.repaint();220.}

221.//paint方法用来在窗口显示图片

222.public void paint(Graphics g){

223.g.drawImage(img[nowImageIndex],coordinateX,coordinateY,currentWidth,currentHeight,this);224.225.} 226.} 227.}

原文链接:http:/zretc.com

下载Java程序设计课堂练习题课案(共5则范文)word格式文档
下载Java程序设计课堂练习题课案(共5则范文).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    java程序设计教案(★)

    课程教案 (理论教学) 课程名称: Java程序设计 课程类型:( 2 )1、必修;2、选修;3、其它 授课对象: 专业(本科) 级 班 授课时间: 至 学年第 学期 计划学时: 学时(其中:理论 ,实验: ) 任课教师......

    Java程序设计报告

    楚雄师范学院 2015年春季期末Java程序设计报告 项目名称:基于Java平台开发的五子棋程序设计 学 院: 物理与电子科学学院 专 业:电子信息科学与技术 班 级:2 0 1 3 级 电 信 一......

    java程序设计[优秀范文5篇]

    import java.awt.*; import java.awt.event.*; import javax.swing.*; class CardText extends JFrame implementsActionListener { JButton btn=new JButton[6]; CardLay......

    Java程序设计课程教案

    Java使用教材: 程序设计课程教案(普通版) Java程序设计教程,雍俊海主编,清华大学出版社,2007,国家十一五规划教材 主要参考书: 《Java语言程序设计》,郎波,清华大学出版社,2005年5月......

    《Java程序设计》课程总结.

    《Java程序设计》总评成绩分析及课程总结 1、学期授课计划是否符合教学大纲要求 符合。 2、教学内容及进度是否与学期授课计划有出入,是何原因 无出入,完成规定的学习内容。......

    《JAVA程序设计》课程设计五篇

    JAVA程序设计》课程设计 ------ Chatter即时聊天工具 班 级: 姓 名: 学 号: 指导老师: 日 期: 1 《目录 1.引言... ..............................................................

    Java程序设计实验2

    学 生 实 验 报 告 册 课程名称: 学生学号: 所属院部: (理工类) 专业班级: 学生姓名: 指导教师: 20 ——20 学年 第 学期 金陵科技学院教务处制 实验报告书写要求 实验报告......

    Java程序设计实验报告[合集五篇]

    Java程序设计实验报告 实验一 实验题目:从键盘上读入10个字符串存入数组a中,然后输出这10个字符串中最大字符串和最小字符串。 实验代码: public class StrPro { public stati......