Java实验教案

第二次实验:Java语言基础练习

一、实验目的

      1. 了解 Java 的数据类型

  2.掌握各种变量的声明方式及其使用范围。

  3.理解 Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法。

二、实验要求

  1. 编写一个声明 Java 不同数据类型变量的程序。

2. 编写一个关于变量的使用范围的程序。

  3. 编写使用选择结构的程序。

  4. 编写使用循环结构的程序。

三、实验内容

(一) 声明不同数据类型的变量

   1.编写声明不同数据类型变量的程序文件 KY2_1.java,源代码如下。

  public class KY2_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. 编译并运行该程序

3.  把程序的输出结果写在实验报告中。如果不给上面程序中的变量赋初始值的话,看看该程序是否还能正确运行?如果不可以,请指出为什么?

4. 试编写数据类型转换程序。讨论自动类型转换和强制类型转换的实例。

(二) 了解变量的使用范围

  1.建立 KY2_2.java 文件,通过本程序了解变量的使用范围,源代码如下。

     public class KY2_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);           

         }

       }

 

  2.编译 KY2_2.java

     看看这个程序是否会出错?为什么会出现编译错误,请在试验报告中给出理由!

  3.修改上面的程序,让它能正确运行。

  4.把修改后的源程序以及程序的输出结果写在实验报告中。

  5. 试着自己编写程序体会局部变量和成员变量初始化的问题。

  思考:KY2_2.java 程序说明了什么问题?

(三) 使用选择语句

1.       程序功能:使用 switch 语句在不同温度时显示不同的解释说明。

