Java程序设计实验5篇

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

第一篇:Java程序设计实验

学 生 实 验 报 告 册

课程名称:

学生学号:

所属院部:

(理工类)

专业班级:

学生姓名:

指导教师: ——20 学年 第 学期

金陵科技学院教务处制

实验报告书写要求

实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。纸张一律采用A4的纸张。

实验报告书写说明

实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。

填写注意事项

(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。

(3)尽量采用专用术语来说明事物。

(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。

实验报告装订要求

实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

金陵科技学院实验报告

实验项目名称: 面向对象编程实验 实验学时: 8 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验1 面向对象编程实验

一、实验目的和要求

(1)理解Java概念、掌握JDK环境配置(2)熟悉Java开发过程

(3)掌握Java面向对象编程基础:封装、继承、多态(4)掌握Java接口编程,理解开发模式

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、JDK环境配置

2、面向对象的封装性

范例:设计一个表示学生的类,里面有学生的三项成绩:计算机成绩、数学成绩、英语成绩。要求可以求总分、平均分、最高分、最低分,并且可以输出一个学生的完整信息。代码如下: class Student{ private String name;private int age;private float english;private float computer;private float math;public Student(){} public Student(String n,int a,float e,float c,float m){

this.setName(n);

this.setAge(a);

this.setEnglish(e);

this.setComputer(c);

this.setMath(m);} public float sum(){

return english + computer + math;} public float avg(){

return this.sum()/ 3;} public float max(){

float max = computer>math?computer:math;

max = max>english?max:english;

return max;} public float min(){

float min = computer

min = min

return min;

金陵科技学院实验报告

} public String getInfo(){

return “学生信息: n” +

“t|-姓名:” + this.getName()+ “n” +

“t|-年龄:” + this.getAge()+ “n” +

“t|-数学成绩:” + this.getMath()+ “n” +

“t|-英语成绩:” + this.getEnglish()+ “n” +

“t|-计算机成绩:” + this.getComputer();} public void setName(String n){

name = n;} public void setAge(int a){

age = a;} public void setEnglish(float e){

english = e;} public void setComputer(float c){

computer = c;} public void setMath(float m){

math = m;} public String getName(){

return name;} public int getAge(){

return age;} public float getEnglish(){

return english;} public float getComputer(){

return computer;} public float getMath(){

return math;} } public class ExecDemo{ public static void main(String args[]){

Student stu = new Student(“张三”,30,89.0f,91.0f,87.0f);

System.out.println(“总分:” + stu.sum());

金陵科技学院实验报告

}

} System.out.println(“平均分:” + stu.avg());System.out.println(“最高分:” + stu.max());System.out.println(“最低分:” + stu.min());System.out.println(stu.getInfo());对照范例写出如下题目:

(1)编写并测试一个代表地址的Address类,包括以下的属性:国家、省份、城市、街道、邮编。注意:

1、体现封装

2、构造方法(最少2个)

3、要有输出(可以从此地址类中得到一个完整的地址信息)。

4、测试 主类 main

(2)定义并测试一个代表员工的Employee类。它的属性包括“员工姓名”、“员工号码”、“员工基本薪水”;它的方法包括“构造方法”、“获取员工姓名”、“获取员工号码”、“获取员工基本薪水”、“设置姓名”、“设置员工号码”、“设置基本薪水”。测试(3)、定义一个圆形类(半径属性),封装、构造、整个输出、可以返回圆的面积与周长。测试

(4)、思考设计:一个人有一本书,一本书属于一个人。

3、面向对象的继承性

范例:要求定义一个数组类Array,里面定义了一个整型数组,但是此整型数组属于动态分配大小,即:所有的大小由程序指定,并在此基础上实现以下的两个子类:

反转类:可以将数组的内容反转排列

排序类:可以对数组进行排序的操作 class Array{ private int temp[] = null;// 只是声明数组,但是大小未知

private int foot = 0;// 用于保存下一个的记录点

public Array(int len){

if(len>0){

this.temp = new int[len];// 此时大小由外部决定

}else{

this.temp = new int[1];// 至少开辟一个空间

} } public boolean add(int i){ // 加入数据操作

if(this.foot

this.temp[this.foot] = i;// 加入内容

this.foot++;// 改变长度

return true;// 加入成功返回true

}else{

return false;// 加入失败

} } public int[] getArray(){ // 返回全部的数组

return this.temp;}

金陵科技学院实验报告

} class SortArray extends Array{ public SortArray(int len){

super(len);} public int[] getArray(){

java.util.Arrays.sort(super.getArray());// 排序操作

return super.getArray();// 返回的是排序后的内容

} } class ReverseArray extends Array{ public ReverseArray(int len){

super(len);} public int[] getArray(){

int rt[] = new int[super.getArray().length];// 根据大小开辟新数组

int count = rt.length-1;

for(int x=0;x

rt[count] = super.getArray()[x];

count--;

}

return rt;} } public class ArrayDemo{ public static void main(String args[]){

ReverseArray arr = new ReverseArray(6);

System.out.println(arr.add(3));

System.out.println(arr.add(23));

System.out.println(arr.add(1));

System.out.println(arr.add(5));

System.out.println(arr.add(6));

System.out.println(arr.add(8));

System.out.println(arr.add(11));

System.out.println(arr.add(16));

print(arr.getArray());} public static void print(int i[]){

for(int x=0;x

System.out.print(i[x] + “、”);

} } }

金陵科技学院实验报告

对照范例写出如下题目:

(1).创建GrandFather类,其中包括

a)属性:姓名(name),年龄(age)

b)方法getGrandFather():显示爷爷的信息

c)构造方法:给爷爷的姓名,年龄赋值(2).创建Father类,继承Grandfather类 a)属性:除了继承爷爷的属性以外,还要增加自己的属性:“职业”(occupation)b)构造方法:显式调用父类的构造方法,为Father类的姓名和年龄赋初始值。再为职业输入初始值。

c)方法getFather(): 显示父亲的相关信息

(3).创建ClassMain()类,定义main()方法,构造GrandFather类的对象和Father类的对象,并分别显示详细信息。

3、面向对象多态性

范例:计算柱体的体积。柱体体积计算公式是:底部面积乘以高度 柱体底部分为 圆形和矩形 要求:通过抽象类和多态实现 package cn.jit.demo;abstract class Bottom { //父类抽象类 底部

public abstract double calculatorArea();} class CircleBottom extends Bottom{ //圆形底

/** * 半径

*/ private double radius;

@Override public double calculatorArea(){

return Math.PI * radius * radius;} public double getRadius(){

return radius;} public void setRadius(double radius){

this.radius = radius;} public CircleBottom(double radius){

super();

this.radius = radius;} } class SquareBottom extends Bottom{ //矩形底

private double sideA;

金陵科技学院实验报告

private double sideB;public double getSideA(){

return sideA;} public void setSideA(double sideA){

this.sideA = sideA;} public double getSideB(){

return sideB;} public void setSideB(double sideB){

this.sideB = sideB;} @Override public double calculatorArea(){

return sideA * sideB;} public SquareBottom(double sideA, double sideB){

super();

this.sideA = sideA;

this.sideB = sideB;} } class ZhuTi { //柱体类,完成形状的拼装

/** * 底

*/ private Bottom bottom;/** * 高

*/ private double height;/** * 计算体积

* @return */ public double calculatorVolumn(){

return bottom.calculatorArea()* height;} public ZhuTi(Bottom bottom, double height){

super();

this.bottom = bottom;

this.height = height;

金陵科技学院实验报告

} public Bottom getBottom(){

return bottom;} public void setBottom(Bottom bottom){

this.bottom = bottom;} public double getHeight(){

return height;} public void setHeight(double height){

this.height = height;} public void changeBottom(Bottom bottom){

this.bottom = bottom;} } public class VolumnTest { //测试类

public static void main(String[] args){

Bottom bottom = new CircleBottom(1.0);

double height = 1.0;

ZhuTi zhuTi = new ZhuTi(bottom,height);

double result = zhuTi.calculatorVolumn();

System.out.println(“圆柱体的体积是:” + result);

bottom = new SquareBottom(1.0,1.0);

zhuTi.changeBottom(bottom);

result = zhuTi.calculatorVolumn();

System.out.println(“立方体的体积是:” + result);} } 范例:接口和多态的应用,例如:电脑上实现了USB接口,U盘,打印机等等也都实现了此标准。interface USB{ public void start();// 开始工作

public void stop();// 结束工作 } class Computer{ public static void plugin(USB usb){

usb.start();

usb.stop();} };class Flash implements USB{ public void start(){

金陵科技学院实验报告

System.out.println(“U盘开始工作。”);} public void stop(){

System.out.println(“U盘停止工作。”);} };class Print implements USB{ public void start(){

System.out.println(“打印机开始工作。”);} public void stop(){

System.out.println(“打印机停止工作。”);} };public class InterPolDemo02{ public static void main(String args[]){

Computer.plugin(new Flash());

Computer.plugin(new Print());} };对照范例,写出以下程序:(1)乐器(Instrument)的标准为弹奏(play),而乐器类型分为:钢琴(Piano)和小提琴(Violin),各种乐器的弹奏方法各不同。编写代码实现不同乐器的弹奏。(2)计算机模拟

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

金陵科技学院实验报告

实验项目名称: 类集

实验学时: 4 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验2 类集

一、实验目的和要求(1)理解类集概念

(2)熟悉Collection接口、List接口、Set接口和Map接口(3)掌握ArrayList类、HashSet类和TreeSet类(4)理解TreeMap、HashMap

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、类集应用

范例:实现一个超市管理系统,要求可以添加货物,删除货物和查询货物:

。代码如下:

