序号 | 实验项目名称 | 学时 分配 | 必做/选做 |
1 | 熟悉JAVA开发环境 | 2 | 必做 |
2 | Java基本语法 | 2 | 必做 |
3 | 面向对象的“对象” | 2 | 必做 |
4 | JAVA数组 | 2 | 必做 |
5 | JAVA封装性设计与使用 | 2 | 必做 |
6 | 静态变量、静态方法与包 | 2 | 必做 |
7 | Java常用系统类 | 2 | 必做 |
8 | 对象的进一步探讨--面向对象中的继承 | 2 | 必做 |
9 | 深入多态 | 2 | 必做 |
10 | 基于SWING的图形界面编程 | 2 | 必做 |
11 | 可视化程序的事件处理 | 2 | 必做 |
合计 | 22 |
(验证性 2学时)
一、实验目的与要求:
1 掌握Java Application程序的开发过程并编写第一个Java Application程序
*2 掌握Java Applet程序的开发过程并编写第一个Java Applet程序。
*3 练习简单的HTML文件配合Java Applet使用。
4 熟悉jdk的使用
二、实验内容:
1 编写一个Java Application程序,在屏幕上显示”This is my first java program!”.
*2 编写第一个Java Applet 程序,在屏幕上显示”This is my first Java Applet!”
三、实验步骤:
1、jdk的使用
jdk开发工具包可以从java.sun.com网站下载,jdk不是集成编译环境,须手动运用命令行程序进行编译和解释执行
1)编辑.java文件
可以在记事本或其他纯文本编辑器中编辑,保存时把文件扩展名定为.java即可,当然要注意文件名命名的要求
2)编译生成.class文件
进入dos系统进行编译(如图1.1所示),格式如j,要注意
图1.1进入命令行
看javac.exe的路径并且MyFirstApplication.java文件路径和javac.exe路径一样。编译成功后就能在浏览器中看见多了一个MyFirsApplication.class或更多的.class文件。如图1.2所示
图1.2使用jdk编译MyFirstApplication.java文件
3)解释执行
Application程序:
同样是在dos系统下解释执行,格式如j注意.class后缀别加,如图1.3所示。
图1.3解释执行MyFirstApplication.class程序
* applet程序
进入dos系统进行编译,格式如j,要注意看javac.exe的路径并且MyFirstApplet.java文件路径和javac.exe路径一样。编译成功后就能在浏览器中看见多了一个MyFirsApplet.class或更多的.class文件
在解释执行前要把该applet程序(MyFirstApplet.class)嵌入到相应的HTML文件。即执行MyFirstApplet之前必须编写MyFirstApplet.html。然后使用浏览器或appletviewer.exe程序执行该.html文件。格式如
AppletViewer MyFirstAplet.html。如图1.4所示
图1.4 appletview 查看运行html文件
运行结果如图1.5所示:
图1.5
实验二 基本语法
一、实验目的与要求:
1.了解Java的数据类型
2.掌握各种变量的声明方式
3.理解运算符的优先级
4.掌握java基本数据类型。运算符与表达式、数组的使用方法
5.理解Java程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法
二、实验内容:
1.编写程序,打印自己的学号、姓名及专业。
2.编写程序,打印下列九九乘法表。
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
3.编程输出以下图案:
要求:*行数n小于40,在程序开头直接指定,不必从键盘输入。
4.编写程序,将1~500间能同时被2,5,7整除的数打印出来。
5.输出100!的结果
简单实现:输出大概值,直接用一个变量累乘
100! ≈ 9.3326215443944152681699238856267e+157
6.给定某人这一月的工资收入为salary,该变量在程序开始处赋值,不需要从键盘输入,计算他这一月应该缴纳的个人所得税。个人所得税的计算方法请自己上网查询,按2011年9月执行的新标准。
例如:salary=2000, 个税=0;
salary=3500, 个税=0;
salary=5000, 个税=45;
salary=8000, 个税=345;
salary=20000, 个税=3120。
实验三 面向对象的”对象”
一、实验目的与要求:
1理解类的定义;
2掌握对象的声明;
3学会使用构造函数初始化对象;
4使用类的数据和方法。
二、实验内容:
1. 定义一个描述长方体的类Box,类中有三个整型的成员变量:length、width和height,分别表示长方体的长、宽和高。定义setInfo(int ,int ,int)方法设置这三个变量的值;定义volumn()方法求长方体的体积并返回整型结果;定义area()方法求长方体的表面积并返回整型结果;定义toString()方法把长方体的长、宽、高,以及长方体的体积和表面积转化为字符串并返回字符串。
编写Java应用程序,测试类Box,使用类中定义的各个方法,并将其结果输出。
2. 定义一个圆形类Circle,类中有一个用来描述半径的double型成员变量r,定义setR(double)方法初始化半径;定义getArea()方法求圆形的面积并返回double类型结果;定义getPerimeter()方法求圆形的周长并返回double类型结果。
编写Java应用程序,使用Circle类创建两个对象,通过相应方法分别设置不同的半径值,计算各自的面积及周长并显示结果。
实验四 数组
一.实验目的及要求
1. 学习并实践Java数组编程方法。
2. 学习并实践一维数组简单应用。
二. 实验内容
1从键盘读入一组实数到一个一维double型数组X中(直接按回车结束),并且:
①求出数组X中数据的平均值。
②求出数组X中数据的最大值和最小值。
③对数组X中的数据按照从小到大的顺序排序。
④输入一个实数x,从数组X中查找出x的位置。
⑤输入一个整数i,从数组X中删除第i个结点。
⑥输入一个整数i和一个实数x,将x插入到数组X第i个结点之前。
提示:
①以回车作为结束标志的成组数据的输入
②排序、插入、删除等改变数组值的操作不应破坏原始数组(即存放输入数据的数组),针对Java数组本身的特点,下面给出处理该问题的一个算法供参考:
a. 声明两个double数组的引用X和Y,并用常量为Y分配足够大的内存;
b. 将数据先输入Y,输入过程中记录实际数据个数n(以回车作为输入结束的标志);
c. 用实际数据个数n创建X,并调用arraycopy将Y中的前n个数据复制到X中;
d. 排序前调用clone方法将X克隆到Y,排序则针对Y进行;
e. 删除前为Y重新分配n-1个单元,删除过程中将X的n-1个数据转移到Y;
f. 插入前为Y重新分配n+1个单元,插入过程中将X的n个数据及插入值转移到Y。
实验五 Java类的封装性的设计与使用
一.实验目的及要求
1.熟悉Java类的封装性概念与作用;
2.掌握Java类构造方法的声明与方法的重载;
3.掌握类及其成员变量与成员方法的访问权限的设置;
二.实验内容
1.编写一个学校类School,其中包括成员变量schoolname(校名-String)、scoreLine(录取分数线-double类型)和构造方法(可完成对schoolname、scoreLine的初始值设置)以及获取schoolname、scoreLine值的getSchoolname方法getScoreLine方法。
2.编写一个学生类Student,它的成员变量有考生的name(姓名-String类型)、id(考号-int类型)、intgretResult(综合成绩-double类型)、sports(体育成绩-int类型)。它有一个构造方法(可设置学生name和id的初始值)及可以修改学生name和id值的方法set(String name,int id)和分别设置学生的intgretResult(综合成绩)及sports(体育成绩)值的两个方法Set(double intgretResult)和Set(int sports)及获得学生intgretResult(综合成绩)及sports(体育成绩)的方法getIntgretResult()和getSports()。
3.编写一个录取类matriculate ,它的一个方法用于判断学生是否符合录取条件。其中录取条件为:综合成绩在录取分数线之上,或体育成绩在90分以上并且综合成绩大于300分。
实验六 静态变量、静态方法与包
一.实验目的及要求
1、熟练静态变量、静态方法、实例变量、实例方法的概念
2、掌握包的概念与应用。
二.实验内容
1.阅读下列程序,并按照要求完成后续功能。
class Point
{
private int x,y;
Point (int xValue, int yValue)
{
x=xValue;
y=yValue;
};
public int GetX()
{
return x;
}
public int GetY()
{
return y;
}
public void SetY(int value)
{
y=value;
}
public void SetX(int value)
{
x=value;
}
}
class Managerpoint
{
static int count=0;
Point createPoint(int x,int y)
{
提示:在此处加入代码,完成程序的输出要求
}
}
public class one {
public static void main(String[] args) {
// TODO Auto-generated method stub
Managerpoint mPoint =new Managerpoint();
for(int i=0;i<9;i++){
Point p=mPoint.createPoint(i,20);
System.out.print("当前点的总数为:"+Managerpoint.count);
System.out.println("当前点的x值为:"+p.GetX());
}
}
}
在提示处加入代码,要求:
●除提示处代码,其他代码保持不变
●Main方法的执行结果为:
当前点的总数为:1当前点的x值为:0
当前点的总数为:2当前点的x值为:1
当前点的总数为:3当前点的x值为:2
当前点的总数为:4当前点的x值为:3
当前点的总数为:5当前点的x值为:4
当前点的总数为:6当前点的x值为:5
当前点的总数为:7当前点的x值为:6
当前点的总数为:8当前点的x值为:7
当前点的总数为:9当前点的x值为:8
2.改错。
理解静态方法可访问静态变量,但在静态方法中不能直接访问实例变量。
提示:
阴影处为需要修改的代码。
public class one
{
int x=8;
int y=9;
final int i=10;
static int getY(){
return y;
}
static int getI(){
return i;
}
public static void main(String[] args)
{
System.out.println(one.x);
System.out.println(one.y);
System.out.println(one.i);
}
}
修改程序,输出结果应为
8
9
10
二、包
新建2个包:
一个是dao,一个是logic
在dao包中编写2个类,分别为point、circle,,具体设计要求可参照前述实验
在logic包中编写1个类,为Test,在Test的main方法中测试上述2个类,应能有相关测试代码。
实验七 常用系统类的使用
一.实验目的及要求
1.掌握Math类的使用。
2.掌握String类和StringBuffer类的使用
3.掌握日期类的使用。
二.实验内容
1.编写运行下面代码,写出程序运行结果,理解Math类的使用和字符串转换成整数或浮点数的方法。
public static void main(String[] args) {
System.out.println(Math.abs(-5.8));
System.out.println(Math.ceil(3.2));
System.out.println(Math.floor(3.8));
System.out.println(Math.round(3.8));
System.out.println(Math.round(3.2));
System.out.println(Math.min(3, 2));
System.out.println(Math.max(Math.PI, 4));
System.out.println("e is:" + Math.E);
System.out.println("πis:" + Math.PI);
System.out.println("16的1/4次幂:" + Math.pow(16, 0.25));
String num1 = "121";
String num2 = "232.2";
System.out.println("两字符串之和为" + num1+num2);
//掌握字符串转换成整数或浮点数的方法
double sum = Integer.parseInt(num1) + Double.parseDouble(num2);
System.out.println("两数之和为" + sum);
}
2.编写一方法,获得一Email地址的服务器名,若Email地址的格式不正确,返回“Email的格式不正确”。然后在主方法中测试使用。
说明:Email的格式为:用户名@邮件服务器,比如1234542@qq.com, 1234542是用户名,@代表at的意思,qq.com为邮件服务器地址。
3. 编写一方法,按格式“yyyy-MM-dd HH:mm:ss”获得当前时间。
实验八 对象的进一步探讨--面向对象中的继承
一.实验目的及要求
1. 理解继承的概念,了解其在程序设计中的作用;
2. 熟悉类的继承定义方法,熟练地由系统类或者自定义的类派生出子类,并熟知子类对继承自父类的成员的访问性;
3. 理解属性隐藏与方法覆盖(重写)的概念,并会调用父类中被隐藏的属性或被覆盖的方法;
4. 理解在子类中调用父类的构造方法的原则与方法;
5. 理解终结类、终结方法、抽象类、抽象方法的概念与特点;
6. 理解组合和继承的区别,知道何时使用哪种方法。
二.实验内容
1.定义一个球类Ball,包含一个私有成员变量半径(double r),两个公有成员方法:设定半径值方法( void setR(double x) 、 得到半径值方法(double getR( ))。
定义一个台球类Billiards,继承Ball类,包含一个私有成员变量颜色(String color),两个公有成员方法:设定颜色方法(void setCol (String clo))、输出信息方法(void show()),其中show方法可以输出该台球的颜色和半径值。
定义一个公有类,测试前两个类。
2.定义材料类Material,包含:
保护的成员变量名称、单价(String name; double price;)
为数据初始化赋值的构造方法;
公有的成员方法得到所有信息(public String toString())。
定义木材类Wood,继承自材料类。包含:
私有的成员变量颜色(String col;)
为数据初始化赋值的构造方法;
覆盖公有的成员方法得到所有信息(public String toString())。
定义公共类,测试上述两个类的使用。
思考:
程序中把木材类中toString()方法的public 去掉会产生什么结果?为什么?
程序中把材料类中toString()方法的public 去掉会产生什么结果?为什么?
思考题:
木材类中toString()方法的public 去掉程序会出错,因为该方法由材料类继承而来,子类覆盖父类的方法时不能缩小其访问权限,public去掉就会变成包访问权限,此处不能去掉。
材料类中toString()方法的public 去掉会产生同样的问题,因为toString方法不是材料类自定义的,是所有类的父类Object类提供的。
3. 改写例7-8,给Shape类增加构造方法,能够对颜色进行初始化设置,思考两个子类的构造方法该如何修改才能使程序正常运行。
实验九 深入多态
一.实验目的及要求
1.掌握final修饰的最终类与最终方法的定义、特点及使用
2.掌握abstract修饰的抽象类与抽象方法的定义、特点及使用
3.掌握interface接口的定义、特点及使用
4.进一步理解多态
二.实验内容
1. 要使程序运行后出现如下结果,该如何修改程序代码。
去掉Person类前面的final,去掉Student类中show()方法前面的final。
2. 求正方形的面积
a)创建一个接口IShape ,接口中有一个抽象方法
public double area( );
b)定义一个类square,且实现IShape接口。square类有一个属性表示正方形的边长;构造方法初始化该边长。
c)定义一个主类,在此类中,创建square类的实例,求该正方形面积。
第1章基于Swing的图形界面编程
1. 编写程序,实现如下效果:
2. 用标签实现如下效果:
3. 编写程序,完成以下界面的设计和显示:
10行,20列
20字符宽
400
320
4. 完成下图所示的界面设计并显示出来:
5. 把面板和布局管理配合在一起使用,实现显示如下界面:
运行后试着调整窗体的尺寸,观察窗体内组件的变化。
第2章
可视化程序的事件处理
1. 编写程序,能够在窗体内显示被点击按钮的信息。运行效果图如下:
2. 编写程序,实现如下界面,当用户在文本框中输入内容后,点击不同的按钮,能够把文本框中的内容粘贴到文本区中。“重置”按钮实现将文本框和文本区中的内容清空。界面上的文本区只能显示内容,不能让用户输入文本。
提示:
得到文本框中的文本、得到选中的文本、设置文本区中的文本、附加文本等,设置文本区不可用等,JTextField和JTextArea类均有相应方法实现。
3. 模仿例题,实现在窗体内移动鼠标时,能够实时显示鼠标指针的坐标位置。
4. 参考例题,编写程序,给界面上的文本框增加键盘事件处理,当在文本框中输入内容时,界面上不可编辑的文本区显示相应的按键信息。
实现原理:在键盘事件接口的三个方法中均得到按键码,再根据按键码转换为按键信息,增加到文本区中显示。
e.getKeyText(e.getKeyCode())
提示:最好使用带滚动窗格的文本区。输出按键信息的同时还输出方法名称,以方便观察按键事件处理的先后顺序。
5. 编写程序,实现使用键盘上的上下左右箭头控制界面上图片的移动。移动到边界时从界面另一侧出现。移动过程中显示另一个图片,停止时恢复原来的图片。
6. 编写程序,在界面上放置若干按钮,面板使用网格布局,要求有15像素的水平垂直间隔。使用弹出式菜单,点击菜单项时弹出颜色对话框,对相应的控件进行背景色设置。
提示:
需要给框架、按钮响应鼠标按下事件处理;
需要给菜单项响应点击事件处理;
弹出式菜单JPopupMenu。创建时通常不给参数,大多由单击鼠标右键触发。
使用add()方法给弹出式菜单添加菜单项。
在mouseReleased()方法中通过e.isPopupTrigger()方法判断是否右键按下触发弹出式菜单。使用public void show(Component c, int x, int y)方法显示菜单。如:
public void mouseReleased(MouseEvent e) {
int x = e.getX();
int y = e.getY();
if(e.isPopupTrigger())
popup.show(this,x,y);
}