2.       程序源代码如下。

   class KY2_3{

        public static void main(String args[]){

           int c=18;

           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.编译 KY2_3.java

     看看这个程序是否会出错?如果出错,请在试验报告中解释为什么?

  4.修改上面的程序,让它能正确运行。把修改后的源程序以及程序的输出结果写在实验报告中。

(四) 使用循环语句

1.请编写程序 KY2_4.java,要求程序具有如下功能:求 1+2+…+100 之和,并将求和表达式与所求的和都显示出来,即程序的输出结果应该为:1+2+…+100=5050。

2.编译KY2_4.java     

3.运行KY2_4.class

    4.把源程序写在实验报告中。

 

四、实验总结

请在实验报告中对本次实验内容进行总结。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第三次实验:Java面向对象编程

一、实验目的

1. 理解 Java 语言是如何体现面向对象编程基本思想的;

2. 掌握类的声明以及对象的创建;

3. 了解类的成员变量和成员方法的特性以及类的构造方法的使用。

二、实验要求

1.    编写一个长方体类,通过类中的一个成员方法来初始化类中的成员变量,并通过另外一个方法来计算长方体的体积。

2.    编写一个帐户类实现银行帐户的概念,创建帐户类的对象,完成存款与取款等操作。

三、实验内容

1. 编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length)、宽(width)和高(heigth),再定义一个方法void setBox(int l, int w, int h) 对这三个变量进行初始化,然后定义一个方法int volume ()来计算长方体的体积。最后,在main()方法中创建一个Box类的对象b,首先通过调用对象b的setBox()方法来设置长方体的长、宽和高,再通过调用对象b的volume()方法来计算这个给定尺寸的长方体的体积,并输出这个结果。 

要求: 将程序的源代码写在实验报告上。并将程序运行结果写在实验报告上。

 

 

2. 定义一个银行帐户类BankAccount实现银行帐户的概念,在BankAccount类中定义两个变量:"帐号" (account_number) 和"存款余额"(leftmoney),再定义四个方法:"存款" (savemoney)、"取款"(getmoney) 、 "查询余额" (getleftmoney)、构造方法(BankAccount)。

最后,在main()方法中创建一个BankAccount类的对象ba,假设ba的账号为:123456,初始的存款余额为500元。首先向该账户存入1000元,再取出2000元。

要求: 将下面源代码中的空白处填上,并写在实验报告上。将程序运行结果写在实验报告上。源代码的提示如下:

 

……

public double getleftmoney () {     //查询余额

……

}

 

public void savemoney(double money) {   //存款

leftmoney+=money;

}

 

public void getmoney (double money){  //取款

 

……

}

 

public BankAccount(int number, double money){  //构造方法,用来初始化变量

……

 }

 

public static void main(String args[]) {  

   ……

 ba.savemoney(1000);
   System.out.println("存入1000元后,您的余额为:"+ba.getleftmoney());
   ba.getmoney(2000);
   System.out.println("取款2000元后,您的余额为:"+ba.getleftmoney());

}

 …… 

 

四、思考题

1.   说明什么是构造方法,构造方法有哪些特点?

2.   如果程序中有多个类时,如何来确定源程序文件的名称?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第四次实验:修饰符与继承性

 

一、实验目的

了解如何使用类及其成员的修饰符,理解类的继承性,掌握方法的继承、重载和覆盖。

二、实验要求

1.   编写如何使用类及其成员的修饰符的程序。

2.   编写如何通过传递参数来调用方法的程序。

3.   编写体现类的继承性(成员变量、成员方法的继承)的程序。

三、实验内容

(一)使用修饰符

有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符有:public,private,protected,package,static,final,abstract等。

1.  程序功能:通过两个类 StaticDemo、KY4_1 来说明类变量与对象变量,以及类方法与对象方法的区别。

2.  编写源程序 KY4_1.java,程序源代码如下。

class StaticDemo {

static int x;

int y;

public static int getX(){

return x;

}

public static voidsetX(int newX) {

x = newX;

}

public int getY() {

return y;

}

public void setY(intnewY) {

y = newY;

}

}

 

public class KY4_1 {

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. 编译并运行程序 KY4_1.java,看看该程序是否有错?如果有错请在实验报告中指出出错的地方,出错的原因,并给出修改意见以及程序正确运行的结果。

 

(二)方法中参数传递的练习

1.  编写一个程序文件KY4_2.java。

2.  程序功能如下:有一个主方法main() 以及一个求平方和的方法int square(int x, int y)。square方法计算参数x 和y的平方和,并返回该平方和值。在主方法main中定义两个整型变量,并给它们赋一个初值,然后使用这两个变量作为实际参数来调用square方法,求出平方和,最后输出平方和。

3.  请将程序KY4_2.java的源代码写在实验报告中。

  

(三)类的继承性练习

1. 进一步理解继承的含义

    新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类 还可添加新的变量和方法。这种现象就称为类的继承。

    当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。

Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。

 

2.编写两个程序文件KY4_3.java和KY4_4.java,实现类的继承。

3.KY4_3.java的代码如下:

       public class KY4_3

       {

           protected String xm;                    //姓名

           protected int xh;                        //学号

           void setdata(String m,int h)             //该方法为姓名和学号赋初始值

           {

                xm =m;

                xh = h;

           }

           public void print()          //输出学生的姓名和学号

           {

                System.out.println(xm+","+xh);

           }

       }

    4.编译 KY4_3.java,产生类文件 KY4_3.class。注意:暂时不运行程序KY4_3.class。

5.编写一个程序文件KY4_4.java。程序功能如下:子类KY4_4继承父类 KY4_3,其不仅具有父类的成员变量 xm(姓名)、xh(学号),还定义了新的成员变量 xy(学院)、xi(系)。在子类KY4_4中重写了父类的方法print(),在该方法中不仅输出学生的姓名和学号,而且还输出学生的学院和系。另外,在子类KY4_4中还定义了一个主方法main。首先,在主方法中创建一个父类 KY4_3的对象f,设置f的姓名为"帅零",学号为"12321",并且调用print()方法输出对象f的姓名和学号。接着,在主方法中创建一个子类 KY4_4的对象s,设置s的姓名为"郭娜",学号为"12345",学院为"经济管理学院",系为"信息管理系",并且调用print()方法输出对象s的姓名,学号,学院和系。

   6.编译并运行程序KY4_4.java。请将KY4_4的源程序以及运行结果写在实验报告中。

注意:父类 KY4_3 与子类 KY4_4要在同一文件夹(路径)内。

 

四、思考题

1.   说明类的继承和多态都有什么作用?

 

 

 

 

 

 

 

 

 

 

 

 

第五次实验:类的多态性

一、实验目的

理解类的多态性,掌握方法的继承、重载和覆盖,掌握如何从键盘输入数据以及多重循环的使用。

二、实验要求

4.   编写体现类的多态性(成员方法重载)的程序。

5.   编写构造方法重载的程序。

6.   编写使用键盘来输入数据的程序。

7.   编写使用多重循环的程序。

三、实验内容

(一)类的多态性练习

1.   理解类的多态性

类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为类的多态。

多态使程序简洁,为程序员带来很大便利。在OOP 中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。

类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。

2.   方法的重载

方法的重载是指对同名方法的不同使用方式。

1)      程序功能:对不同的数进行排序输出。在IntSort 类中定义2 个同名的方法sort。

2)      编写KY5_1.java 文件,源代码如下。

class IntSort {

public String sort (int a, int b) {

if (a>b)

return a+" "+b;

else

return b+" "+a;

}

public String sort (int a, int b, int c) {  

int swap;

if (a<b) {

swap=a;

a=b;

b=swap;

}

if (a<c) {

swap=a;

a=c;

c=swap;

}

if (b<c) {

swap=b;

b=c;

c=swap;

}

return a+" "+b+" "+c;

}

}

 

public class KY5_1 {

public static void main(String args[])  

              {

int a=30, b=12, c=40;

IntSort s=new IntSort();

System.out.println("两个数的排序结果:"+s.sort(a,b));

System.out.println("三个数的排序结果:"+s.sort(a,b,c));

}

}

3)      编译KY5_1.java并运行程序

4)      将程序的输出结果记录在实验报告中。

5)      请在实验报告中说明在IntSort 类中出现的下面两个同名的方法各自的功能?

I.        public String sort (int a, intb) 

II.      public String sort (int a, intb, int c)

6) 请在实验报告中指出程序中是哪条语句调用了方法I,哪条语句调用了方法II?

 

(二)构造方法的重载

构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new 操作符调用。

构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。

1)      编写程序KY5_2.java,将其中的类RunDemo的构造方法进行重载。源代码如下。

