资源描述
Java面向对象程序设计
试验指导书
适用专业:计算机网络技术
执 笔 人:周辉奎
南昌工学院信息学院 编
二〇一三年十月
目 录
试验项目一 Java开发环境搭建 1
试验项目二 Java语言基础 8
试验项目三 Java语言面向对象基础 21
试验项目四 图形用户界面设计 39
试验项目五 异常处理 44
试验项目一 Java开发环境搭建
一、试验目标和要求:
(一)目标:
1、熟悉安装JDK、JRE;
2、熟悉环境变量配置;
3、熟悉Eclipse;
4、掌握命令提醒符运行第一个java程序。
(二)要求:
1、认真做好试验前各项准备工作,熟悉试验内容和机器操作步骤。
2、遵守试验室规章制度和试验课堂教学纪律。
3、认真完成试验任务,填写试验汇报。
二、试验时数:2课时
三、试验器材:
操作系统:Windows XP操作系统
应用系统:Eclipse
四、试验内容或步骤:
试验1.1 Java开发环境搭建
1、Java JDK安装
单击Java JDK安装包,然后弹出提醒框,点击下一步,直到选择安装目录图1所表示,将安装目录放在E:\Java\jdk1.6.0_35\,然后继续下一步。
图1 设定JDK安装目录
JDK(Java开发工具)安装完成后,系统会自动安装JRE(Java 运行时环境),更改JRE安装目录,将其和JDK放在同一目录下,图2所表示。
图2 设定JRE安装目录
安装完成后,出现图2所表示界面。
图3 Java环境安装结束界面
2、配置环境变量
Java JDK安装完成后,并不能立即使用,还需要配置相关环境变量。右键单击我电脑à属性弹出以下对话框,选择高级à环境变量。
图4 系统高级属性对话框
首先,在系统变量中新建一个JAVA_HOME变量,该变量值为JDK安装目录。在此为E:\Java\jdk1.6.0_35\。(和前面安装时指定目录一致)
图4 JAVA_HOME环境变量设置
注意:变量值后不需要加任何符号。
然后在系统变量中查找path变量,假如存在,则将JDK安装目录下bin文件夹添加其后,多个目录以分号隔开,图5所表示。假如不存在则新建一个,然后将bin目录放进去即可是E:\Java\jdk1.6.0_35\bin;
图5 在path变量中添加Java bin目录
新建classpath环境变量,该变量值为JDK安装目录下lib目录,在此为:;%JAVA_HOME%\lib。图6所表示。
图6 classpath环境变量设定
配置完成后,单击开始à运行,输入cmd,图7所表示,确定,打开命令行窗口。
图7 打开命令行窗口命令
在命令行窗口中输入java –version命令,显示安装Java 版本信息,图8所表示,则表明java JDK、 JRE安装成功。
图8 Java JDK、 JRE安装测试结果
在命令行窗口中输入javac命令,显示安装javac一系列选项参数,图9所表示,则表明java开发环境搭建成功。
图9 Java环境测试结果
【附录】利用命令提醒符来运行Java程序:
1、假设在F盘文件夹javaexe有HelloWorld.java文件。
【操作步骤】开始——运行——cmd,一步步按以下输入(注意:类名和编译文件名必需大小写一致)
说明:
javac命令表示编译;
java命令表示运行。
【总结】开发Java程序之前JDK、JRE安装及环境配置
一、先安装JDK、JRE,安装时必需全部在同一个目录,假设在E:\Java\jdk1.6.0_35\。
安装完,用命令提醒符测试安装是否正确。
开始——运行——cmd—— java –version,假如显示JDK版本,则安装正确。
二、配置环境变量
1、右击我电脑à属性,选高级à环境变量。
2、在系统变量中新建一个变量名为JAVA_HOME,变量值为 E:\Java\jdk1.6.0_35\
3、在系统变量中查找path变量,假如存在,则将JDK安装目录下bin文件夹添加其后,多个目录以分号隔开,E:\Java\jdk1.6.0_35\bin;
4、新建classpath环境变量,变量值为 ;%JAVA_HOME%\lib
环境变量配置完,用命令提醒符测试配置是否正确。
开始——运行——cmd—— javac,假如显示javac一系列选项参数,则表明java开发环境搭建成功。
五、注意事项:
1、注意使用javac命令编译源程序。
2、注意使用java命令运行程序。
六、练习项目及思索题:
1、怎样搭建java开发环境。
试验项目二 Java语言基础
一、试验目标和要求:
(一)目标:
1、 了解Java 数据类型;
2、 掌握多种变量申明方法;
3、 了解运算符优先级;
4、 掌握Java 基础数据类型、运算符和表示式、数组使用方法;
5、 了解Java 程序语法结构,掌握次序结构、选择结构和循环结构语法程序设计方法;
6、 经过以上内容,掌握Java 语言编程规则。
(二)要求:
1、编写一个申明Java 不一样数据类型变量程序;
2、编写一个使用运算符、表示式、变量程序;
3、编写一个使用Java 数组程序;
4、编写表示式语句、复合语句程序;
5、编写使用不一样选择结构程序;
6、编写使用不一样循环结构结构程序。
二、试验时数:6课时
三、试验器材:
操作系统:Windows XP操作系统
应用系统:Eclipse
四、试验内容或步骤:
1、 试验2.1申明不一样数据类型变量
(1) 编写申明不一样数据类型变量程序文件EXP2_1.java,源代码以下。
public class EXP2_1 {
public static void main(String args[]) {
byte b=0x55;
short s=0x55ff;
int i=1000000;
long l=0xffffL;
char c='a';
float f=0.23F;
double d=0.7E-3;
boolean B=true;
String S="这是字符串类数据类型";
System.out.println("字节型变量 b = "+b);
System.out.println("短整型变量 s = "+s);
System.out.println(" 整型变量 i = "+i);
System.out.println("长整型变量 l = "+l);
System.out.println("字符型变量 c = "+c);
System.out.println("浮点型变量 f = "+f);
System.out.println("双精度变量 d = "+d);
System.out.println("布尔型变量 B = "+B);
System.out.println("字符串类对象 S = "+S);
}
}
(2) 编译并运行该程序,结果图2.1 所表示。
图 2.1
2、 了解变量使用范围
(1) 建立EXP2_2.java 文件,经过本程序了解变量使用范围,源代码以下。
public class EXP2_2 {
static int i=10;
public static void main(String args[]) {
{
int k=10;
System.out.println("i="+i);
System.out.println("k="+k);
}
System.out.println("i="+i);
System.out.println("k="+k);//编译时将犯错,已出k使用范围
}
}
(2) 编译EXP2_2.java
此时会出现错误提醒图2.2 所表示。因为变量k 在方法块中申明,在方法块之外它是不存在,所以编译时会犯错。
图 2.2
(3) 修改上面程序
(4) 成功运行该程序
思索:EXP2_2.java 程序说明了什么问题?
3、 使用关系运算符和逻辑运算符
(1) 建立使用关系运算符和逻辑运算符程序文件,源代码以下。
class EXP2_3 {
public static void main(String args[]) {
int a=25, b=20, e=3, f=0;
boolean d=a<b;
System.out.println("a=25,b=20,e=3,f=0");
System.out.println("因为关系表示式 a<b 为假,所以其逻辑值为 : "+d);
if (e!=0 && a/e>5)
System.out.println("因为e 非0 且a/e 为8 大于5,所以输出 a/e= "+a/e);
if (f!=0 && a/f>5)
System.out.println("a/f = "+a/f);
else
System.out.println("因为f 值为0,所以输出 f = "+f);
}
}
(2) 编译并运行该程序,结果图2.3 所表示。
图 2.3
4、 使用数组
(1) 建立使用数组程序,本程序建立了一个长度为5 1 维数组,一个长度为12 2 维数组,源代码以下。
public class EXP2_4 {
public static void main(String args[]) {
int a[]=new int[5];
int arr1[][]=new int[3][4];
a[0]=10;
a[1]=10+a[0];
a[2]=30;
a[3]=40;
a[4]= a[1]+ a[2];
arr1[0][0]=0; arr1[0][1]=1; arr1[0][2]=2;
arr1[1][0]=3; arr1[1][1]=4; arr1[1][2]=5;
arr1[2][0]=6; arr1[2][1]=7; arr1[2][2]=8;
System.out.println("a["+0+"] = "+a[0]);
System.out.println("a["+1+"] = "+a[1]);
System.out.println("a["+2+"] = "+a[2]);
System.out.println("a["+3+"] = "+a[3]);
System.out.println("a["+4+"] = "+a[4]);
System.out.println("arr1("+0+","+0+") = "+arr1[0][0]);
System.out.println("arr1("+0+","+1+") = "+arr1[0][1]);
System.out.println("arr1("+0+","+2+") = "+arr1[0][2]);
System.out.println("arr1("+1+","+0+") = "+arr1[1][0]);
System.out.println("arr1("+1+","+1+") = "+arr1[1][1]);
System.out.println("arr1("+1+","+2+") = "+arr1[1][2]);
}
}
(2) 编译并运行程序,结果图2.4 所表示。
图 2.4
5、 使用表示式语句和复合语句
(1) 建立包含表示式语句程序,源代码以下。
class EXP2_5{
public static void main(String[] args) {
int k, i=3, j=4;
k=20*8/4+i+j*i;
System.out.println("表示式(20*8/4+i+j*i)="+k);
}
}
(2) 建立包含复合语句程序,源代码以下。
class EXP2_6{
public static void main(String args[]) {
int k, i=3, j=4;
k=i+j;
System.out.println("在复合块外输出 k="+k);
{
float f;
f=j+4.5F;
i++;
System.out.println("在复合块内输出 f="+f);
System.out.println("在复合块内输出 k="+k);
}
System.out.println("在复合块外输出 i="+i);
}
}
(3) 编译并运行上述两个源程序,结果图2.5、2.6 所表示。
(4) 将变量i 在块内定义会怎样?改变其它变量位置看看会发生什么改变。
思索:指出程序复合结构和变量使用范围。
图 2.5
图 2.6
6、 使用选择语句
6.1、 使用if...else 语句
(1) 程序功效:使用if...else 语句结构多分支,判定某十二个月是否为闰年。闰年条件是符合下面二者之一:能被4 整除,但不能被100 整除;能被4 整除,又能被100 整除。
(2) 编写源程序文件,代码以下。
public class EXP2_7 {
public static void main(String args[]) {
boolean leap;
int year=;
if ((year%4==0 && year%100!=0) || (year%400==0)) // 方法1
System.out.println(year+" 年是闰年");
else
System.out.println(year+" 年不是闰年");
year=; // 方法2
if (year%4!=0)
leap=false;
else if (year%100!=0)
leap=true;
else if (year%400!=0)
leap=false;
else
leap=true;
if (leap==true)
System.out.println(year+" 年是闰年");
else
System.out.println(year+" 年不是闰年");
year=2050; // 方法3
if (year%4==0) {
if (year%100==0) {
if (year%400==0)
leap=true;
else
leap=false;
}
else
leap=false;
}
else
leap=false;
if (leap==true)
System.out.println(year+" 年是闰年");
else
System.out.println(year+" 年不是闰年");
}
}
(3) 编译运行程序,其结果图2.7 所表示。
图 2.7
思索:本程序中有多个选择语句,哪些含有嵌套关系?
6.2、 使用switch 语句
(1) 程序功效:在不一样温度时显示不一样解释说明。
(2) 程序源代码以下。
class EXP2_8{
public static void main(String args[]) {
int c=38;
switch (c<10?1:c<25?2:c<35?3:4) {
case 1:
System.out.println(" "+c+"℃ 有点冷。要多穿衣服。");
case 2:
System.out.println(" "+c+"℃ 正适宜。出去玩吧。");
case 3:
System.out.println(" "+c+"℃ 有点热。");
default:
System.out.println(" "+c+"℃ 太热了!开空调。");
}
}
}
(3) 编译运行程序,其结果图2.8 所表示。
图 2.8
7、 使用循环语句
7.1、 for 循环语句练习
(1) 程序功效:按5 度增量打印出一个从摄氏温度到华氏温度转换表。
(2) 程序源代码以下。
class EXP2_9{
public static void main (String args[]) {
int h,c;
System.out.println("摄氏温度\t华氏温度");
for (c=0; c<=40; c+=5) {
h=c*9/5+32;
System.out.println("\t"+c+"\t"+h);
}
}
}
(3) 编译并运行程序,其结果图2.9 所表示。
图 2.9
7.2、 while 循环语句练习
(1) 程序功效:运行程序后从键盘输入数字1/2/3 后,可显示抽奖得到奖品;假如输入其它数字或字符显示“没有奖品给你!”。
(2) 程序源代码以下。
import java.io.*;
class EXP2_10 {
public static void main(String args[]) throws IOException {
char ch;
System.out.println("按 1/2/3 数字键可得大奖!");
System.out.println("按’Q’键可退出循环操作.");
while ((ch=(char)System.in.read())!=' ') {
System.in.skip(2); // 跳过回车键
switch (ch) {
case '1':
System.out.println("恭喜你得大奖,一辆汽车!");
break;
case '2':
System.out.println("不错呀,你得到一台笔记本电脑!");
break;
case '3':
System.out.println("没有白来,你得到一台冰箱!");
break;
case ‘q’:
System.out.println(“欢迎下次再来!”);
System.exit(0);
default:
System.out.println("真不幸,你没有奖品!下次再来吧。");
}
}
}
}
(3) 编译源程序。
(4) 在命令提醒符窗口运行程序,然后分别按1、2、3、r 结果图2.10 所表示。
图 2.10
7.3、 do…while 循环语句练习
(1) 程序功效:求1+2+…+100 之和,并将求和表示式和所求和显示出来。
(2) 程序源代码以下。
class EXP2_11 {
public static void main(String args[]) {
int n=1, sum=0;
do {
sum+=n++;
}
while (n<=100);
System.out.println("1+2+...+100 ="+sum);
}
}
(3)编译并运行程序,结果图2.11 所表示。
图 2.11
7.4、 多重循环练习
(1) 输出九九乘法表程序,源代码以下。
public class EXP2_12
{
public static void main(String args[])
{
int i,j,n=9;
System.out.print(" * |");
for (i=1;i<=n;i++)
System.out.print(" "+i);
System.out.print("\n---|");
for (i=1;i<=n;i++)
System.out.print("----");
System.out.println();
for (i=1;i<=n;i++)
{
System.out.print(" "+i+" |");
for (j=1;j<=i;j++)
System.out.print(" "+i*j);
System.out.println();
}
}
}
(2) 编译并运行程序,结果图2.12 所表示。
五、注意事项:
1、注意Java集成开发环境Eclipse使用。
2、注意Java程序编码方法及书写习惯。
六、练习项目及思索题:
1、观察输出结果,发觉九九表行和列没有对齐,怎样才能输出一张行列对齐九九表?
试验项目三 Java语言面向对象基础
一、试验目标和要求:
(一)目标:
1、经过编程和上机试验了解Java语言是怎样表现面向对象编程基础思想;
2、了解类封装方法,和怎样创建类和对象;
3、了解组员变量和组员方法特征;
4、掌握面向对象程序设计方法;
5、了解类继承性和多态性作用;
6、了解接口作用。
(二)要求:
1、 编写一个表现面向对象思想程序;
2、 编写一个创建对象和使用对象方法程序;
3、 编写一个显示目前日期和时间程序;
4、 编写不一样组员变量修饰方法程序;
5、 编写不一样组员方法修饰方法程序;
6、 编写表现类继承性(组员变量、组员方法、组员变量隐藏)程序;
7、 编写表现类多态性(组员方法重载、结构方法重载)程序;
8、编写表现接口功效程序。
二、试验时数:12课时
三、试验器材:
操作系统:Windows XP操作系统
应用系统:Eclipse
四、试验内容或步骤:
1、 试验3.1设计类来描述真实客观世界中事物,使用类组员变量来表示事物属性和状态,使用类组员方法来提供对组员变量访问或修改
(1) 程序功效:设计一个用来描述汽车类,使用类非静态组员变量来表示汽车车主姓名、目前速率和目前方向盘转向角度,使用类非静态组员方法来表示改变汽车速率和停车两个操作。
(2) 程序源代码以下。
public class EXP3_1 {
private String ownerName; //车主姓名
private float curSpeed; //目前车速
private float curDirInDegree; //目前方向盘转向角度
public EXP3_1(String ownerName){
this.ownerName=ownerName;
}
public EXP3_1(String ownerName, float speed, float dirInDegree){
this(ownerName);
this.curSpeed=speed;
this.curDirInDegree=dirInDegree;
}
public String getOwnerName() { //提供对车主姓名访问
return ownerName;
}
public float getCurDirInDegree() { //提供对目前方向盘转向角度访问
return curDirInDegree;
}
public float getCurSpeed() { //提供对目前车速访问
return curSpeed;
}
public void changeSpeed(float curSpeed) { //提供改变目前车速
this.curSpeed = curSpeed;
}
public void stop(){ //提供停车
this.curSpeed=0;
}
}
(3) 编译源程序。
2、 创建类对象,使用对象方法(类非静态方法)来访问或修改对象变量(类非静态变量)
(1) 创建类EXP3_1对象,在调用类结构函数时指定对象变量初始值,以后再使用对象方法来访问或修改对象变量值。
(2) 程序代码以下。
public class EXP3_2 {
public static void main(String[] args){
EXP3_1 car=new EXP3_1("成龙",200f,25f);
System.out.println("车主姓名: "+car.getOwnerName());
System.out.println("目前车速: "+car.getCurSpeed());
System.out.println("目前转向角度: "+car.getCurDirInDegree());
car.changeSpeed(80);
System.out.println("在调用changeSpeed(80)后,车速变为: " + car.getCurSpeed());
car.stop();
System.out.println("在调用stop()后, 车速变为: "+car.getCurSpeed());
}
}
(3) 编译并运行,结果图3.1所表示。
图 3.1
3、 编写显示目前时间和日期程序
(3) 程序功效:该程序经过使用一个自定义类Time,实现显示目前日期和时间功效。
(4) 程序代码以下。
import java.util.Calendar;
class Time {
private Calendar t;
private int y, m, d, hh, mm, ss;
Time (){
t=Calendar.getInstance();
y=t.get(t.YEAR);
m=t.get(t.MONTH)+1;
d=t.get(t.DATE);
hh=t.get(t.HOUR_OF_DAY);
mm=t.get(t.MINUTE);
ss=t.get(t.SECOND);
}
public String getDate() {
return y+" 年"+m+"月"+d+"日";
}
public String getTime() {
return hh+" 时"+mm+"分"+ss+"秒";
}
}
public class EXP3_3{
public static void main(String[] args){
Time t=new Time();
System.out.println("目前日期:"+t.getDate());
System.out.println("目前时间:"+t.getTime());
}
}
(5) 编译并运行,结果图3.2所表示。
图 3.2
4、 使用修饰符来限定类组员变量或组员方法属性
有时需要公开部分变量和方法,有时需要严禁其它对象使用变量和方法,这时能够使用修饰符来实现这个目标。
常见修饰符以下:
public private protected package static final transient volatile
不一样修饰符访问控制权限如表3.1 所表示。
访问权限修饰符
类
子类
包
全部类和包
public
√
√
√
√
private
√
protected
√
√
√
package
√
√
表 3.1
(1) 程序功效:经过两个类StaticDemo、EXP3_4 说明静态变量/方法和实例变量/方法区分。
(2) 程序源代码以下。
class StaticDemo {
static int x;
int y;
public static int getX() {
return x;
}
public static void setX(int newX) {
x = newX;
}
public int getY() {
return y;
}
public void setY(int newY) {
y = newY;
}
}
public class EXP3_4 {
public static void main(String[] args) {
System.out.println("静态变量x="+StaticDemo.getX());
System.out.println("实例变量y="+StaticDemo.getY()); //非法,编译时将犯错
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
b.setY(4);
System.out.println("静态变量a.x="+a.getX());
System.out.println("实例变量a.y="+a.getY());
System.out.println("静态变量b.x="+b.getX());
System.out.println("实例变量b.y="+b.getY());
}
}
(3) 对上面源程序进行编译,会出现图3.3所表示犯错提醒。
图 3.3
(4) 将源程序中犯错语句删除或使用解释符//隐藏起来,比如,//System.out.println("实例变量y="+StaticDemo.getY());
(5) 重新编译并运行该程序,结果图3.4所表示。
图 3.4
5、 调用方法时参数传输练习
在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在Java 中,方法中参数传输能够分为传值调用或对象方法调用等方法。传值调用即传输参数是基础数据类型,调用方法时在方法中将不能改变参数值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象方法,这种方法能够修改许可存取组员变量。所以,假如不想改变参数值,能够采取传值调用方法。假如想改变参数值,可采取对象调用方法,间接修改参数值。
5.1、编写一个传值调用程序
(1) 程序功效:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方法调用方法ff1对x 和y 做乘方及输出x 和y 乘方值,最终再输出x 和y 乘方值。
(2) 程序源代码以下。
class EXP3_5 {
public static void main(String[] args) {
int x=10, y=10;
ff1(x, y);
System.out.println("x="+x+", y="+y);
}
static void ff1(int passX, int passY) {
passX=passX*passX;
passY=passY*passY;
System.out.println("passX="+passX+", passY="+passY);
}
}
(3) 编译并运行,结果图3.5。
图 3.5
5.2、编写一个调用对象方法程序
(1) 程序功效:经过调用对象方法在方法调用后修改了组员变量值。
(2) 程序源代码以下。
class EXP3_6 {
public static void main(String[] args) {
Power p=new Power();
p.ff2(10,10);
System.out.println("方法调用后 x="+p.x+", y="+p.y);
}
}
class Power{
int x=10, y=10;
void ff2(int passX, int passY) {
System.out.println("初始时 x="+x+", y="+y);
x=passX*passX;
y=passY*passY;
System.out.println("方法调用中 x="+x+", y="+y);
}
}
(3) 编译并运行,结果图3.6。
图 3.6
6、 类继承性练习
新类可从现有类中产生,并保留现有类组员变量和方法并可依据需要对它们加以修改。新类还可添加新变量和方法。这种现象就称为类继承。
当建立一个新类时,无须写出全部组员变量和组员方法。只要简单地申明这个类是从一个已定义类继承下来,就能够引用被继承类全部组员。被继承类称为父类或超类(superclass),这个新类称为
展开阅读全文