1、本科实验报告课程名称: JAVA 语言程序设计 实验项目: 基础编程 实验地点: 软件楼 专业班级: 软件 班 学号: 学生姓名: 指导教师: 2014 年 1 月 5 日实验 1 Java 语言基础1.实验目的(1) 通过实验,掌握 Java 语言程序设计的基本方法。(2) 学会 Java 语言中标示符的命名、运算符和表达式的应用。(3) 熟练地掌握 Java 程序流程控制语句的应用。2.主要仪器设备笔记本电脑 HP6460b,win7,eclipse3.实验内容(1) 编写应用程序,计算 100(含 100)以内所有偶数的和。package com.test11;public class
2、Test11 /计算 100 以内所有偶数的和public static void main(String args)int sum = 0;for(int i=2; i= 10)Y=4 * x;System.out.println(“Y=“+Y);else Y = 3*x-2;System.out.println(“Y=“+Y);运行结果: (5) 使用 for 循环语句,编写程序输出以下图案。package addsum;public class question5 public static void main(String args)for(int r=1; r0; space-)Sy
3、stem.out.print(“+“ “+“);for(int star=1; star=1; r-)for(int space=4-r; space0; space-)System.out.print(“+“ “+“);for(int star=1; starb)return a;elsereturn b;public Integer minNum(int a, int b) if(ab)return b;elsereturn a;public static void main(String args)int a=6,b=2,c=10;question3 s=new question3();
4、int temp=s.maxNum(a, b);int temp1=s.maxNum(temp, c);System.out.println(“The MaxNum is“+temp1);int temp2=s.minNum(a, b);int temp3=s.minNum(temp2, c);System.out.println(“The MinNum is“+temp3);结果:(4) 编程实现以下简单超市管理,具体要求如下:1 实现描述超市的类 Suppermacket 类,具有货架属性,记录系统中现有商品,定义盘点商品的函数 check(盘点各类商品的数量,并输出盘点结果),查询商品的
5、函数 query,并显示查询结果;2 定义商品类 Goods,具有商品名称 Name,商品价格 Price,商品产地Producer 等属性,操作 Sale(销售商品,余额不足时给予提示) 、Add(商品上架操作)和 ShowMe(显示商品信息) 。3 main 函数,测试以上所要求的各种功能,即可以根据菜单命令增加、删除、查询商品、盘点商品,以及商品销售和商品上架的操作提示: 超市货架可以使用商品数组,数组大小 100 表明存放 100 个商品。 注意实现商品查询的多态性,要求可以根据商品的名称或产地或价格查询商品的数量。import java.io.*;import java.util.S
6、canner;public class Main static String name;static float price;static int num;static String producer;static Supermarkt market=new Supermarkt();public static void main(String args)throws IOExceptionint i=0;while(true)market.ShowMenu();i=Integer.parseInt(Getline();switch(i)case 1: Add();break;case 2:
7、Del();break;case 3: Showgoods();break;case 4: Query();break;case 5: System.out.print(“成功退出系统“ );return;default:System.out.println(“输入错误,请重新输入!“);break;public static void Query() System.out.println(“*查询商品*“);System.out.print(“商品名:“);name=Getline();if(!market.Query(name)System.out.print(“没有该商品“);publi
8、c static void Showgoods() System.out.println(“*显示所有商品*“);if(!market.Showgoods()System.out.println(“没有任何商品“ );public static void Del() System.out.println(“*删除商品*“);System.out.print(“商品名称:“);name=Getline();if(market.Del(name)System.out.println(“删除商品-“ + name + “ 成功!“);elseSystem.out.println(“该商品不存在“ )
9、;public static void Add() System.out.println(“*增加商品*“);System.out.print(“商品名称:“);name=Getline();System.out.print(“商品价格:“);price=Float.parseFloat(Getline();System.out.print(“商品数量:“);num=Integer.parseInt(Getline();System.out.print(“商品产地:“);producer=Getline();if (market.Add(name, price, num,producer) S
10、ystem.out.println(“增加商品-“ + name + “ 成功!“); else System.out.println(“存在相同商品, 增加失败!“);public static String Getline() Scanner scan = new Scanner(System.in);String str = scan.nextLine();return str.trim();Goodspublic class Goods private String name;private float price;private int num;private String prod
11、ucer;public Goods(String name,float price,int num,String producer)this.name=name;this.price=price;this.num=num;this.producer=producer;public String GetName()return this.name;public float GetPrice()return this.price;public int GetNum()return num;public String GetProducer()return this.producer;public
12、void Showgoods()System.out.print(“商品名称: “+name+“ 商品价格:“ +price+“ 商品数量:“+num+“ 商品产地:“+producer+“n“ );Supermarketimport java.util.Vector;public class Supermarkt static Vector listgoods=new Vector();public void ShowMenu() System.out.println(“-“);System.out.println(“1.增加商品 “);System.out.println(“2.删除商品“
13、);System.out.println(“3.显示商品 “);System.out.println(“4.查询商品 “);System.out.println(“5.退出系统 “);System.out.println(“-“);return;/增加商品public boolean Add(String name,float price, int num,String producer)int count=listgoods.size();for(int i=0;icount;i+)if(listgoods.get(i).GetName().equals(name)return false;
14、Goods newgoods =new Goods(name,price,num,producer);listgoods.add(newgoods);return true;/删除商品public boolean Del(String name)int count=listgoods.size();for(int i=0;icount;i+)if(listgoods.get(i).GetName().equals(name)listgoods.remove(i);return true;return false;/显示商品public boolean Showgoods()int count=
15、listgoods.size();if(count=0)return false;else for(int i=0;icount;i+)listgoods.get(i).Showgoods();return true;/查询商品public boolean Query(String name)int count=listgoods.size();for(int i=0;icount;i+)if(listgoods.get(i).GetName().equals(name)listgoods.get(i).Showgoods();return true;return false;结果:3.讨论、
16、心得 通过实验,我掌握 Java 面向对象程序设计中类、继承、包和接口的概念与应用,能熟练应用方法、类、成员变量等元素,在实验过程中的确遇到过很多问题,不像前几章那样较容易实现各功能,我发现自己在知识方面还有很多的不足,在平时的练习中也不懂得扩展与举一反三,导致这次的实验做得马马虎虎,除此之外也体会到了面向对象程序设计相对于过程化程序设计的优越性,总之,语言是一门技巧,要想能熟练掌握,必须多加练习。实验 4 Java 异常处理1.实验目的掌握异常的概念,以及如何定义、抛出和捕获处理异常。2.实验内容(1) 做实验之前要求思考以下问题,作为预习内容;1 错误和异常有何区别?查看 Java 异常类
17、的关系图。2 异常是如何抛出、捕获和处理的?3 Java 捕获和处理异常的结构式怎样的?4 Try 语句如何嵌套?Trow 语句有何作用?Finally 程序快的作用是什么?(1)错误和异常有什么区别?答:致命性错误:如程序进入死循环,或递归无法结束,或内存溢出,称之为错误。错误只能在编程阶段解决,只能依靠其他程序干预,否则一直处于非正常状态。 而非致命性的异常:如运算时除数为 0,或操作数超出范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络连接中断等,这类现象称为异常。(2)异常是如何抛出、捕获和处理的?答:1、Java 程序在执行过程中如出现异常,会自动生成一个异常类对
18、象,该异常对象将被提交给 Java 运行时系统,这个过程称为抛出(throw)异常。2、当 Java 运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。3、如果 Java 运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的 Java 程序也将退出。4、对于 RuntimeException,通常不需要我们去捕获,这类异常由 Java 运行系统自动抛出并自动处理。5、派生类构造方法的异常说明必须包含基类构造方法的异常说明,即派生类构造方法的异常必须为基类异常或其父类,当基类构造方法没有异常时,派生类构造方法也可以异常
19、声明。注意,派生类构造器不能捕获基类构造方法抛出的异常。6、派生类方法可以不抛出异常,即使基类有异常说明,如果派生类方法有异常说明,必须是基类异常或其子类,而且当基类没有异常声明时,派生类方法不允许异常声明(关于构造方法见 5 中的说明) 。7、我们可以在方法声明时,声明一个不会抛出的异常,Java 编译器就会强迫方法的使用者对异常进行处理。这种方式通常应用于 abstract class 和 interface 中。(3)Java 捕获和处理异常的结构是怎样的?答:使用 try-catch-finaly 语句来捕获,获得异常后自己处理或者让系统自己处理。(4)为了避免程序运行时可能出现的错误
20、,将程序代码放在 try 程序块中,紧跟在 try 语句后面包括一个 catch 语句,用来指定需要捕获的异常类型。在程序中发生异常时,程序员可以抛出(throw)一个自定义异常类的实例,将其放到异常队列中去,并激活 java 的异常处理机制。当抛出一个异常时,程序的执行就不再是线性的,这样就有可能导致方法的执行中断。在 java 语言中,使用 finally 语句来解决此类问题。Finally 语句创建一个代码块,在 try/catch 语句执行后执行,不管是否抛出一个异常,系统都将执行 finally 语句的程序代码。(2) 运行下面的程序,理解异常的抛出、捕获与处理。Import jav
21、a.io.*;public class void main(String args)public staic void main(String args)for(int i=0;i4;i+)int k;tryswitch(i)case 0: /divided by zeroint zero=0;k=911 /zerobreak;case 1:/null pointerint b=null;k=b0;break;case 2; /array index out of boundint c=new int2;k=c9;break;case 3: /string index out of bound
22、char ch=“abc“.charAt(99);break;catch(Exception e)System.out.println(“nTestcase#“+i+“n“);System.out.println(e);以下实验内容运行结果为:(3)在实验三中的超市、商品类中创建一个自定义异常类。要求:在定义商品类时,若销售商品数量大于余额则作为异常处理(InsufficientFundsException) 。提示:1 产生异常条件是某类商品销售数量大于库存额,因此是否抛出异常要先判断该条件。2 确定产生异常的方法,应该在 sale 方法中产生异常 Insufficient Funds Ex
23、ception。3 处理异常安排在调用 sale 的时候,因此 sale 方法要声明异常,由上级方法捕获并处理。4 要定义好自己的异常。import java.util.Scanner;public class Z6_3 private long balance=0;public void deposit(long x) /存款balance=balance+x;System.out.println(“存“+x+“元成功“);public void withdraw(long x)throws InsufficientFundsException /取款if(x=balance)balance
24、=balance-x;System.out.println(“取“+x+“元成功“);else throw new InsufficientFundsException(“余额小于取款额,取款失败“+“n“);public void getbalance(long x) /查询System.out.println(“您的余额为:“+balance);public static void main(String args) Z6_3 account=new Z6_3();Scanner in=new Scanner(System.in);while(true)System.out.println
25、(“请输入您接下来进行的操作序号:1 存款;2取款;3 查询余额“);int i=in.nextInt();switch(i)case 1:System.out.print(“请输入存款的数额:“);int j=in.nextInt();account.deposit(j);break;case 2:System.out.print(“请输入取款的数额:“);int k=in.nextInt();tryaccount.withdraw(k);catch(InsufficientFundsException f)System.out.print(f.getMessage();break;case
26、 3:account.getbalance(account.balance);break;class InsufficientFundsException extends Exceptionpublic InsufficientFundsException(String msg)super(msg);3.讨论、心得在程序的整个运行过程中,程序比较容易调试,也没出现任何问题,即使如此,我觉得要真正掌握这一部分内容也不是那么容易,所以以后我更应该多去尝试新的题型,希望能彻底把这一部分给掌握了,以至于使所编写的程序更加健壮,完美。实验 5 多线程编程1.实验目的(1) 现成的概念、线程的生命周期。(
27、2) 多线程的编程:扩展 Thread 类与使用 Runnable 接口。(3) 使用多线程机制实现动画2.实验内容(1) 运行下面的程序,理解用创建 Thread 子类的方法实现多线程。/S09_01_Thread.JavaImport java.util.*;class S09_01_Thread extends Thread int pauseTime;String name;public S09_01_Thread(int x,String n)pauseTime=x;name=n;public void run()while(true)trysystem.out.println(na
28、me+“:“+new Date(System.currentTimeMillis();Tread.sleep(pauseTime);catch(Exception e)System.out.println(e);static public void main(String srgs)S09_01_Thread tp1=new S09_01_Thread(1000,“Fast“);tp1.start();S09_01_Thread tp2=new S09_01_Thread(3000,“Slow“);tp2.start();(2) 运行下面的程序,理解用实现 Runnable 接口的方法实现多线
29、程。/S09_02_Thread.JavaImport java.util.*;class S09_02_Thread implements Runnable int pauseTime;String name;public S09_02_Thread(int x,String n)pauseTime=x;name=n;public void run()while(true)trysystem.out.println(name+“:“+new Date(System.currentTimeMillis();Tread.sleep(pauseTime);catch(Exception e)Sys
30、tem.out.println(e);static public void main(String srgs)Thread t1=new Thread(new S09_02_Thread(1000,“Fast“);t1.start();Thread t2=new Thread(new S09_02_Thread(3000,“Slow“);t2.start();(3) 创建简单的程序 ThreeThread.java,该程序将创建三个线程,每个线程应当显示它所运行的时间(可以考虑使用 Date 类或 Calendar 类) 。package 线程;import java.util.*;publi
31、c class L09_03_ThreeThread extends Threadint pauseTime;String name;public L09_03_ThreeThread(int x,String n)pauseTime=x;name=n;public void run()while(true)trySystem.out.println(name+“:“+new Date(System.currentTimeMillis();catch(Exception e) System.out.println(e);public static void main(String args)L
32、09_03_ThreeThread tp1=new L09_03_ThreeThread(1000,“Fast“);tp1.start();L09_03_ThreeThread tp2=new L09_03_ThreeThread(2000,“Midle“);tp2.start();L09_03_ThreeThread tp3=new L09_03_ThreeThread(3000,“Slow“);tp3.start();3.讨论、心得在 java 程序设计中,所有进程都是包含线程概念的,一般都是把主程序当作主线程。对多线程的综合支持是 java 语言的一个重要特色,在 java 中,内置了
33、Thread 类来实现多线程,当程序引用了 java.lang.Thread 类时,也就引入了一个 java 执行环境。当程序加载到内存时,启动主程序,如果需要使用其他线程,则可以采用以下两种方式创建新的线程:一种是继承 java.lang.Thread 类,用它覆盖 Thread 类的 run()方法;另一种是编写一个类,使之实现 java.lang.Runnable 接口,然后在 Thread 构造函数中使用它。第一种方式只能在类没有继承其他任何类的情况下才能使用,因为 java 不允许多重继承。因此,如果一个类要继承其他的类,最好选用第二种方法,这样会有更大的灵活性。在本次实验中我发现在
34、触发线程运行时,首先要声明,用 start()方法来使其运行。知道了 Java 语言用以实现多线程的两种机制继承 Thread 类和实现 Runnable 接口;还知道了线程的五种状态新建、就绪、运行、挂起和死亡,另外还学会了线程的同步和线程组之间通信的方法。实验 6 图形用户界面编程1.实验目的掌握文本组件、按钮和单、复选按钮组件的使用;掌握列表的使用,鼠标、键盘事件的处理;掌握布局控制的方法。2.实验内容(1) 编写一个 Applet 程序响应鼠标事件,当鼠标事件发生时,在状态条显示相应的时间信息。提示:使用 showStatus(字符串)方法。package applet;import
35、javax.swing.*;import java.awt.event.*;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;public class Shubiao public static void main(String args) JFrame frm = new JFrame(“鼠标事件“);frm.setLayout(null);JLabel label = new JLabel(“将鼠标移到文本框 “);frm.setDefaultCloseOperation(
36、JFrame.EXIT_ON_CLOSE);label.setBounds(45, 5, 200, 25);frm.getContentPane().add(label);JTextField text = new JTextField(30);text.setBounds(45, 65, 300, 30);frm.getContentPane().add(text);MouseListenerImp mouse = new MouseListenerImp(text);text.addMouseListener(mouse);text.addMouseMotionListener(mouse
37、);/ text.addWindowListener(mouse);frm.setBounds(500, 250, 400, 200);frm.setVisible(true);class MouseListenerImp implements MouseMotionListener, MouseListener,WindowListener JTextField text;Date now = new Date();DateFormat d2 = DateFormat.getDateTimeInstance();String str2 = d2.format(now);public Mous
38、eListenerImp(JTextField text) this.text = text;public void mouseEntered(MouseEvent e) text.setText(str2);public void mouseExited(MouseEvent e) String s = “鼠标离开了窗体“;text.setText(s);public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) System.exit(1);public void windowClosed
39、(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) public void mouseClicked(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(Mous
40、eEvent e) public void mouseDragged(MouseEvent e) public void mouseMoved(MouseEvent e) (2) 完成图 6-1 所示的 GUI 布局管理,不需要实现功能。package gui;import java.awt.*;public class Kuang extends Framestatic Frame frm=new Frame(“FileChooseDemo“);static Panel pn1=new Panel(new GridLayout(1,4,1,15);static Panel pn2=new P
41、anel(new GridLayout();static Panel pn3=new Panel(new GridLayout(5,1);static Panel pn4=new Panel(new GridLayout(5,1);static Panel pn5=new Panel(new GridLayout(6,1);static Panel pn6=new Panel(new GridLayout(6,1);static Checkbox cb1=new Checkbox(“Open“,true);static Checkbox cb2=new Checkbox(“Save“,fals
42、e);static Checkbox cb3=new Checkbox(“Custom“,false);static Checkbox cb4=new Checkbox(“Default Filtering“,true);static Checkbox cb5=new Checkbox(“Add JPG and GIF Filters“,false);static Checkbox cb6=new Checkbox(“Show Hidden Files“,false);static Checkbox cb7=new Checkbox(“Show Extension“,true);static
43、Checkbox cb8=new Checkbox(“Show FileView“,true);static Checkbox cb9=new Checkbox(“Show PreView“,true);static Checkbox cb10=new Checkbox(“Show Control Buttons“,true);static Checkbox cb11=new Checkbox(“Just Select Files“,false);static Checkbox cb12=new Checkbox(“Just Select Directories“,false);static
44、Checkbox cb13=new Checkbox(“Select Files or Directories“,false);static Checkbox cb14=new Checkbox(“Single Selection“,true);static Checkbox cb15=new Checkbox(“Multi Selection“,false);static Checkbox cb16=new Checkbox(“Metal“,false);static Checkbox cb17=new Checkbox(“Motif“,false);static Checkbox cb18=new Checkbox(“Windows“,true);static Button b1=new Button(“Remove Filter“);static Button b2=new Button(“Add Filter“);static Button b3=new Button(“Show FileChooser“);static Label lab1=new Label(“Dialog Type“);