class RunDemo {

private String userName, password;

RunDemo(String name) {

userName=name;

}

RunDemo(String name, String pwd) {

this(name);

password=pwd;

}

void check() {   //检验用户名和密码

String s=null;

if (userName!=null)

s="用户名:"+userName;

else

s="用户名不能为空!";

if (password!="123456")

s=s+" 口令无效!";

else

s=s+" 口令:******";

System.out.println(s);

}

}

 

public class KY5_2 {

public static void main(String[] args) {

RunDemo r1=new RunDemo("刘新宇");

r1.check();

RunDemo r2=new RunDemo(null, "654321");

r2.check();

RunDemo r3=new RunDemo("张驰","123456");

r3.check();

}

}

2)      编译程序KY5_2.java并运行程序

3)      将程序的输出结果记录在实验报告中。

4)      指出程序中的下面三条语句分别调用了类RunDemo中的哪个构造方法?

I.        new RunDemo("刘新宇");

II.      new RunDemo(null,"654321");

III.    new RunDemo("张驰","12345678");

5)      类RunDemo中有两个构造方法,其中第一个构造方法RunDemo(String) 只有一个参数,用来对成员变量userName 赋初值。第二个构造方法RunDemo(String, String) 有两个参数,并有更多的内容,首先调用this(name),其实际作用就是调用当前类的构造方法RunDemo(String name);然后对成员变量password 赋值;最后调用check 方法来检查userName 和password,类似于一般程序的口令验证。重载构造方法的执行由对象根据实际参数的个数、类型和顺序确定。

(三)使用键盘输入

3.       程序功能:运行程序后,从键盘输入数字 1、2或者3 ,可显示抽奖得到的奖品;如果输入其它数字或字符则显示“对不起,没有奖品给你!”。

4.       程序源代码如下。

      import java.io.*;

      class KY5_3 {

          public static voidmain(String args[]) throws IOException {

            char ch;

           System.out.println("抽奖游戏,祝您好运!");

           System.out.println("按 1、2、3 数字键后回车,可得大奖!");

           System.out.println("按空格键后回车,可退出本游戏.");

            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;

               default:

                System.out.println("对不起,没有奖品给您!欢迎下次光临。");

             }

          } 

        }

       }

3.编译并运行KY5_3.java

  4.运行程序,从键盘输入一下数字或字符,看看程序的输出结果是什么?把这些结果写在实验报告中。

 

(四) 使用多重循环语句

1.请编写程序 KY5_4.java,要求程序能够输出九九乘法表。

2.程序源代码如下。

public class KY5_4

    {

      public static void main(Stringargs[])

      {

         int i, j, n=9;

          System.out.print("      *  |");

          for (i=1; i<=n; i++)  { System.out.print("    "+i);  }   //第一个for循环

          System.out.print("\n----------|");

          for (i=1; i<=n; i++)  { System.out.print("-----");  }     //第二个for循环

          System.out.println();

          for (i=1; i<=n; i++)                               //第三个for循环

          {

              System.out.print("     "+i+"    |");

              for (j=1; j<=i; j++)  { System.out.print("   "+i*j);  }   //第四个for循环

              System.out.println();

         }

      }

 }

3.编译并运行KY5_4.java     

4.请将程序的运行结果写在实验报告中,并且说明程序中每一个for循环的作用。

 

四、实验总结

请在实验报告中对本次实验内容进行总结。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第六次实验:包与接口以及常用工具类的使用

 

一、实验目的

了解 Java 中包(package)和接口(interface)的作用,掌握包和接口的设计方法。掌握Math类,String类和StringBuffer类的使用。 

二、实验要求

1.   了解 Java 系统包的结构,创建并使用自定义包。

2.   掌握接口的定义与使用。

3.    掌握Math类的使用。

4.    掌握String类和StringBuffer类的使用

三、实验内容

(一)创建并使用自定义包

1.自定义包的声明方式

       <package>  <自定义包名>

    声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。

2.创建自定义包 Mypackage

在存放源程序的文件夹中建立一个子文件夹 Mypackage。例如,在“D:\java\javacode”文件夹之中创建一个与包同名的子文件夹 Mypackage(D:\java\javacode\Mypackage),并将编译过的 class 文件放入到该文件夹中。 注意:包名与文件夹名大小写要一致。

3.在包中创建类

1)      编写程序KY6_1.java,在源程序中,首先声明使用的包名 Mypackage,然后创建KY6_1类,该类具有计算今年的年份,可以输出一个带有年月日的字符串的功能。

2)      源代码如下。

   package Mypackage;                    //声明存放类的包

   import java.util.*;                          //引用 java.util 包

   public class KY6_1 {   

       private int year,month,day;

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

       public KY6_1 (inty,int m,int d) {

            year = y;

           month = (((m>=1) & (m<=12)) ? m : 1);  

           day = (((d>=1) & (d<=31)) ? d : 1);

        }     

       public static int thisyear() {

            return Calendar.getInstance().get(Calendar.YEAR);//返回当年的年份

       }

       public int year() {

           return year;//返回年份

       }

       public String toString(){

                returnyear+"-"+month+"-"+day;//返回转化为字符串的年-月-日

        }

     }