public interface Goods { public String getName();// 得到商品名称

public int getCount();// 得到商品数量

public float getPrice();// 得到商品价格 }

public class Book implements Goods {

private String name;private int count;private float price;

public Book(){ }

public Book(String name, int count, float price){

this.name = name;

this.count = count;

this.price = price;}

public String getName(){

return name;}

public void setName(String name){

this.name = name;

金陵科技学院实验报告

}

public int getCount(){

return count;}

public void setCount(int count){

this.count = count;}

public float getPrice(){

return price;}

public void setPrice(float price){

this.price = price;}

public boolean equals(Object obj){

if(this == obj){

return true;

}

if(!(obj instanceof Book)){

return false;

}

Book b =(Book)obj;

if(b.name.equals(this.name)&& b.count == this.count

&& b.price == this.price){

return true;

} else {

return false;

} }

public int hashCode(){

return this.name.hashCode()+ new Integer(this.count).hashCode()

+ new Float(this.price).hashCode();}

public String toString(){

return “书名:” + this.name + “;书的价格:” + this.price + “;书的数量:”

+ this.count;}

金陵科技学院实验报告

}

import java.util.ArrayList;import java.util.Iterator;import java.util.List;

public class SuperMarket { private List allGoods;

public SuperMarket(){

this.allGoods = new ArrayList();}

public void add(Goods goods){

this.allGoods.add(goods);}

public void remove(Goods goods){

this.allGoods.remove(goods);}

public List search(String keyWord){

List temp = new ArrayList();

Iterator iter = this.allGoods.iterator();

while(iter.hasNext()){

Goods g = iter.next();

if(g.getName().indexOf(keyWord)!=-1){

temp.add(g);

}

}

return temp;}

public List getAllGoods(){

return this.allGoods;} }

import java.util.Iterator;import java.util.List;

public class Test {

金陵科技学院实验报告

public static void main(String[] args){

SuperMarket mak = new SuperMarket();

mak.add(new Book(“Java”, 2, 30.9f));

mak.add(new Book(“C++”, 3, 10.9f));

mak.add(new Book(“JSP”, 5, 80.9f));

print(mak.search(“J”));

mak.remove(new Book(“Java”, 2, 30.9f));

print(mak.search(“J”));}

public static void print(List all){

Iterator iter = all.iterator();

while(iter.hasNext()){

System.out.println(iter.next());

} } } 对照范例写出如下题目:

(1)宠物商店,要求可以添加、删除和查找宠物(2)实现以下两个关系

A、一个学校可以有多个学生,所有学生属于一个学校

B、一门课程可以有多个学生选,一个学生可以选多门课程

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

金陵科技学院实验报告

实验项目名称: Java IO操作

实验学时: 6 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验3 Java IO操作

一、实验目的和要求

(1)理解输入输出流概念(2)掌握文件输入输出流

(3)掌握键盘的输入、显示器的输出(4)理解其他输入输出流

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、编写类模拟命令Copy

范例:实现文件的复制代码。参考代码如下:

File file1 = new File(“d:”+File.seperator +”demo.txt”);

// 找到第一个文件的File对象

File file2 = new File(“d:”+File.seperator +”cemo.txt”);// 找到目标文件路径 InputStream input = new FileInputStream(file1);// 输入流 OutputStream output = new FileOutputStream(file2);// 输出流 int temp = 0;// 定义一个整数表示接收的内容

while((temp = input.read())!=-1){ // 表示还有内容可以继续读

output.write(temp);// 写入数据 } input.close();// 关闭 output.close();// 关闭

2、通过键盘的输入,实现简单的选项操作。

*********XXXX管理系统***********

[1]添加

[2]删除

[3]修改

[4]查询

[5]退出

3、编写一个简单管理系统,实现真实的操作。

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

金陵科技学院实验报告

实验项目名称: JDBC

实验学时: 6 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验4 JDBC

一、实验目的和要求(1)理解JDBC分类

(2)掌握JDBC数据库连接步骤

(3)掌握JDBC连接MySQL数据库代码(4)理解JDBC连接其他数据库方式

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、安装MySQL数据库,配置好数据库

创建一个数据库表,按要求给出详细的字段设计

pid name age birthday salary

主要操作:

2、创建Eclipse项目,配置驱动包

每个数据库厂商都会提供对Java开发技术的支持,即都会提供对应的Java驱动,也就是一个jar包

主要操作:

3、项目中建立一个详细例子,按照要求连接、操作、关闭数据库

按照标准的步骤完成对MySQL数据库的操作

主要代码:(添加、修改、删除和查询)

金陵科技学院实验报告

4、试着连接其他类型数据库。

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

第二篇:Java程序设计实验2

学 生 实 验 报 告 册

课程名称:

学生学号:

所属院部:

(理工类)

专业班级:

学生姓名:

指导教师: ——20 学年 第 学期

金陵科技学院教务处制

实验报告书写要求

实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。纸张一律采用A4的纸张。

实验报告书写说明

实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。

填写注意事项

(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。

(3)尽量采用专用术语来说明事物。

(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。

实验报告装订要求

实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

金陵科技学院实验报告

实验项目名称: 面向对象编程实验 实验学时: 8 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验1 面向对象编程实验

一、实验目的和要求

(1)理解Java概念、掌握JDK环境配置(2)熟悉Java开发过程

(3)掌握Java面向对象编程基础:封装、继承、多态(4)掌握Java接口编程,理解开发模式

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、JDK环境配置

2、面向对象的封装性

范例:设计一个表示学生的类,里面有学生的三项成绩:计算机成绩、数学成绩、英语成绩。要求可以求总分、平均分、最高分、最低分,并且可以输出一个学生的完整信息。代码如下: class Student{ private String name;private int age;private float english;private float computer;private float math;public Student(){} public Student(String n,int a,float e,float c,float m){

this.setName(n);

this.setAge(a);

this.setEnglish(e);

this.setComputer(c);

this.setMath(m);} public float sum(){

return english + computer + math;} public float avg(){

return this.sum()/ 3;} public float max(){

float max = computer>math?computer:math;

max = max>english?max:english;

return max;} public float min(){

float min = computer

min = min

return min;

金陵科技学院实验报告

} public String getInfo(){

return “学生信息: n” +

“t|-姓名:” + this.getName()+ “n” +

“t|-年龄:” + this.getAge()+ “n” +

“t|-数学成绩:” + this.getMath()+ “n” +

“t|-英语成绩:” + this.getEnglish()+ “n” +

“t|-计算机成绩:” + this.getComputer();} public void setName(String n){

name = n;} public void setAge(int a){

age = a;} public void setEnglish(float e){

english = e;} public void setComputer(float c){

computer = c;} public void setMath(float m){

math = m;} public String getName(){

return name;} public int getAge(){

return age;} public float getEnglish(){

return english;} public float getComputer(){

return computer;} public float getMath(){

return math;} } public class ExecDemo{ public static void main(String args[]){

Student stu = new Student(“张三”,30,89.0f,91.0f,87.0f);

System.out.println(“总分:” + stu.sum());

金陵科技学院实验报告

}

} System.out.println(“平均分:” + stu.avg());System.out.println(“最高分:” + stu.max());System.out.println(“最低分:” + stu.min());System.out.println(stu.getInfo());对照范例写出如下题目:

(1)编写并测试一个代表地址的Address类,包括以下的属性:国家、省份、城市、街道、邮编。

可以从此地址类中得到一个完整的地址信息。

(2)定义并测试一个代表员工的Employee类。它的属性包括“员工姓名”、“员工号码”、“员工基本薪水”,它的方法包括“构造方法”、“获取员工姓名”、“获取员工号码”、“获取员工基本薪水”、“设置员工姓名”、“设置员工号码”、“设置员工基本薪水”、所有员工信息的输出getInfo。(3)、定义一个圆形类,可以返回圆的面积与周长。

class Circle{

成员变量 半径 r

构造方法

成员函数 设置和获取 半径

计算周长

计算面积

所有信息输出 } 定义一个矩形类,返回矩形的面积与周长(4)、思考设计:一个人有一本书,一本书属于一个人。//一个人有一本书,一本书属于一个人 //类 新的类别、类型 定义新的数据类型 //两个类的关系 独立的两个类 使用 class Person{ private String name;private int age;private Book book;//一个人有一本书 public Person(){

} public Person(String name,int age){ this.name=name;this.age=age;} public void setBook(Book book){ this.book=book;} public Book getBook(){ return this.book;

金陵科技学院实验报告

} } class Book{ private String name;private float price;private Person person;//一本书属于一个人 public Book(){ } public Book(String name,float price){ this.name=name;this.price=price;} public void setPerson(Person person){ this.person=person;} public Person getPerson(){ return this.person;} } public class TestBP{ public static void main(String args[]){ Person per=new Person(“zhangsan”,20);Book bok=new Book(“Java program”,20.0f);per.setBook(bok);//一个人有一本书

bok.setPerson(per);//一本书属于一个人

per.getBook().getPrice();bok.getPerson().getName();} }

3、面向对象的继承性

范例:要求定义一个数组类Array,里面定义了一个整型数组,但是此整型数组属于动态分配大小,即:所有的大小由程序指定,并在此基础上实现以下的两个子类:

反转类:可以将数组的内容反转排列

排序类:可以对数组进行排序的操作 class Array{ private int temp[] = null;// 只是声明数组,但是大小未知

private int foot = 0;// 用于保存下一个的记录点

public Array(int len){

if(len>0){

this.temp = new int[len];// 此时大小由外部决定

}else{

this.temp = new int[1];// 至少开辟一个空间

} }

金陵科技学院实验报告

public boolean add(int i){ // 加入数据操作

if(this.foot

this.temp[this.foot] = i;// 加入内容

this.foot++;// 改变长度

return true;// 加入成功返回true

}else{

return false;// 加入失败

} } public int[] getArray(){ // 返回全部的数组

return this.temp;} } class SortArray extends Array{ public SortArray(int len){

super(len);} public int[] getArray(){

java.util.Arrays.sort(super.getArray());// 排序操作

return super.getArray();// 返回的是排序后的内容

} } class ReverseArray extends Array{ public ReverseArray(int len){

super(len);} public int[] getArray(){

int rt[] = new int[super.getArray().length];// 根据大小开辟新数组

int count = rt.length-1;

for(int x=0;x

rt[count] = super.getArray()[x];

count--;

}

return rt;} } public class ArrayDemo{ public static void main(String args[]){

ReverseArray arr = new ReverseArray(6);

System.out.println(arr.add(3));

System.out.println(arr.add(23));

System.out.println(arr.add(1));

System.out.println(arr.add(5));

金陵科技学院实验报告

System.out.println(arr.add(6));

System.out.println(arr.add(8));

System.out.println(arr.add(11));

System.out.println(arr.add(16));

print(arr.getArray());} public static void print(int i[]){

for(int x=0;x

System.out.print(i[x] + “、”);

} } } 对照范例写出如下题目:

(1).创建GrandFather类,其中包括

a)属性:姓名(name),年龄(age)

b)方法getGrandFather():显示爷爷的信息