3)      编译KY6_1.java 文件,然后将KY6_1.class 文件存放到 Mypackage 文件夹中(D:\java\javacode\Mypackage)。注意:先不运行程序KY6_1.class!

 

     4.编写一个需要使用到包 Mypackage 中的KY6_1 类的程序KY6_2.java。

1)       编写 KY6_2.java 程序:给定某人姓名与出生日期,计算该人年龄,并输出该人姓名,年龄,出生日期。程序使用了KY6_1 的方法来计算年龄。

2)       源代码如下。

  import Mypackage.KY6_1; //引用 Mypackage 包中的KY6_1 类

  public class KY6_2  

  {

        private String name;

        private KY6_1 birth;

            public static void main(String args[])

        {

            KY6_2 a = new KY6_2("张驰",1990,1,11);

            a.output();

        }

        public KY6_2 (Stringn1, int y, int m, int d)

        {                          //初始化变量与对象

                     name = n1;

            birth = newKY6_1(y, m, d);

        }

        public int age()                                   //计算年龄

        {

            return birth.year() - KY6_1.thisyear(); //返回当前年与出生年的差即年龄

        }

        public void output()

        {

           System.out.println("姓名 : "+name);

           System.out.println("出生日期: "+birth.toString());

           System.out.println("今年年龄 : "+age());

        }

    }

3)       编译KY6_2.java 程序并运行程序KY6_2.java

4)       在实验报告中写出该程序的运行结果。

5)       程序运行的结果有没有问题?问题出在哪里?请在实验报告中指出。

 

 

(二)使用接口技术

定义两个接口,其中各包括一个抽象方法分别用来完成两个数的加法和减法操作,然后创建一个类KY6_3来实现这两个接口中的抽象方法。编写程序KY6_3.java,将源程序写在实验报告中。

 

(三)Math类的使用

 1.利用下面的关键代码编写一个完整的程序KY6_4.java,理解Math类的使用。
 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 (Math.log(7.0));        
 System.out.println (Math.pow(7,2));               
 System.out.println (Math.exp (0.4));               
 System.out.println ("e is:"+Math.e);         
 System.out.println ("π is:"+Math.PI);        
 System.out.println(Math.random());        


 2.将程序的运行结果写在实验报告中。

 

 

(四)String类与StringBuffer类的使用

 1.利用下面的关键代码编写一个完整的程序KY6_5.java,理解String类与StringBuffer类的使用。
        String s=new String("This is andemo of the String method.");
        System.out.println("Length:"+s.length());
        System.out.println("SubString:"+s.substring(11,15));
      StringBuffer sf=newStringBuffer("Hello World!");
        sf.append(" Hello Java!");
        sf.insert(12," And");
        System.out.println(sf);
        System.out.println(sf.charAt(0));
        sf.setCharAt(0,''h'');
        System.out.println(sf.charAt(0));
        System.out.println(sf);


 2.将程序的运行结果写在实验报告中。

 

 

四、思考题

3.   算术运算应该使用什么类?

4.   Java语言中如何表示字符串?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实验七 流与文件

一、实验目的

1.   理解数据流的概念

2.   理解Java流的层次结构

3.   理解文件的概念

二、实验要求

1.  掌握字节流的基本使用方法

2.  掌握字符流的基本使用方法

3.  能够创建、读写、更新文件   

三、实验内容

(一)使用标准数据流的应用程序

标准数据流指在字符方式下(如DOS提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。

1.  程序功能:将键盘上输入的字符在屏幕上显示出来

2.  编写KY10_1.java 程序文件,源代码如下。

class KY10_1{

public staticvoid main(String[] args) throws java.io.IOException {

bytebuffer[]=new byte[10];

System.out.println("从键盘输入不超过10 个字符,按回车键结束输入:");

int count=System.in.read(buffer);//读取输入的字符并存放在缓冲区buffer 中

System.out.println("保存在缓冲区buffer 中元素的个数为:"+count);

System.out.println("buffer中各元素的值为:");

for (inti=0;i<count;i++){

System.out.print(""+ buffer[i]);//在屏幕上显示buffer 元素的值

}

System.out.println();

System.out.println("输出buffer 字符元素:");

System.out.write(buffer,0, buffer.length);

}

}

3.  编译、运行KY10_1.java文件。

(二)使用文件输入输出流的应用程序

1.   程序功能:将保存在本地机当前文件夹中的KY10_2.HTML 文本文件的内容在屏幕上显示出来,然后将其另存为KY10_2.txt文件。

2.   编写KY10_2.java 程序文件,源代码如下

import java.io.*;

public class KY5_4 {

public static void main(String[] args) throws IOException {

FileReader in=new FileReader("KY5_1.HTML");//建立文件输入流

BufferedReader bin=new BufferedReader(in);//建立缓冲输入流

FileWriter out=new FileWriter(" KY5_1.txt",true);//建立文件输出流

String str;

while ((str=bin.readLine())!=null) {

//将缓冲区内容通过循环方式逐行赋值给字符串str

System.out.println(str);//在屏幕上显示字符串str

out.write(str+"\n");//将字符串str 通过输出流写入KY5_1.txt 中

}

in.close();

out.close();

}

}

3.   编译、运行程序

(三)转换流

1.程序功能:从键盘读入一行字符,并将其转换成大写打印在屏幕,当输入exit字符串时退出。

2.   编写KY10_3.java 程序文件,源代码如下

import java.io.*;

public class KY10_3 {

  public static void main(Stringargs[]) {

    InputStreamReader isr =

            newInputStreamReader(System.in);

    BufferedReader br = newBufferedReader(isr);

    String s = null;

    try {

      s = br.readLine();

      while(s!=null){

       if(s.equalsIgnoreCase("exit")) break;

       System.out.println(s.toUpperCase());

        s = br.readLine();

      }

      br.close();

    } catch (IOException e) {

      e.printStackTrace();

    }

  }

}

3.   编译、运行程序

 

(四)使用数据输入输出流与文件输入输出流类的应用程序

使用数据输入流DataOutputStream 和数据输出流DataInputStream 可以读取或写入任何Java 类型的数据,不用关心它们的实际长度是多少字节。一般与文件输入流FileInputStream和输出流类

FileOutputStream 一起使用。

1.   程序功能:将整型数据和字符串对象通过数据输出流写到文件中。将文件中的整型数据和字符串对象通过数据输出流读出,并在屏幕上显示文件中的内容。

2.   编写KY10_4.java 程序文件,源代码如下。

importjava.io.*;

public class KY10_4

{

public staticvoid main(String arg[])

{

try

{ //添加方式创建文件输出流

FileOutputStreamfout = new FileOutputStream("KY5_6.txt",true);

DataOutputStreamdout = new DataOutputStream(fout);

dout.writeInt(1);

dout.writeChars("罗马"+"\n");

dout.writeInt(2);

dout.writeChars("北京"+"\n");

dout.close();

}

catch(IOException ioe){}

try

{

FileInputStreamfin = new FileInputStream("KY5_6.txt");

DataInputStreamdin = new DataInputStream(fin);

int i =din.readInt();

while (i!=-1)//输入流未结束时,输入流结束时i 为-1

{

System.out.print(i+" ");

char ch ;

while ((ch=din.readChar())!='\n') //字符串未结束时

System.out.print(ch);

System.out.println();

i = din.readInt();

}

din.close();

}

catch(IOException ioe){}

}

}

3.  编译并运行程序

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第八次实验:多线程与异常处理

一、实验目的

了解线程的概念、线程的生命周期,掌握多线程的编程。掌握异常的概念以及如何定义、抛出和捕捉处理异常。

二、实验要求

1.  掌握利用Java语言编写多线程程序的方法

2.             掌握线程的调度方法

3.  编写一个程序,用来捕获各种类型的异常

4.  编写一个程序,用来说明异常处理块中各个语句块的作用

5.  熟悉异常的类型及其产生的原因

三、实验内容

(一)Thread子类的方法实现多线程

1.  编写 TwoThreadsTest.java 程序文件,源代码如下。

class SimpleThread extends Thread {

     public SimpleThread(String str) {

         super(str);

     }

     public void run() {

         for (int i = 0; i < 10;i++) {

             System.out.println(i + "" + getName());

             try {

                 sleep((int)(Math.random() *1000));

             } catch (InterruptedException e){}

         }

         System.out.println("DONE! "+ getName());

     }

 }

public class TwoThreadsTest {

     public static void main (String[] args) {

         new SimpleThread("Go to Beijing??").start();

         new SimpleThread("Stayhere!!").start();

      }

     }

2.  编译、运行

3.  请将程序的运行结果写在实验报告中。

(二)实现Runnable接口的方法实现多线程

1.   程序功能:一个时钟Applet,它显示当前时间并逐秒进行更新

2.   编写Clock.java 程序文件,源代码如下。

import java.awt.*;

 import java.applet.*;

 importjava.util.*;

 public class Clock extends Applet implementsRunnable{

        ThreadclockThread;

        public void start(){

               if(clockThread==null){

                      clockThread=newThread(this,"Clock");

                      clockThread.start();

               }

        }

        public void run(){

               while(clockThread !=null){

                      repaint();

                      try{

                            clockThread.sleep(1000);

                     }catch(InterruptedException e){}

                   }

        }

        public void paint(Graphics g){

                 Date now=new Date();   g.drawString(now.getHours()+";"+now.getMinutes()+";"+now.getSeconds(),5,10);

        }

        public void stop(){

               clockThread.stop();

               clockThread=null;

        }

     }

3.编译Clock.java 文件。

4.编写Clock.html 文件,源代码如下:
<HTML>

       <HEAD>

              <TITLE>A Simple Program </TITLE>

       </HEAD>

       <BODY>

              Hereis the output of my program:

              <APPLETCODE="Clock.class" WIDTH=150HEIGHT=25>

              </APPLET>

       </BODY>

</HTML>

5.  在浏览器中打开Clock.html 文件,将你看到的运行结果写在实验报告中。

 

(三)捕获并处理各种类型的异常

1.编写ExceptionTest.java 程序文件,源代码如下。
 import java.io.*;
 public class ExceptionTest{
        public static void main(Stringargs[]) {
              for(int i = 0; i < 4;i++) {
                     int k;
                     try {
                           switch( i ) {
                                   case 0:       
                                          int zero = 0;
                                          k = 911 / zero;
                                          break;
                                   case 1:      
                                          int b[ ] = null;
                                          k = b[0];
                                          break;
                                   case 2:      
                                          int c[ ] = new int[2];
                                          k = c[9];
                                          break;
                                   case 3:      
                                          char ch = "abc".charAt(99);
                                          break;
                            }
                     }catch(Exception e) {
                            System.out.println("\nTestcase #" + i + "\n");
                            System.out.println(e);
                     }
              }
        }
 }

2. 编译、运行

3. 根据运行结果,请在实验报告中说明程序运行中总共捕捉了几个异常,并指出每个异常各自属于哪种类型的异常?

(四)了解异常处理模块中各个语句块的功能

1.编写TryTest.java 程序文件,源代码如下。

 importjava.io.*;
 public class TryTest{
        public TryTest(){                       
              try{
                     int a[] = new int[2];
                     a[4] = 3;
                     System.out.println("After handling exception return here?");
              }catch(IndexOutOfBoundsException e){
                     System.err.println("exception msg:" + e.getMessage());
                     System.err.println("exception string:" + e.toString());
                     e.printStackTrace();
              }finally{
                     System.out.println("-------------------");
                     System.out.println("finally");
              }
              System.out.println("No exception?");
        }
        public static void main(String args[]){
              new TryTest();
        }
 } 

2. 编译、运行

3. 根据运行结果,将程序的运行结果写在实验报告中。

4. 请在实验报告中指出程序中的语句System.out.println("Afterhandling exception return here?"); 有没有被执行?

四、思考题

1.   简述并区分程序、进程和线程三个概念。

2.   线程有哪几个基本的状态?Java中线程调度遵循何种原则?

3.   实现多线程可以用哪两种基本方法?将这两种方法进行比较。

4.   异常是如何抛出、捕捉和处理的?

5.   异常处理机制有哪些好处?

 

 

 

 

 

 

第九次实验:GUI标准组件及事件处理

一、实验目的

了解图形用户界面基本组件:框架、面板、按钮、标签、菜单、列表等的使用方法;了解如何使用布局管理器对组件进行管理;理解和掌握 Java 的事件处理机制。

二、实验要求

1.  了解Java图像用户界面的开发,掌握基本组件的使用。

2.  掌握编写独立运行的窗口界面的方法,了解菜单和对话框的使用方法。

3.  理解Java的事件处理机制,掌握为不同组件编写事件处理程序的方法。

三、实验内容

(一)在面板中添加多个组件,并进行合理的布局

¨        程序功能:在一个框架(Frame)容器中添加一个面板(Panel)容器,并分别在框架和面板容器中添加组件并使用不同的布局管理方式。

¨        请编写KY7_1.java 程序文件,相关源代码的提示如下。

import java.awt.*;

importjava.awt.Color;

public classKY7_1 {

public static void main(String args[]){

……   //创建一个框架f

  ……   //创建一个面板p

       ……   //把面板p添加到框架f中

       …… //设置面板p的背景颜色为蓝色

       p.setLayout(new FlowLayout());   //设置面板p的布局为流式布局

    ……   //在面板p中添加一个标签l

……  //在面板p中添加六个按钮

Choice c=new Choice ();   // 创建一个下拉列表c,

c.addItem("北京");        // 下拉列表c中有三个选项:北京、上海和天津

c.addItem("上海");

c.addItem("天津");

       ……   //把列表c添加到面板p中

……   //设置框架f的大小和可见性

   }

}

¨        将上面程序中的空缺部分添加进去,编译并执行该程序。

¨        将KY7_1.java的完整源程序写在实验报告中。

 

(二)为窗口添加菜单,并处理由菜单项所引发的事件

¨        程序功能:在窗口中添加菜单条,在菜单条中添加菜单,并在菜单中添加菜单项和子菜单。通过选择菜单项可以引发不同的事件,从而执行不同操作,例如点击“打开”菜单项可以打开一个“打开文件对话框”。

¨        编写KY7_2.java 程序文件,源代码如下。

import java.awt.*;

import java.awt.event.*;

public class KY7_2 extendsFrame implements ActionListener {

     static Frame f;         //声明一个框架

static FileDialog fd1;    //声明一个文件对话框对象

    static FileDialog fd2;

public static void main(String args[]) {

KY7_2  k = new KY7_2(); 

        f =new Frame();   // 创建一个框架f  

……   // 创建一个菜单条 mb

         ……   // 在菜单条mb中添加两个菜单m1("文件")和m2("帮助")

……   /*  "文件"菜单m1中有三个菜单项:m11("打开")、

m12("关闭")和m13("退出")*/

……  /*  "帮助"菜单m2中有三个菜单项:m21("目录")、

m22("索引")和m23("关于")*/

…… //  "文件"菜单m1中还有一个子菜单m3("编辑")

……  /*  "编辑"子菜单m3 中有三个菜单项:m31("复制")、

m32("剪切")和m33("粘贴")*/  

m11.addactionlistner(k);   /* 允许菜单项"打开"引发一个事件,该事件的处理者为当前对象 k  */

m13.addactionlistner(k);   /* 允许菜单项"退出"引发一个事件,该事件的处理者为当前对象 k  */

f.setSize(350,200);  // 设置框架f的大小

f.setMenuBar(mb);  // 设置框架f的菜单条为mb 

f.setVisible(true);   

}

public voidactionPerformed (ActionEvent e) {  /* 处理由菜单项"打开"和"退出"                                                                               所引发的事件*/

if(e.getActionCommand() == "打开") {  /* 若"打开"菜单项引发事件,则打开“打开文件对话框”*/

FileDialog fd = new FileDialog (f, "open", FileDialog.SAVE);

fd.setVisible (true);

                            }

if(e.getActionCommand() == "保存")    /* 若"保存"菜单项引发事件,则打开“保存文件对话框”*/

……  //创建并打开一个“保存文件对话框”

}

}

¨        将上面程序中的空缺部分添加进去,编译并执行该程序。

¨        将KY7_2.java的完整源程序写在实验报告中。

四、思考题

 1.构造函数和init()方法谁先被执行?
 2.编写Applet,包含两个按钮,一个按钮用于放大Applet上的一串字符串,一个按钮用于缩小;连续点击可不断放大或缩小。

第十次实验(课后自学加分项):综合练习(一)

一、 实验目的

将所学知识进行综合运用,模仿设计具有实际意义的应用程序。锻炼使用新类(没有介绍的)类的能力。

二、 实验要求

1. 在计算机上实现指导书中应用程序。

2. 分析应用程序中使用了哪些系统类,指出使用该类的变量与方法。说明创建了什么类。包含什么变量与方法。

3. 能根据实际需要使用不同的系统类编写应用程序。

三、 实验内容

(一)幻灯机效果——连续显示多幅图像

1、程序功能:如果 Applet 仅仅是显示一幅图像,没有什么特别的意义,不如直接在HTML文件中显示多幅图像。下面的程序可以像幻灯机那样连续显示多幅图像。在当前目录(D:\java\javacode)中的 images 文件夹中准备了 6 幅花的图像文件(flower1.jpg,……, flower6.jpg)。每隔一秒钟将显示其中的一副图像。

2、编写 KY9_1.java 程序文件,源代码提示如下。

         ……     //导入需要的包

       public class KY9_1 extends Applet {

            int index = 0;       //指示当前图像的下标(0≤index≤5)

            ……        //创建一个Image类的对象数组imgs,数组元素个数为6

            public void init ( ) {  //初始化

                ……        //将六幅图像文件分别加载进数组imgs中   

           }        

           public void paint(Graphics g) {   //绘图

                  ……   //绘制当前图形

……   //指示下一幅图像,如果index超过5,则返回0(第一幅图像)

try {       Thread.sleep (1000);     //暂停一秒钟  

}

catch(InterruptedException e) {

              e.printStackTrace ( );

}

                ……   //刷新

           }

        }

3、在这个程序中,我们加载了 6 幅图像,每隔1秒显示其中一副图像,并且在显示完第 6 幅图像后自动返回第一幅重新开始显示。请对程序进行分析,将完整的源程序写在试验报告中。

(二)使用滚动条改变背景颜色

1.  程序功能:移动滚动条可以引发事件,从而改变Applet的背景颜色。运行结果如下图所示。

 

2.  编写 KY9_2.java 程序文件,源代码提示如下。

   import java.applet.Applet;

   import java.awt.*;

   import java.awt.event.*;

   public class KY9_2 extends Applet implementsAdjustmentListener {   

//类KY9_2实现了监听器接口AdjustmentListener

     Scrollbar r1, r2, r3;    //声明三个滚动条对象r1, r2, r3

     int red, green, blue;

    TextField t; Label a;   //声明一个文本框t和一个标签a

    public void init ( ) {

       setLayout(null);

       r1=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);  //创建水平滚动条r1

       r2=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);  //创建水平滚动条r2

       r3=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);  //创建水平滚动条r3

       t=new TextField("0",5);      //创建文本框t 

       ……  // 将文本框t设置为不可读

       a=new Label("移动滚动条可改变背景颜色", Label.CENTER); //创建一个标签a

       add(a);  // 将标签a添加到Applet中