c)构造方法:给爷爷的姓名,年龄赋值(2).创建Father类,继承Grandfather类 a)属性:除了继承爷爷的属性以外,还要增加自己的属性:“职业”(occupation)b)构造方法:显式调用父类的构造方法,为Father类的姓名和年龄赋初始值。再为职业输入初始值。

c)方法getFather(): 显示父亲的相关信息

(3).创建ClassMain()类,定义main()方法,构造GrandFather类的对象和Father类的对象,并分别显示详细信息。

3、面向对象多态性

范例:计算柱体的体积。柱体体积计算公式是:底部面积乘以高度 柱体底部分为 圆形和矩形 要求:通过抽象类和多态实现 package cn.jit.demo;abstract class Bottom { //父类抽象类 底部

public abstract double calculatorArea();} class CircleBottom extends Bottom{ //圆形底

/** * 半径

*/ private double radius;

@Override public double calculatorArea(){

return Math.PI * radius * radius;} public double getRadius(){

金陵科技学院实验报告

return radius;} public void setRadius(double radius){

this.radius = radius;} public CircleBottom(double radius){

super();

this.radius = radius;} } class SquareBottom extends Bottom{ //矩形底

private double sideA;

private double sideB;public double getSideA(){

return sideA;} public void setSideA(double sideA){

this.sideA = sideA;} public double getSideB(){

return sideB;} public void setSideB(double sideB){

this.sideB = sideB;} @Override public double calculatorArea(){

return sideA * sideB;} public SquareBottom(double sideA, double sideB){

super();

this.sideA = sideA;

this.sideB = sideB;} } class ZhuTi { //柱体类,完成形状的拼装

/** * 底

*/ private Bottom bottom;/** * 高

*/

金陵科技学院实验报告

private double height;/** * 计算体积

* @return */ public double calculatorVolumn(){

return bottom.calculatorArea()* height;} public ZhuTi(Bottom bottom, double height){

super();

this.bottom = bottom;

this.height = height;} public Bottom getBottom(){

return bottom;} public void setBottom(Bottom bottom){

this.bottom = bottom;} public double getHeight(){

return height;} public void setHeight(double height){

this.height = height;} public void changeBottom(Bottom bottom){

this.bottom = bottom;} } public class VolumnTest { //测试类

public static void main(String[] args){

Bottom bottom = new CircleBottom(1.0);

double height = 1.0;

ZhuTi zhuTi = new ZhuTi(bottom,height);

double result = zhuTi.calculatorVolumn();

System.out.println(“圆柱体的体积是:” + result);

bottom = new SquareBottom(1.0,1.0);

zhuTi.changeBottom(bottom);

result = zhuTi.calculatorVolumn();

System.out.println(“立方体的体积是:” + result);} } 范例:接口和多态的应用,例如:电脑上实现了USB接口,U盘,打印机等等也都实现了此标准。

金陵科技学院实验报告

interface USB{ public void start();// 开始工作

public void stop();// 结束工作 } class Computer{ public static void plugin(USB usb){

usb.start();

usb.stop();} };class Flash implements USB{ public void start(){

System.out.println(“U盘开始工作。”);} public void stop(){

System.out.println(“U盘停止工作。”);} };class Print implements USB{ public void start(){

System.out.println(“打印机开始工作。”);} public void stop(){

System.out.println(“打印机停止工作。”);} };public class InterPolDemo02{ public static void main(String args[]){

Computer.plugin(new Flash());

Computer.plugin(new Print());} };对照范例,写出以下程序:(1)乐器(Instrument)的标准为弹奏(play),而乐器类型分为:钢琴(Piano)和小提琴(Violin),各种乐器的弹奏方法各不同。编写代码实现不同乐器的弹奏。(2)计算机模拟

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

金陵科技学院实验报告

实验项目名称: 类集

实验学时: 4 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验2 类集

一、实验目的和要求(1)理解类集概念

(2)熟悉Collection接口、List接口、Set接口和Map接口(3)掌握ArrayList类、HashSet类和TreeSet类(4)理解TreeMap、HashMap

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、类集应用

范例:实现一个超市管理系统,要求可以添加货物,删除货物和查询货物:

。代码如下:

public interface Goods { public String getName();// 得到商品名称

public int getCount();// 得到商品数量

public float getPrice();// 得到商品价格 }

public class Book implements Goods {

private String name;private int count;private float price;

public Book(){ }

public Book(String name, int count, float price){

this.name = name;

this.count = count;

this.price = price;}

public String getName(){

return name;}

public void setName(String name){

this.name = name;

金陵科技学院实验报告

}

public int getCount(){

return count;}

public void setCount(int count){

this.count = count;}

public float getPrice(){

return price;}

public void setPrice(float price){

this.price = price;}

public boolean equals(Object obj){

if(this == obj){

return true;

}

if(!(obj instanceof Book)){

return false;

}

Book b =(Book)obj;

if(b.name.equals(this.name)&& b.count == this.count

&& b.price == this.price){

return true;

} else {

return false;

} }

public int hashCode(){

return this.name.hashCode()+ new Integer(this.count).hashCode()

+ new Float(this.price).hashCode();}

public String toString(){

return “书名:” + this.name + “;书的价格:” + this.price + “;书的数量:”

+ this.count;}

金陵科技学院实验报告

}

import java.util.ArrayList;import java.util.Iterator;import java.util.List;

public class SuperMarket { private List allGoods;

public SuperMarket(){

this.allGoods = new ArrayList();}

public void add(Goods goods){

this.allGoods.add(goods);}

public void remove(Goods goods){

this.allGoods.remove(goods);}

public List search(String keyWord){

List temp = new ArrayList();

Iterator iter = this.allGoods.iterator();

while(iter.hasNext()){

Goods g = iter.next();

if(g.getName().indexOf(keyWord)!=-1){

temp.add(g);

}

}

return temp;}

public List getAllGoods(){

return this.allGoods;} }

import java.util.Iterator;import java.util.List;

public class Test {

金陵科技学院实验报告

public static void main(String[] args){

SuperMarket mak = new SuperMarket();

mak.add(new Book(“Java”, 2, 30.9f));

mak.add(new Book(“C++”, 3, 10.9f));

mak.add(new Book(“JSP”, 5, 80.9f));

print(mak.search(“J”));

mak.remove(new Book(“Java”, 2, 30.9f));

print(mak.search(“J”));}

public static void print(List all){

Iterator iter = all.iterator();

while(iter.hasNext()){

System.out.println(iter.next());

} } } 对照范例写出如下题目:

(1)宠物商店,要求可以添加、删除和查找宠物(2)实现以下两个关系

A、一个学校可以有多个学生,所有学生属于一个学校

B、一门课程可以有多个学生选,一个学生可以选多门课程

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

金陵科技学院实验报告

实验项目名称: Java IO操作

实验学时: 6 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验3 Java IO操作

一、实验目的和要求

(1)理解输入输出流概念(2)掌握文件输入输出流

(3)掌握键盘的输入、显示器的输出(4)理解其他输入输出流

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、编写类模拟命令Copy

范例:实现文件的复制代码。参考代码如下:

File file1 = new File(“d:”+File.seperator +”demo.txt”);

// 找到第一个文件的File对象

File file2 = new File(“d:”+File.seperator +”cemo.txt”);// 找到目标文件路径 InputStream input = new FileInputStream(file1);// 输入流 OutputStream output = new FileOutputStream(file2);// 输出流 int temp = 0;// 定义一个整数表示接收的内容

while((temp = input.read())!=-1){ // 表示还有内容可以继续读

output.write(temp);// 写入数据 } input.close();// 关闭 output.close();// 关闭

2、通过键盘的输入,实现简单的选项操作。

*********XXXX管理系统***********

[1]添加

[2]删除

[3]修改

[4]查询

[5]退出

3、编写一个简单管理系统,实现真实的操作。

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

金陵科技学院实验报告

实验项目名称: JDBC

实验学时: 6 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

金陵科技学院实验报告

实验4 JDBC

一、实验目的和要求(1)理解JDBC分类

(2)掌握JDBC数据库连接步骤

(3)掌握JDBC连接MySQL数据库代码(4)理解JDBC连接其他数据库方式

二、实验仪器和设备

奔腾以上个人计算机,windows操作系统。

配置好JDK环境,安装集成开发环境(Eclipse)

三、实验内容与过程

1、安装MySQL数据库,配置好数据库

创建一个数据库表,按要求给出详细的字段设计

pid name age birthday salary

主要操作:

2、创建Eclipse项目,配置驱动包

每个数据库厂商都会提供对Java开发技术的支持,即都会提供对应的Java驱动,也就是一个jar包

主要操作:

3、项目中建立一个详细例子,按照要求连接、操作、关闭数据库

按照标准的步骤完成对MySQL数据库的操作

主要代码:(添加、修改、删除和查询)

金陵科技学院实验报告

4、试着连接其他类型数据库。

四、实验结果与分析(程序运行结果及其分析)

五、实验体会

第三篇:Java Web程序设计(04112560)--实验7

实验项目七

1、实验项目名称: 监听和过滤

2、实验项目性质:验证性

3、实验要求:必修

4、计划学时数:2学时

5、实验内容:

(1).实现网上书店项目后台管理用户的过滤功能。具体要求如下:

 禁止用户非法访问,只有登录成功才能访问后台页面。

 没有登录,直接访问后台其他页面,将跳转到登录页面。

(2).在网上书店项目中增加监听功能,当用户登录成功时自动更新数据库中该用户的登录次数。

(3).实现网上书店项目后台图书管理中的修改图书信息功能模块。具体要求如下:  在图书管理页面bookManager.jsp中,单击“修改图书信息”按钮,对选定的图书进行修改。

 一次只能修改一本图书信息。

 修改页面中显示图书的原有数据。

 图书ISBN不可修改。

(4).实现网上书店项目后台用户管理中的修改用户信息功能模块。具体要求如下:  在用户管理页面userManager.jsp页面中,单击“修改用户信息”按钮,对选定的用户信息进行修改。

 一次只能修改一个用户信息。

 修改页面中显示该用户原有信息。

 用户名不可修改。

根据第七章所学内容以及上机实践情况,在实验报告中完成以下问题。

(1).编写一个过滤器,名称为ForceNoCacheFilter,通过使用此过滤器使浏览器不缓存任何页面。在实验报告中给出其中的关键代码。

(2).画图说明Servlet上下文监听器的工作流程。

6、项目需用仪器设备名称: 计算机

7、所需主要元器件及耗材:无

8、实验项目目的和任务:

(1).了解监听器原理及生命周期中的方法。

(2).掌握Servlet上下文监听。掌握HTTP会话监听。了解请求监听。

(3).理解过滤器原理及生命周期。掌握实现一个过滤器的步骤。了解过滤器链。

第四篇:Java程序设计课程实验代码及答案

Java程序设计课程实验

上机实践1 初识JAVA.................................................................................................................3 实验

1一个简单的应用程序....................................................................................................3 实验

2一个简单的JAVA APPLET程序......................................................................................3 实验

3联合编译........................................................................................................................4 上机实践2 基本数据类型与控制语句........................................................................................5 实验1

输出希腊字母表............................................................................................................5 实验2

回文数............................................................................................................................6 实验3

猜数字游戏....................................................................................................................8 上机实践3 类与对象....................................................................................................................9 实验1

三角形、梯形和圆形的类封装.....................................................................................9 实验

2实例成员与类成员......................................................................................................12 实验

3使用PACKAGE语句与IMPORT语句............................................................................14 上机实践4 继承与接口..............................................................................................................16 实验

1继承..............................................................................................................................16 实验2

上转型对象..................................................................................................................19 实验3 接口回调.....................................................................................................................21 上机实践5 字符串、时间与数字..............................................................................................23 实验

1STRING类的常用方法..................................................................................................23 实验

2比较日期的大小..........................................................................................................24 实验

3处理大整数..................................................................................................................25 上机实践6 组件及事件处理......................................................................................................26 实验1

算术测试......................................................................................................................26 实验2

信号灯..........................................................................................................................29 实验3

布局与日历..................................................................................................................31 上机实践7 组件及事件处理2...................................................................................................35 实验1

方程求根......................................................................................................................35 实验2

字体对话框..................................................................................................................38 实验3

英语单词拼写训练......................................................................................................41 上机实践8 多线程.....................................................................................................................45 实验1

汉字打字练习..............................................................................................................45 实验2

旋转的行星..................................................................................................................47 实验3

双线程接力..................................................................................................................51 上机实践9 输入输出流..............................................................................................................54 实验1

学读汉字......................................................................................................................54 实验2

统计英文单词字..........................................................................................................57 实验2

读取ZIP文件...............................................................................................................61 上机实践10 JAVA 中的网络编程............................................................................................62 实验1

读取服务器端文件......................................................................................................62 实验2

使用套接字读取服务器端对象...................................................................................64 实验3

基于UDP的图像传输................................................................................................67 上机实践11 数据结构................................................................................................................71 实验1

扫雷小游戏..................................................................................................................71 实验2

排序与查找..................................................................................................................76 实验3

使用TREESET排序......................................................................................................77 上机实践12 JAVA SWING.......................................................................................................79 实验1

JLAYEREDPANE分层窗格............................................................................................79 实验2

使用表格显示日历......................................................................................................80 实验3

多文档界面(MDI)...................................................................................................83 2

上机实践1 初识Java 实验1 一个简单的应用程序

1.答案:

【代码1】:

System.out.println(“你好,很高兴学习Java”);【代码2】:

System.out.println(“We are students”);2.模板代码

Hello.java public class Hello {

public static void main(String args[ ])

{

【代码1】

//命令行窗口输出“你好,很高兴学习Java”

A a=new A();

a.fA();

} } class A {

void fA()

{

【代码2】

//命令行窗口输出“We are students”

} } 实验2 一个简单的Java Applet程序

1.答案:

【代码1】:

g.drawString(“这是一个Java Applet 程序”,10,30);【代码2】:

g.drawString(“我改变了字体”,20,50);2.模板代码

FirstApplet.java import java.applet.*;3 import java.awt.*;public class FirstApplet extends Applet { public void paint(Graphics g){ g.setColor(Color.blue);【代码1】//在Java Applet中绘制一行文字:“这是一个Java Applet 程序” g.setColor(Color.red);g.setFont(new Font(“宋体”,Font.BOLD,36));【代码2】//在Java Applet中绘制一行文字:“我改变了字体” } } 实验3 联合编译

1.答案:

【代码1】:

System.out.println(“你好,只需编译我”);【代码2】:

System.out.println(“I am A”);【代码3】:

System.out.println(“I am B”);【代码4】:

System.out.println(“I am C”);2.模板代码

模板1:Hello.java public class MainClass { public static void main(String args[ ]){ 【代码1】 //命令行窗口输出“你好,只需编译我” A a=new A();a.fA();B b=new B();b.fB();} }

模板2 :A.java

public class A { void fA(){ 【代码2】 //命令行窗口输出“I am A” } } 模板3 :B.java

public class B { void fB(){ 【代码3】 //命令行窗口输出“I am B” } } 模板4 :C.java

public class C { void fC(){ 【代码4】 //命令行窗口输出“I am C” } }

上机实践2 基本数据类型与控制语句实验1 输出希腊字母表

1.答案:

【代码1】: startPosition=(int)cStart;

【代码2】: endPosition=(int)cEnd;

【代码3】: c=(char)i;

2.模板代码

GreekAlphabet.java

public class GreekAlphabet {

public static void main(String args[ ])

{

int startPosition=0,endPosition=0;

char cStart='α',cEnd='ω';

【代码1】

//cStart做int型转换据运算,并将结果赋值给startPosition

【代码2】

//cEnd做int型转换运算,并将结果赋值给endPosition

System.out.println(“希腊字母'α'在unicode表中的顺序位置:”+(int)c);

System.out.println(“希腊字母表:”);

for(int i=startPosition;i<=endPosition;i++)

{

char c='';

【代码3】

//i做char型转换运算,并将结果赋值给c

System.out.print(“ ”+c);if((i-startPosition+1)%10==0)

System.out.println(“");

}

} } 实验2 回文数

1.答案:

【代码1】: number<=99999&&number>=1 【代码2】: d5=number/10000;【代码3】: d4=number%10000/1000;【代码4】: d3=number%1000/100;【代码5】: d5!=0 【代码6】: d1==d5&&d2==d4 【代码7】: d4!=0

【代码8】: d1==d4&&d2==d3 【代码9】: d3!=0 【代码10】:d1==d3 2.模板代码

Number.java import javax.swing.JOptionPane;public class Number {

public static void main(String args[])

{

int number=0,d5,d4,d3,d2,d1;

String str=JOptionPane.showInputDialog(”输入一个1至99999之间的数“);

number=Integer.parseInt(str);

if(【代码1】)//判断number在1至99999之间的条件

{

【代码2】

//计算number的最高位(万位)d5

【代码3】

//计算number的千位d4

【代码4】

//计算number的百位d3

d2=number%100/10;

d1=number%10;

if(【代码5】)//判断number是5位数的条件

{

System.out.println(number+”是5位数“);

if(【代码6】)//判断number是回文数的条件

{

System.out.println(number+”是回文数“);

}

else

{

System.out.println(number+”不是回文数“);

}

}

else if(【代码7】)//判断number是4位数的条件

{

System.out.println(number+”是4位数“);

if(【代码8】)//判断number是回文数的条件码

{

System.out.println(number+”是回文数“);

}

else

{

System.out.println(number+”不是回文数“);

}

}

else if(【代码9】)//判断number是3位数的条件

{

System.out.println(number+”是3位数“);

if(【代码10】)//判断number是回文数的条件

{

System.out.println(number+”是回文数“);

}

else

{

System.out.println(number+”不是回文数“);

}

}

else if(d2!=0)

{

System.out.println(number+”是2位数“);

if(d1==d2)

{

System.out.println(number+”是回文数“);

}

else

{

System.out.println(number+”不是回文数“);

}

}

else if(d1!=0)

{

System.out.println(number+”是1位数“);

System.out.println(number+”是回文数“);

}

}

else

{

System.out.printf(”n%d不在1至99999之间“,number);

}

} } 实验3 猜数字游戏

1.答案:

【代码1】: yourGuess!=realNumber 【代码2】: yourGuess>realNumber

【代码3】: yourGuess

2.模板代码

GuessNumber.java import javax.swing.JOptionPane;public class GuessNumber {

public static void main(String args[ ])

{

System.out.println(”给你一个1至100之间的整数,请猜测这个数“);

int realNumber=(int)(Math.random()*100)+1;

int yourGuess=0;

String str=JOptionPane.showInputDialog(”输入您的猜测:“);

yourGuess=Integer.parseInt(str);

while(【代码1】)//循环条件

{

if(【代码2】)//条件代码

{

str=JOptionPane.showInputDialog(”猜大了,再输入你的猜测:“);

yourGuess=Integer.parseInt(str);

}

else if(【代码3】)//条件代码

{

str=JOptionPane.showInputDialog(”猜小了,再输入你的猜测:“);

yourGuess=Integer.parseInt(str);

}

}

System.out.println(”猜对了!“);

} }

上机实践3 类与对象

实验1 三角形、梯形和圆形的类封装

1.答案:

【代码1】:

sideA=a;sideB=b;sideC=c;

【代码2】:

a+b>c&&a+c>b&&c+b>a

【代码3】:

boo=true;

【代码4】:

boo=false;

【代码5】:

if(boo)

{

length=sideA+sideB+sideC;

return length;

}

else

{

System.out.println(”不是一个三角形,不能计算周长“);

return 0;

}

【代码6】:

sideA=a;sideB=b;sideC=c;【代码7】: a+b>c&&a+c>b&&c+b>a 【代码8】: boo=true;【代码9】: boo=false;【代码10】:

above=a;

bottom=b;

height=h;

【代码11】:

area=(above+bottom)/2*height;

return area;【代码12】: radius=r;9 【代码13】: return 3.14*radius*radius;【代码14】: return 3.14*2*radius;【代码15】: circle=new Circle(10);【代码16】: trangle=new Trangle(3,4,5);【代码17】: lader=new Lader(3,4,10);【代码18】: length=circle.getLength();【代码19】: area=circle.getArea();【代码20】: length=trangle.getLength();【代码21】: area=trangle.getArea();【代码22】: area=lader.getArea();【代码23】: trangle.setABC(12,34,1);【代码24】: area=trangle.getArea();【代码25】: length=trangle.getLength();

2.模板代码

AreaAndLength.java

class Trangle

{

double sideA,sideB,sideC,area,length;

boolean boo;

public Trangle(double a,double b,double c)

{

【代码1】 //参数a,b,c分别赋值给sideA,sideB,sideC

if(【代码2】)//a,b,c构成三角形的条件表达式

{

【代码3】 //给boo赋值。

}

else

{

【代码4】 //给boo赋值。

}

}

double getLength()

{

【代码5】 //方法体,要求计算出length的值并返回

}

public double getArea()

{

if(boo)

{

double p=(sideA+sideB+sideC)/2.0;

area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));

return area;

}

else

{

System.out.println(”不是一个三角形,不能计算面积“);

return 0;

}

}

public void setABC(double a,double b,double c)

{

【代码6】 //参数a,b,c分别赋值给sideA,sideB,sideC

if(【代码7】)//a,b,c构成三角形的条件表达式

{

【代码8】 //给boo赋值。

}

else

{

【代码9】 //给boo赋值。

}

} } class Lader {

double above,bottom,height,area;

Lader(double a,double b,double h)

{

【代码10】 //方法体,将参数a,b,c分别赋值给above,bottom,height

}

double getArea()

{

【代码11】 //方法体,,要求计算出area返回

} }

class Circle {

double radius,area;

Circle(double r)

{

【代码12】 //方法体

}

double getArea()

{

【代码13】 //方法体,要求计算出area返回

}

double getLength()

{

【代码14】 //getArea方法体的代码,要求计算出length返回

}

void setRadius(double newRadius)

{

radius=newRadius;

}

double getRadius()

{

return radius;

} } public class AreaAndLength {

public static void main(String args[])

{

double length,area;

Circle circle=null;

Trangle trangle;

Lader lader;

【代码15】 //创建对象circle

【代码16】 //创建对象trangle。

【代码17】 //创建对象lader

【代码18】 // circle调用方法返回周长并赋值给length

System.out.println(”圆的周长:“+length);

【代码19】 // circle调用方法返回面积并赋值给area

System.out.println(”圆的面积:“+area);

【代码20】 // trangle调用方法返回周长并赋值给length

System.out.println(”三角形的周长:“+length);

【代码21】 // trangle调用方法返回面积并赋值给area

System.out.println(”三角形的面积:“+area);

【代码22】 // lader调用方法返回面积并赋值给area

System.out.println(”梯形的面积:“+area);

【代码23】 // trangle调用方法设置三个边,要求将三个边修改为12,34,1。

【代码24】 // trangle调用方法返回面积并赋值给area

System.out.println(”三角形的面积:“+area);

【代码25】 // trangle调用方法返回周长并赋值给length

System.out.println(”三角形的周长:“+length);

} } 实验2 实例成员与类成员

1.答案:

【代码1】: float a;

【代码2】: static float b;

【代码3】: this.a=a;

【代码4】: this.b=b;【代码5】: A.b=100;

【代码6】: A.inputB();

【代码7】: cat.setA(200);【代码8】: cat.setB(400);【代码9】: dog.setA(150);【代码10】:dog.setB(300);【代码11】:cat.inputA();【代码12】:cat.inputB();【代码13】:dog.inputA();【代码14】:dog.inputB();2.模板代码

Example.java class A {

【代码1】

//声明一个float型实例变量a

【代码2】

//声明一个float型类变量b,即static变量b

void setA(float a)

{

【代码3】

//将参数a的值赋值给成员变量a

}

void setB(float b)

{

【代码4】

//将参数b的值赋值给成员变量b

}

float getA()

{

return a;

}

float getB()

{

return b;

}

void inputA()

{

System.out.println(a);

}

static void inputB()

{

System.out.println(b);

} } public class Example {

public static void main(String args[])

{

【代码5】

//通过类名操作类变量b,并赋值100

【代码6】

//通过类名调用方法inputB()

A cat=new A();

A dog=new A();

【代码7】

//cat象调用方法setA(int a)将cat的成员a的值设置为200

【代码8】

//cat调用方法setB(int b)将cat的成员b的值设置为400

【代码9】

//dog象调用方法setA(int a)将dog的成员a的值设置为150

【代码10】

//dog调用方法setB(int b)将dog的成员b的值设置为300

【代码11】

//cat调用inputA()。

【代码12】

//cat调用inputB()。

【代码13】

//dog调用inputA()。

【代码14】

//dog调用inputB()。

} } 实验3 使用package语句与import语句

1.答案:无 2.模板代码

SquareEquation.java package tom.jiafei;public class SquareEquation {

double a,b,c;

double root1,root2;

boolean boo;

public SquareEquation(double a,double b,double c)

{

this.a=a;

this.b=b;

this.c=c;

if(a!=0)

{

boo=true;

}

else

{

boo=false;

}

}

public void getRoots()

{

if(boo)

{

System.out.println(”是一元2次方程“);

double disk=b*b-4*a*c;

if(disk>=0)

{

root1=(-b+Math.sqrt(disk))/(2*a);

root2=(-b-Math.sqrt(disk))/(2*a);

System.out.printf(”方程的根:%f,%fn“,root1,root2);

}

else

{

System.out.printf(”方程没有实根n“);

}

}

else

{

System.out.println(”不是一元2次方程“);

}

}

public void setCoefficient(double a,double b,double c)

{

this.a=a;

this.b=b;

this.c=c;

if(a!=0)

{

boo=true;

}

else

{

boo=false;

}

} } SunRise.java import tom.jiafei.*;class SunRise {

public static void main(String args[ ])

{

SquareEquation equation=new SquareEquation(4,5,1);

equation.getRoots();

equation.setCoefficient(-3,4,5);

equation.getRoots();

} }

上机实践4 继承与接口

实验1 继承

1.答案:

【代码1】:

public void speakHello()

{

System.out.println(”你好,吃饭了吗?“);

}

【代码2】:

public void averageHeight()

{

height=173;

System.out.println(”中国人的平均身高:“+height+”厘米“);

}

【代码3】:

public void averageWeight()

{

weight=67.34;

System.out.println(”中国人的平均体重:“+weight+”公斤“);

}

【代码4】: System.out.println(”坐如钟,站如松,睡如弓“);

【代码5】:

public void speakHello()

{

System.out.println(”How do You do“);

}

【代码6】:

public void averageHeight()

{

height=188;

System.out.println(”Amerian Average height:“+height+” cm“);

}

【代码7】:

public void averageWeight()

{

weight=80.23;

System.out.println(”Amerian Average weight:“+weight+” kg“);

}

【代码8】: System.out.println(”直拳、钩拳“);

【代码9】:

public void speakHello()

{

System.out.println(”您好“);

}

【代码10】:

public void averageHeight()

{

height=16;

System.out.println(”北京人的平均身高:“+height+”厘米“);

}

【代码11】:

public void averageWeight()

{

weight=6;

System.out.println(”北京人的平均体重:“+weight+”公斤“);

}

【代码12】: System.out.println(”京剧术语“);2.模板代码

Example.java class People { protected double weight,height;public void speakHello(){ System.out.println(”yayawawa“);} public void averageHeight(){ height=173;System.out.println(”average height:“+height);} public void averageWeight(){ weight=70;System.out.println(”average weight:“+weight);} } class ChinaPeople extends People { 【代码1】 //重写public void speakHello()方法,要求输出类似“你好,吃了吗”这样的 //汉语信息

【代码2】 //重写public void averageHeight()方法,要求输出类似 //“中国人的平均身高:168.78厘米”这样的汉语信息 【代码3】 //重写public void averageWeight()方法,//要求输出类似“中国人的平均体重:65公斤”这样的汉语信息 public void chinaGongfu(){ 【代码4】//输出中国武术的信息,例如:”坐如钟,站如松,睡如弓“等 } } class AmericanPeople extends People { 【代码5】 //重写public void speakHello()方法,要求输出类似 //“How do you do”这样的英语信息。【代码6】 //重写public void averageHeight()方法 【代码7】 //重写public void averageWeight()方法 public void americanBoxing(){ 【代码8】//输出拳击的信息,例如,“直拳”、“钩拳”等 } } class BeijingPeople extends ChinaPeople { 【代码9】 //重写public void speakHello()方法,要求输出类似“您好”这样的汉语信息

【代码10】 //重写public void averageHeight()方法

【代码11】 //重写public void averageWeight()方法 public void beijingOpera(){ 【代码12】//输出京剧的信息 } } public class Example { public static void main(String args[]){ ChinaPeople chinaPeople=new ChinaPeople();18 AmericanPeople americanPeople=new AmericanPeople();BeijingPeople beijingPeople=new BeijingPeople();chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight();beijingPeople.averageHeight();chinaPeople.averageWeight();americanPeople.averageWeight();beijingPeople.averageWeight();chinaPeople.chinaGongfu();americanPeople.americanBoxing();beijingPeople.beijingOpera();beijingPeople.chinaGongfu();} } 实验2 上转型对象

1.答案:

【代码1】:

public double earnings()

{

return 50000.456;

} 【代码2】:

public double earnings()

{

return 12*2300;

}

【代码3】:

public double earnings()

{

return 52*500;

} 【代码4】:

for(int i=0;i

{

salaries=salaries+employee[i].earnings();

} 2.模板代码

HardWork.java abstract class Employee {

public abstract double earnings();} class YearWorker extends Employee {

【代码1】 //重写earnings()方法 } class MonthWorker extends Employee {

【代码2】 //重写earnings()方法。} class WeekWorker extends Employee {

【代码3】 //重写earnings()方法。} class Company {

Employee[] employee;

double salaries=0;

Company(Employee[] employee)

{

this.employee=employee;

}

public double salariesPay()

{

salaries=0;

【代码4】 //计算salaries。

return salaries;

}

} public class HardWork {

public static void main(String args[])

{

Employee[] employee=new Employee[20];

for(int i=0;i

{

if(i%3==0)

employee[i]=new WeekWorker();

else if(i%3==1)

employee[i]=new MonthWorker();

else if(i%3==2)

employee[i]=new YearWorker();

}

Company company=new Company(employee);

System.out.println(”公司年工资总额:“+company.salariesPay());

} }

实验3 接口回调

1.答案:

【代码1】:

public double computeWeight()

{ return 45.5;

} 【代码2】:

public double computeWeight()

{ return 65.5;

}

【代码3】:

public double computeWeight()

{

return 145;

}

【代码4】:

for(int k=0;k

{

totalWeights=totalWeights+goods[k].computeWeight();

}

2.模板代码

Road.java

interface ComputerWeight {

public double computeWeight();} class Television implements ComputerWeight {

【代码1】 //实现computeWeight()方法。} class Computer implements ComputerWeight {

【代码2】 //实现computeWeight()方法。}

class WashMachine implements ComputerWeight { 【代码3】 //实现computeWeight()方法。} class Car { ComputerWeight[] goods;

double totalWeights=0;

Car(ComputerWeight[] goods)

{

this.goods=goods;

}

public double getTotalWeights()

{

totalWeights=0;

【代码4】 //计算totalWeights

return totalWeights;

}

} public class Road {

public static void main(String args[])

{ ComputerWeight[] goodsOne=new ComputerWeight[50],goodsTwo=new ComputerWeight[22];

for(int i=0;i

{

if(i%3==0)

goodsOne[i]=new Television();

else if(i%3==1)

goodsOne[i]=new Computer();

else if(i%3==2)

goodsOne[i]=new WashMachine();

}

for(int i=0;i

{

if(i%3==0)

goodsTwo[i]=new Television();

else if(i%3==1)

goodsTwo[i]=new Computer();

else if(i%3==2)

goodsTwo[i]=new WashMachine();

}

Car 大货车=new Car(goodsOne);

System.out.println(”大货车装载的货物重量:“+大货车.getTotalWeights());

Car 小货车=new Car(goodsTwo);

System.out.println(”小货车装载的货物重量:“+小货车.getTotalWeights());

} } 上机实践5 字符串、时间与数字

实验1 String类的常用方法

模板代码

StringExample.java class StringExample {

public static void main(String args[])

{

String s1=new String(”you are a student“),s2=new String(”how are you“);

if(【代码1】)// 使用equals方法判断s1与s2是否相同

{

System.out.println(”s1与s2相同“);

}

else

{

System.out.println(”s1与s2不相同“);

}

String s3=new String(”***24“);

if(【代码2】)

//判断s3的前缀是否是“220302”。

{

System.out.println(”吉林省的身份证“);

}

String s4=new String(”你“),s5=new String(”我“);

if(【代码3】)//按着字典序s4大于s5的表达式。

{

System.out.println(”按字典序s4大于s5“);

}

else

{

System.out.println(”按字典序s4小于s5“);

}

int position=0;

String path=”c:javajspA.java“;

position=【代码5】 //获取path中最后出现目录分隔符号的位置

System.out.println(”c:javajspA.java中最后出现的位置:“+position);

String fileName=【代码6】//获取path中“A.java”子字符串。

System.out.println(”c:javajspA.java中含有的文件名:“+fileName);

String s6=new String(”100“),s7=new String(”123.678“);

int n1=【代码7】

//将s6转化成int型数据。

double n2=【代码8】

//将s7转化成double型数据。

double m=n1+n2;

System.out.println(m);

String s8=【代码9】 //String调用valuOf(int n)方法将m转化为字符串对象

position=s8.indexOf(”.“);

String temp=s8.substring(position+1);

System.out.println(”数字“+m+”有“+temp.length()+”位小数“);

String s9=new String(”ABCDEF“);

char a[]=【代码10】

//将s8存放到数组a中。

for(int i=a.length-1;i>=0;i--)

{

System.out.print(” “+a[i]);

}

} } 实验2 比较日期的大小

模板代码 DateExample import java.util.*;import javax.swing.JOptionPane;public class DateExample {

public static void main(String args[ ])

{

String str=JOptionPane.showInputDialog(”输入第一个日期的年份:“);

int yearOne=Integer.parseInt(str);

str=JOptionPane.showInputDialog(”输入该年的月份:“);

int monthOne=Integer.parseInt(str);

str=JOptionPane.showInputDialog(”输入该月份的日期:“);

int dayOne=Integer.parseInt(str);

str=JOptionPane.showInputDialog(”输入第二个日期的年份:“);

int yearTwo=Integer.parseInt(str);

str=JOptionPane.showInputDialog(”输入该年的月份:“);

int monthTwo=Integer.parseInt(str);

str=JOptionPane.showInputDialog(”输入该月份的日期:“);

int dayTwo=Integer.parseInt(str);

Calendar calendar=【代码1】

//初始化日历对象

【代码2】

//将calendar的时间设置为yearOne年monthOne月dayOne日

long timeOne=【代码3】

//calendar表示的时间转换成毫秒

【代码4】

//将calendar的时间设置为yearTwo年monthTwo月dayTwo日

long timeTwo=【代码5】

//calendar表示的时间转换成毫秒。

Date date1=【代码6】

// 用timeOne做参数构造date1

Date date2=【代码7】

// 用timeTwo做参数构造date2

if(date2.equals(date1))

{

System.out.println(”两个日期的年、月、日完全相同“);

}

else if(date2.after(date1))

{

System.out.println(”您输入的第二个日期大于第一个日期“);

}

else if(date2.before(date1))

{

System.out.println(”您输入的第二个日期小于第一个日期“);

}

long days=【代码8】//计算两个日期相隔天数

System.out.println(yearOne+”年“+monthOne+”月“+dayOne+”日和“

+yearTwo+”年“+monthTwo+”月“+dayTwo+”相隔“+days+”天“);

}

} 实验3 处理大整数

模板代码

BigintegerExample import java.math.*;class BigIntegerExample { public static void main(String args[]){ BigInteger n1=new BigInteger(”***321987654321“), n2=new BigInteger(”***789123456789“), result=null;result=【代码1】//n1和n2做加法运算 System.out.println(”和:“+result.toString());result=【代码2】//n1和n2做减法运算 System.out.println(”差:“+result.toString());result=【代码3】//n1和n2做乘法运算 System.out.println(”积:“+result.toString());result=【代码4】//n1和n2做除法运算 System.out.println(”商:“+result.toString());BigInteger m=new BigInteger(”1968957“), COUNT=new BigInteger(”0“), ONE=new BigInteger(”1“), TWO=new BigInteger(”2“);System.out.println(m.toString()+”的因子有:“);for(BigInteger i=TWO;i.compareTo(m)<0;i=i.add(ONE)){ if((n1.remainder(i).compareTo(BigInteger.ZERO))==0){ COUNT=COUNT.add(ONE);System.out.print(” “+i.toString());} } System.out.println(”“);System.out.println(m.toString()+”一共有“+COUNT.toString()+”个因子“);} } 上机实践6 组件及事件处理

实验1 算术测试

模板代码 Teacher.java public class Teacher { int numberOne,numberTwo;String operator=”“;boolean right;public int giveNumberOne(int n){ numberOne=(int)(Math.random()*n)+1;return numberOne;} public int giveNumberTwo(int n){ numberTwo=(int)(Math.random()*n)+1;return numberTwo;} public String giveOperator(){ double d=Math.random();if(d>=0.5)operator=”+“;else operator=”-“;return operator;} public boolean getRight(int answer){ if(operator.equals(”+“))26 { if(answer==numberOne+numberTwo)right=true;else right=false;} else if(operator.equals(”-“)){ if(answer==numberOne-numberTwo)right=true;else right=false;} return right;} } ComputerFrame.java import java.awt.*;import java.awt.event.*;public class ComputerFrame extends Frame implements ActionListener { TextField textOne,textTwo,textResult;Button getProblem,giveAnwser;Label operatorLabel,message;Teacher teacher;ComputerFrame(String s){ super(s);teacher=new Teacher();setLayout(new FlowLayout());textOne=【代码1】 //创建textOne,其可见字符长是10 textTwo=【代码2】 //创建textTwo,其可见字符长是10 textResult=【代码3】 //创建textResult,其可见字符长是10 operatorLabel=new Label(”+“);message=new Label(”你还没有回答呢“);getProblem=new Button(”获取题目“);giveAnwser=new Button(”确认答案“);add(getProblem);add(textOne);add(operatorLabel);add(textTwo);add(new Label(”=“));add(textResult);add(giveAnwser);add(message);textResult.requestFocus();textOne.setEditable(false);textTwo.setEditable(false);【代码4】//将当前窗口注册为getProblem的ActionEvent事件监视器 【代码5】//将当前窗口注册为giveAnwser的ActionEvent事件监视器

【代码6】//将当前窗口注册为textResult的ActionEvent事件监视器 setBounds(100,100,450,100);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ if(【代码7】)//判断事件源是否是getProblem { int number1=teacher.giveNumberOne(100);int number2=teacher.giveNumberTwo(100);String operator=teacher.givetOperator();textOne.setText(”“+number1);textTwo.setText(”“+number2);operatorLabel.setText(operator);message.setText(”请回答“);textResult.setText(null);} if(【代码8】)//判断事件源是否是giveAnwser { String answer=textResult.getText();try{ int result=Integer.parseInt(answer);if(teacher.getRight(result)==true){ message.setText(”你回答正确“);} else { message.setText(”你回答错误“);} } catch(NumberFormatException ex){ message.setText(”请输入数字字符“);} } textResult.requestFocus();validate();} }

MainClass.java public class MainClass { public static void main(String args[]){ ComputerFrame frame;frame=【代码9】//创建窗口,其标题为:算术测试 } } 实验2 信号灯

2.模板代码

SignalCanvas.java import java.awt.*;public class SignalCanvas extends Canvas { int red,green,yellow,x,y,r;SignalCanvas(){ setBackground(Color.white);} public void setRed(int r){ red=r;} public void setGreen(int g){ green=g;} public void setYellow(int y){ yellow=y;} public void setPosition(int x,int y){ this.x=x;this.y=y;} public void setRadius(int r){ this.r=r;} public void paint(Graphics g){ if(red==1){ g.setColor(Color.red);} else if(green==1){ g.setColor(Color.green);} else if(yellow==1){ g.setColor(Color.yellow);} g.fillOval(x,y,2*r,2*r);} } SignalFrame.java import java.awt.*;import java.applet.*;import java.awt.event.*;public class SignalFrame extends Frame implements ItemListener { Choice choice;SignalCanvas signal=null;String itemRed=”红灯“,itemYellow=”黄灯“,itemGreen=”绿灯“;public SignalFrame(){ choice=【代码1】 //创建choice 【代码2】 //创建choice添加itemRed 【代码3】 //创建choice添加itemYellow 【代码4】 //创建choice添加itemGreen 【代码5】

//将当前窗口注册为choice的ItemEvent事件监视器 add(choice,BorderLayout.NORTH);try{ Class cs=Class.forName(”SignalCanvas“);signal=(SignalCanvas)cs.newInstance();add(signal,BorderLayout.CENTER);} catch(Exception e){ add(new Label(”您还没有编写SignalCanvas类“),BorderLayout.CENTER);} setBounds(100,100,360,300);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void itemStateChanged(ItemEvent e){ String item= 【代码6】

// choice返回被选中的条目 int w=signal.getBounds().width;int h=signal.getBounds().height;int m=Math.min(w,h);signal.setRadius(m/6);if(item.equals(itemRed)){ if(signal!=null){ signal.setRed(1);signal.setYellow(0);signal.setGreen(0);signal.setPosition(w/3,0);signal.repaint();} } else if(item.equals(itemYellow)){ if(signal!=null){ signal.setRed(0);signal.setYellow(1);signal.setGreen(0);signal.setPosition(w/3,h/3);signal.repaint();} } else if(item.equals(itemGreen)){ if(signal!=null){ signal.setRed(0);signal.setYellow(0);signal.setGreen(1);signal.setPosition(w/3,2*h/3);signal.repaint();} } } } SignalMainClass.java public class SignalMainClass { public static void main(String args[]){ SignalFrame frame;frame=new SignalFrame();frame.setTitle(”信号灯“);} } 实验3 布局与日历

1.答案:

【代码1】:

pCenter.setLayout(new GridLayout(7,7));【代码2】:

pCenter.add(titleName[i]);

【代码3】:

pCenter.add(labelDay[i]);

【代码4】:

add(scrollPane,BorderLayout.CENTER);31

【代码5】:

add(pNorth,BorderLayout.NORTH);

【代码6】:

add(pSouth,BorderLayout.SOUTH);

2.模板代码

CalendarBean.java import java.util.Calendar;public class CalendarBean

{

String day[];

int year=2005,month=0;

public void setYear(int year)

{

this.year=year;

}

public int getYear()

{

return year;

}

public void setMonth(int month)

{

this.month=month;

}

public int getMonth()

{

return month;

}

public String[] getCalendar()

{

String a[]=new String[42];

Calendar 日历=Calendar.getInstance();

日历.set(year,month-1,1);

int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;

int day=0;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

{ day=31;

}

if(month==4||month==6||month==9||month==11)

{ day=30;

}

if(month==2)

{ if(((year%4==0)&&(year%100!=0))||(year%400==0))

{

day=29;

}

else

{

day=28;

}

}

for(int i=星期几,n=1;i<星期几+day;i++)

{

a[i]=String.valueOf(n);

n++;

}

return a;

} } CalendarFrame.java import java.util.*;import java.awt.*;import java.awt.event.*;import java.applet.*;public class CalendarFrame extends Frame implements ActionListener {

Label labelDay[]=new Label[42];

Button titleName[]=new Button[7];

String name[]={”日“,”一“,”二“,”三“, ”四“,”五“,”六“};

Button nextMonth,previousMonth;

int year=2006,month=10;

CalendarBean calendar;

Label showMessage=new Label(”“,Label.CENTER);

public CalendarFrame()

{ Panel pCenter=new Panel();

【代码1】 //将pCenter的布局设置为7行7列的GridLayout 布局。

for(int i=0;i<7;i++)

{ titleName[i]=new Button(name[i]);

【代码2】//pCenter添加组件titleName[i]。

}

for(int i=0;i<42;i++)

{

labelDay[i]=new Label(”“,Label.CENTER);

【代码3】//pCenter添加组件labelDay[i]。

}

calendar=new CalendarBean();

calendar.setYear(year);

calendar.setMonth(month);

String day[]=calendar.getCalendar();

for(int i=0;i<42;i++)

{ labelDay[i].setText(day[i]);

}

nextMonth=new Button(”下月“);

previousMonth=new Button(”上月“);

nextMonth.addActionListener(this);

previousMonth.addActionListener(this);

Panel pNorth=new Panel(),pSouth=new Panel();33

pNorth.add(previousMonth);

pNorth.add(nextMonth);

pSouth.add(showMessage);

showMessage.setText(”日历:“+calendar.getYear()+”年“+ calendar.getMonth()+”月“);

ScrollPane scrollPane=new ScrollPane();

scrollPane.add(pCenter);

【代码4】// 窗口添加scrollPane在中心区域

【代码5】// 窗口添加pNorth 在北面区域

【代码6】// 窗口添加pSouth 在南区域。

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==nextMonth)

{ month=month+1;

if(month>12)

month=1;

calendar.setMonth(month);

String day[]=calendar.getCalendar();

for(int i=0;i<42;i++)

{ labelDay[i].setText(day[i]);

}

}

else if(e.getSource()==previousMonth)

{ month=month-1;

if(month<1)

month=12;

calendar.setMonth(month);

String day[]=calendar.getCalendar();

for(int i=0;i<42;i++)

{ labelDay[i].setText(day[i]);

}

}

showMessage.setText(”日历:“+calendar.getYear()+”年“+calendar.getMonth()+”月“);

} }

CalendarMainClass.java public class CalendarMainClass { public static void main(String args[])

{

CalendarFrame frame=new CalendarFrame();

frame.setBounds(100,100,360,300);

frame.setVisible(true);

frame.validate();

frame.addWindowListener(new java.awt.event.WindowAdapter()34

{ public void windowClosing(java.awt.event.WindowEvent e)

{ System.exit(0);

}

});

} }

上机实践7 组件及事件处理2 实验1 方程求根

1.答案:

【代码1】:

controlButton.addActionListener(this);;【代码2】:

textA.getText()

【代码3】:

textB.getText()

【代码4】:

textC.getText()

2.模板代码

SquareEquation.java public class SquareEquation { double a,b,c;double root1,root2;public void setA(double a){ this.a=a;} public void setB(double b){ this.b=b;} public void setC(double c){ this.c=c;} public double getRootOne()throws NoRealRootException,NoSquareEquationException { if(a!=0){ double disk=b*b-4*a*c;if(disk>=0){ root1=(-b+Math.sqrt(disk))/(2*a);} else { throw new NoRealRootException(”没有实根“);35 } } else { throw new NoRealRootException(”不是二次方程“);} return root1;} public double getRootTwo()throws NoRealRootException,NoSquareEquationException { if(a!=0){ double disk=b*b-4*a*c;if(disk>=0){ root2=(-b-Math.sqrt(disk))/(2*a);} else { throw new NoRealRootException(”没有实根“);} } else { throw new NoRealRootException(”不是二次方程“);} return root2;} } class NoRealRootException extends Exception { String message;NoRealRootException(String s){ message=s;} public String getMessage(){ return message;} } class NoSquareEquationException extends Exception { String message;NoSquareEquationException(String s){ message=s;} public String getMessage(){ return message;} } EquationFrame.java

import java.awt.*;import java.awt.event.*;public class EquationFrame extends Frame implements ActionListener { SquareEquation equation;TextField textA,textB,textC;TextArea showRoots;Button controlButton;public EquationFrame(){ equation=new SquareEquation();textA=new TextField(8);textB=new TextField(8);textC=new TextField(8);showRoots=new TextArea();controlButton=new Button(”确定“);Panel pNorth=new Panel();pNorth.add(new Label(”二次项系数:“));pNorth.add(textA);pNorth.add(new Label(”一次项系数:“));pNorth.add(textB);pNorth.add(new Label(”常数项系数:“));pNorth.add(textC);pNorth.add(controlButton);【代码1】 //当前窗口作为controlButton的ActionEvent事件的监视器 add(pNorth,BorderLayout.NORTH);add(showRoots,BorderLayout.CENTER);setBounds(100,100,630,160);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ try{ double a=Double.parseDouble(【代码2】);//textA调用方法获取其中的文本

double b=Double.parseDouble(【代码3】);//textB调用方法获取其中的文本

double c=Double.parseDouble(【代码4】);// textC调用方法获取其中的文本

equation.setA(a);equation.setB(b);equation.setC(c);textA.setText(”“+a);37 textB.setText(”“+b);textC.setText(”“+c);showRoots.append(”n 根:“+equation.getRootOne());showRoots.append(” 根:“+equation.getRootTwo());} catch(Exception ex){ showRoots.append(”n“+ex+”n“);} } } EquationMainClass.java public class EquationMainClass { public static void main(String args[]){ EquationFrame frame=new EquationFrame();} } 实验2 字体对话框

1.答案:

【代码1】:

setModal(true);

【代码2】:

setVisible(false);

【代码3】:

setVisible(false);

【代码4】:

new FontDialog(this);【代码5】:

setVisible(true);【代码6】:

dialog.setTitle(”字体对话框“);

2.模板代码

FontFamilyNames.java import java.awt.GraphicsEnvironment;public class FontFamilyNames { String fontName[];public String [] getFontName(){ GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();fontName=ge.getAvailableFontFamilyNames();return fontName;} } FontDialog.java import java.awt.event.*;import java.awt.*;import javax.swing.JLabel;

public class FontDialog extends Dialog implements ItemListener,ActionListener { FontFamilyNames fontFamilyNames;int fontSize=38;String fontName;Choice fontNameList;JLabel label;Font font;Button yes,cancel;static int YES=1,NO=0;int state=-1;FontDialog(Frame f){ super(f);fontFamilyNames=new FontFamilyNames();【代码1】 //对话框设置为有模式 yes=new Button(”Yes“);cancel=new Button(”cancel“);yes.addActionListener(this);cancel.addActionListener(this);label=new JLabel(”hello,奥运“,JLabel.CENTER);fontNameList=new Choice();String name[]=fontFamilyNames.getFontName();for(int k=0;k

label.setFont(font);label.repaint();validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==yes){ state=YES;【代码2】 //对话框设置为不可见 } else if(e.getSource()==cancel){ state=NO;【代码3】 //对话框设置为不可见 } } public int getState(){ return state;} public Font getFont(){ return font;} }

FrameHaveDialog.java import java.awt.event.*;import java.awt.*;import javax.swing.JTextArea;public class FrameHaveDialog extends Frame implements ActionListener { JTextArea text;Button buttonFont;FrameHaveDialog(){ buttonFont=new Button(”设置字体“);text=new JTextArea(”Java 2实用教程(第三版)“);buttonFont.addActionListener(this);add(buttonFont,BorderLayout.NORTH);add(text);setBounds(60,60,300,300);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} 40 public void actionPerformed(ActionEvent e){ if(e.getSource()==buttonFont){ FontDialog dialog=【代码4】 //创建对话框

【代码5】 //对话框设置为可见

【代码6】 //对话框设置设置标题为“字体对话框” if(dialog.getState()==FontDialog.YES){ text.setFont(dialog.getFont());text.repaint();} if(dialog.getState()==FontDialog.NO){ text.repaint();} } } } FontDialogMainClass.java public class FontDialogMainClass { public static void main(String args[]){ new FrameHaveDialog();} } 实验3 英语单词拼写训练

1.答案:

【代码1】: addFocusListener(this);

【代码2】:

addMouseListener(this);

【代码3】:

label[k].addKeyListener(this);

【代码4】:

e.getKeyCode()==KeyEvent.VK_LEFT 【代码5】:

e.getKeyCode()==KeyEvent.VK_RIGHT 2.模板代码

RondomString.java public class RondomString { String str=”“;public String getRondomString(String s){ StringBuffer strBuffer=new StringBuffer(s);int m=strBuffer.length();for(int k=0;k

strBuffer=strBuffer.deleteCharAt(index);} return str;} } LetterLabel.java

import java.awt.*;import java.awt.event.*;public class LetterLabel extends Button implements FocusListener,MouseListener { LetterLabel(){ 【代码1】 //将当前对象注册为自身的焦点视器 【代码2】 //将当前对象注册为自身的标监视器 setBackground(Color.cyan);setFont(new Font(”“,Font.BOLD,30));} public static LetterLabel[] getLetterLabel(int n){ LetterLabel a[]=new LetterLabel[n];for(int k=0;k

import java.awt.*;import java.awt.event.*;import javax.swing.Box;

public class SpellingWordFrame extends Frame implements KeyListener,ActionListener { TextField inputWord;Button button;LetterLabel label[];Panel northP,centerP;Box wordBox;String hintMessage=”用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词“;Label messaageLabel=new Label(hintMessage);String word=”“;SpellingWordFrame(){ inputWord=new TextField(12);button=new Button(”确定“);button.addActionListener(this);inputWord.addActionListener(this);northP=new Panel();northP.add(new Label(”输入一个英文单词:“));northP.add(inputWord);northP.add(button);centerP=new Panel();wordBox=Box.createHorizontalBox();centerP.add(wordBox);add(northP,BorderLayout.NORTH);add(centerP,BorderLayout.CENTER);add(messaageLabel,BorderLayout.SOUTH);setBounds(100,100,350,180);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ word=inputWord.getText();int n=word.length();RondomString rondom=new RondomString();String randomWord=rondom.getRondomString(word);wordBox.removeAll();messaageLabel.setText(hintMessage);if(n>0){ label=LetterLabel.getLetterLabel(n);for(int k=0;k

{ 【代码3】 //将当前窗口注册为label[k]的键盘监视器 label[k].setText(”“+randomWord.charAt(k));wordBox.add(label[k]);} validate();inputWord.setText(null);label[0].requestFocus();} } public void keyPressed(KeyEvent e){ LetterLabel sourceLabel=(LetterLabel)e.getSource();int index=-1;if(【代码4】)//判断按下的是否是←键){ for(int k=0;k

{ String success=”“;for(int k=0;k

WordMainClass.java public class WordMainClass { public static void main(String args[]){ new SpellingWordFrame();} } 上机实践8 多线程

实验1 汉字打字练习

1.答案:

【代码1】:

sleep(6000);

【代码2】:

WordThread giveWord;

【代码3】:

giveWord=new WordThread(wordLabel);

【代码4】:

giveWord.isAlive()

【代码5】:

giveWord.start();

2.模板代码

WordThread.java

import java.awt.*;public class WordThread extends Thread { char word;int k=19968;45

Label com;WordThread(Label com){ this.com=com;} public void run(){ k=19968;while(true){ word=(char)k;com.setText(”“+word);try{ 【代码1】//调用sleep方法使得线程中断6000豪秒 } catch(InterruptedException e){} k++;if(k>=29968)k=19968;} } } ThreadFrame.java

import java.awt.*;import java.awt.event.*;public class ThreadFrame extends Frame implements ActionListener { Label wordLabel;Button button;TextField inputText,scoreText;【代码2】//用WordThread声明一个giveWord对象 int score=0;ThreadFrame(){ wordLabel=new Label(” “,Label.CENTER);wordLabel.setFont(new Font(”“,Font.BOLD,72));button=new Button(”开始“);inputText=new TextField(3);scoreText=new TextField(5);scoreText.setEditable(false);【代码3】//创建giveWord,将wordLabel传递给WordThread构造方法的参数 button.addActionListener(this);inputText.addActionListener(this);add(button,BorderLayout.NORTH);add(wordLabel,BorderLayout.CENTER);Panel southP=new Panel();southP.add(new Label(”输入标签所显示的汉字后回车:“));southP.add(inputText);southP.add(scoreText);

add(southP,BorderLayout.SOUTH);setBounds(100,100,350,180);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ if(!(【代码4】))//giveWord调用方法isAlive(){ giveWord=new WordThread(wordLabel);} try { 【代码5】//giveWord调用方法start()} catch(Exception exe){} } else if(e.getSource()==inputText){ if(inputText.getText().equals(wordLabel.getText())){ score++;} scoreText.setText(”得分:"+score);inputText.setText(null);} } } WordThread.java

public class ThreadWordMainClass { public static void main(String args[]){ new ThreadFrame();}

实验2 旋转的行星

1.答案:

【代码1】:

Thread moon;

【代码2】:

thread=new Thread(this);

【代码3】:

Thread.sleep(10);

【代码4】:

Thread rotate;【代码5】:

rotate.start();

2.模板代码

Mycanvas.java

import java.awt.*;public class Mycanvas extends Canvas { int r;Color c;public void setColor(Color c){ this.c=c;} public void setR(int r){ this.r=r;} public void paint(Graphics g){ g.setColor(c);g.fillOval(0,0,2*r,2*r);} public int getR(){ return r;} } Planet.java

import java.awt.*;public class Planet extends Panel implements Runnable { 【代码1】 //用Thread类声明一个moon对象 Mycanvas yellowBall;double pointX[]=new double[360], pointY[]=new double[360];//用来表示画布左上角端点坐标的数组 int w=100,h=100;int radius=30;Planet(){ setSize(w,h);setLayout(null);yellowBall=new Mycanvas();yellowBall.setColor(Color.yellow);add(yellowBall);yellowBall.setSize(12,12);yellowBall.setR(12/2);pointX[0]=0;48 pointY[0]=-radius;double angle=1*Math.PI/180;//刻度为1度

for(int i=0;i<359;i++)//计算出数组中各个元素的值

{ pointX[i+1]=pointX[i]*Math.cos(angle)-Math.sin(angle)*pointY[i];pointY[i+1]=pointY[i]*Math.cos(angle)+pointX[i]*Math.sin(angle);

} for(int i=0;i<360;i++){ pointX[i]=pointX[i]+w/2;//坐标平移 pointY[i]=pointY[i]+h/2;} yellowBall.setLocation((int)pointX[0]-yellowBall.getR(),(int)pointY[0]-yellowBall.getR());【代码2】 //创建 moon线程,当前面板做为该线程的目标对象 } public void start(){ try{ moon.start();}

catch(Exception exe){} } public void paint(Graphics g){ g.setColor(Color.blue);g.fillOval(w/2-9,h/2-9,18,18);} public void run(){ int i=0;while(true){ i=(i+1)%360;yellowBall.setLocation((int)pointX[i]-yellowBall.getR(),(int)pointY[i]-yellowBall.getR());try{ 【代码3】 // Thread类调用类方法sleep使得线程中断10豪秒 } catch(InterruptedException e){} } } } HaveThreadFrame.java

import java.awt.*;import java.awt.event.*;public class HaveThreadFrame extends Frame implements Runnable { 【代码4】 //用Thread类声明一个rotate对象 Planet earth;double pointX[]=new double[360], pointY[]=new double[360];int width,height;

int radius=120;HaveThreadFrame(){ rotate=new Thread(this);earth=new Planet();setBounds(0,0,360,400);width=getBounds().width;height=getBounds().height;pointX[0]=0;pointY[0]=-radius;double angle=1*Math.PI/180;for(int i=0;i<359;i++){ pointX[i+1]=pointX[i]*Math.cos(angle)-Math.sin(angle)*pointY[i];pointY[i+1]=pointY[i]*Math.cos(angle)+pointX[i]*Math.sin(angle);} for(int i=0;i<360;i++){ pointX[i]=pointX[i]+width/2;pointY[i]=pointY[i]+height/2;} setLayout(null);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });add(earth);earth.setLocation((int)pointX[0]-earth.getSize().width/2,(int)pointY[0]-earth.getSize().height/2);earth.start();【代码5】 //用rotate调用start方法 } public void run(){ int i=0;while(true){ i=(i+1)%360;earth.setLocation((int)pointX[i]-earth.getSize().width/2,(int)pointY[i]-earth.getSize().height/2);try{ Thread.sleep(100);} catch(InterruptedException e){} } }

第五篇: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程序设计实验5篇word格式文档
下载Java程序设计实验5篇.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Java程序设计教案

    Java程序设计 第一讲 绪论 一、安装netbean系统 二、hello world 典型程序结构中各部分的说明: /* * To change this template, choose Tools | Templates * and open the......

    java程序设计教案(★)

    课程教案 (理论教学) 课程名称: Java程序设计 课程类型:( 2 )1、必修;2、选修;3、其它 授课对象: 专业(本科) 级 班 授课时间: 至 学年第 学期 计划学时: 学时(其中:理论 ,实验: ) 任课教师......

    Java程序设计报告

    楚雄师范学院 2015年春季期末Java程序设计报告 项目名称:基于Java平台开发的五子棋程序设计 学 院: 物理与电子科学学院 专 业:电子信息科学与技术 班 级:2 0 1 3 级 电 信 一......

    实验12:Java高级IO流程序设计

    实验12:Java高级I/O流程序设计 实验时间:实验地点: 一、实验目的及要求 (1)掌握文件类File的使用。 (2)理解随机存取文件类RandomAccessFile的使用。 二、实验设备环境及要求三、实......

    《Java语言程序设计》自考实验指导资料new

    自考《Java语言程序设计》实践教学大纲 目录 一、课程编号................................................................................................................

    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程序设计实验报告 实验一 实验题目:从键盘上读入10个字符串存入数组a中,然后输出这10个字符串中最大字符串和最小字符串。 实验代码: public class StrPro { public stati......