a.setBounds(120,10,150,15);  // 设置标签a的位置和大小

       ……  // 将滚动条r1添加到Applet中

r1.setBounds(20,30,100,20);  // 设置滚动条r1的位置和大小

       ……  // 将滚动条r2添加到Applet中

r2.setBounds(140,30,100,20);  // 设置滚动条r2的位置和大小

       ……  // 将滚动条r3添加到Applet中

r3.setBounds(260,30,100,20);  // 设置滚动条r3的位置和大小

       ……  // 将文本框t添加到Applet中

t.setBounds(20,120,220,18);  // 设置文本框t的位置和大小

       r1.addAdjustmentListener (this);  // 将滚动条r1的事件监听器设置为当前对象

       ……                       // 将滚动条r2的事件监听器设置为当前对象

       ……                       // 将滚动条r3的事件监听器设置为当前对象

    }

public voidadjustmentValueChanged(AdjustmentEvent e) { //滚动条滚动事件的处理模块

// 重写监听器接口AdjustmentListener中的空方法adjustmentValueChanged ( )

       red= r1.getValue();  //将滚动条r1的当前值赋值给变量red

       ……            //将滚动条r2的当前值赋值给变量green

       ……            //将滚动条r3的当前值赋值给变量blue

t.setText("red的值" +String.valueOf(r1.getValue()) + ", green 的值" + String.valueOf(r2.getValue()) + ", blue 的值" +  String.valueOf(r3.getValue() ));

//将滚动条r1, r2和r3的当前值转换成字符串的形式显示在文本框t中

       ……    //以red,green和blue作为实际参数,创建一个颜色类Color的对象c

       setBackground(c); //将Applet的背景色设置为对象c

     } }

3.  请对上述程序进行分析,将完整的源程序写在试验报告中。

四、思考题

1.字符流和字节流的区别是什么? 

2.对文件进行读写操作的过程是什么? 

第十次实验(课后自学加分项):综合练习(二)

一、 实验目的

将所学知识进行综合运用,模仿设计具有实际意义的应用程序。锻炼使用新类(没有介绍的)类的能力。

二、 实验要求

1. 在计算机上实现指导书中应用程序。

2. 分析应用程序中使用了哪些系统类,指出使用该类的变量与方法。说明创建了什么类。包含什么变量与方法。

3. 能根据实际需要使用不同的系统类编写应用程序。

三、 实验内容

(一)使用Applet的图形、字体、颜色、图像和声音功能编写一个综合应用程序。

1.  程序功能:

(1)     在Applet中绘制字符串、直线、园、椭圆、矩形、弧、多边形等图形。

(2)     在Applet中显示一些字符串,设置这些字符串的字体的型号、大小以及格式,

(3)     设置Applet的背景色、前景色、图形和字符串的颜色等

(4)     将一个图像文件载入到Applet中,在其中显示原图、缩小一半图、宽扁图和瘦高图。

(5)     在Applet中播放两段音乐,一段是连续播放的背景音乐,一段是独立的整段音乐。具体的素材可以自己找。

2.  编写 KY10.java 程序文件,将完整的源程序写在试验报告中。

四、思考题

1.什么是URL?一个URL地址由哪些部分组成?

2.网络环境下的C/S模式的基本思想是什么?什么是客户机?什么是服务器?它们各自的作用如何?C/S模式的基本工作过程如何?

3.简述流式Socket的通信机制。它的最大特点是什么?

4.数据报通信有何特点?简述Java实现数据报通信的基本工作过程。

 

 


  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验1 Java语言基础 4 一、实验目的 4 二、实验要求 4 三、实验内容 4 (一) 声明不同数据型的变量 4 (二) 了解变量的使用范围 5 (三) 使用关系运算符和逻辑运算符 5 (四) 使用表达式语句与复合语句 6 (五) 使用选择语句 6 (六) 使用循环语句 8 实验2 面向对象编程 11 一、实验目的 11 二、实验要求 11 三、实验内容 11 (一)创建 Applet 应用小程序 11 (二)创建对象并使用对象 12 (三)编写显示当前日期和时间的程序 13 (四)使用修饰符 14 (五)方法中参数传递 15 (六)的继承性 16 (七)的多态性 18 实验3 包、接口与异常处理 22 一、实验目的 22 二、实验要求 22 三、实验内容 22 (一)了解并使用 Java 的系统包 22 (二)创建并使用自定义包 22 (三)使用接口技术 24 (四)了解异常处理机制 25 实验4 常用系统的使用 27 一、实验目的 27 二、实验要求 27 三、实验内容 27 (一)了解 Applet 的生命周期 27 (二)使用数学函数 28 (三)使用日期 29 实验5 建立图形用户界面 32 一、实验目的 32 二、实验要求 32 三、实验内容 32 (一)创建图形用户界面 32 (二)了解事件处理机制 34 (三)建立独立运行的窗口界面并使用匿名 36 (四)使用 Swing 组件 39 (五)使用自定义对话框与内部 41 实验6 图形处理 44 一、实验目的 44 二、实验要求 44 三、实验内容 44 (一)使用图形 Graphics 44 实验7图形处理(二) 47 一、实验目的 47 二、实验要求 47 三、实验内容 47 (一)幻灯机效果——连续显示多幅图像 47 (二)使用滚动条改变背景颜色 48 (三)Applet 与 Application 合并运行 49 (四)创建电闪雷鸣的动画 50 实验8 流与文件 53 一、实验目的 53 二、实验要求 53 三、实验内容 53 (一)使用标准数据流的应用程序 53 (二)使用文件输入输出流的应用程序 54 (三)使用随机文件的应用程序 54 (四)使用数据输入输出流与文件输入输出流的应用程序 55 (五)使用对象输入输出流的应用程序 56 实验9 线程 58 一、实验目的 58 二、实验要求 58 三、实验内容 58 (一)Thread子的方法实现多线程 58 (二)实现Runnable接口的方法实现多线程 59 实验10 数据库的连接:JDBC 61 一、实验目的 61 二、实验要求 61 三、实验内容 61 (一)配置ODBC数据源 61 (二)编写程序,按照下表的结构建立"student"表 61 (三)编写程序,完成填写功能 62 (四)编写程序,完成查询功能 62
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值