Java程序设计实验指导书20xx

时间:2024.3.31

面向对象程序设计实验指导书

20##年9月

信息工程学院 计算机系  侯向华

目录

实验一 熟悉java程序的编辑、编译和运行过程... 3

实验二 Java语言程序设计基础训练... 5

实验三 类的封装性和继承性设计... 7

实验四 设计实现接口的类... 10

实验五 异常处理... 12

实验六 图形用户界面设计... 14

实验七 Applet应用程序设计... 15

实验八  输入/输出流和文件操作... 17

附录:... 20

Java Learning Path (一)、工具篇... 20

Java Learning Path(二)、书籍篇... 22

Java Learning Path(三)过程篇... 23

Java Learning Path(四) 方法篇... 25

Java Learning Path(五)资源篇... 26

实验课时安排:

实验一熟悉java的编程环境  2

实验二java语言基础   2

实验三类的设计与使用     4

实验四设计实现接口的类   2

实验五异常处理   2

实验六图形用户界面设计   4

实验七Applet应用程序设计  2

实验报告撰写要求:

一、           实验目的

用自己的话简要写明本次实验应该掌握的知识点。

二、           实验内容与要求

1、用自己的语言简要的写明本次实验的所作的工作。

2、完成指定的程序,

实验中的程序分为三种,撰写方式如下:

1)  给出全部代码。这种请在实验报告中写明程序的运行结果(不必抄写程序),记录遇到的问题,搜集调试程序中遇到的错误提示,并简做略分析。

2)  给出部分代码。这种请在实验报告中给出你所作部分,给出运行结果,记录遇到的问题,搜集调试程序中遇到的错误提示,并作简略分析。

3)  自己撰写程序。如果代码过长,请在实验报告中给出主要代码和运行结果,记录遇到的问题,搜集调试程序中遇到的错误提示,并作简略分析。 

三、           实验心得

四、           回答老师指定的思考题目

Note:如果有同学实验报告打印的话,请将排版成实验报告的形式。

实验一 熟悉java的编程环境

五、           实验目的

1.         了解和使用J2sdk1.5.0(JDK)集成环境。

2.         了解和掌握JCREATOR集成环境的安装,简单应用。

3.         了解Java Application和Applet程序的基本结构。

4.         了解Java程序文件名和类名的说明方法。

六、           实验内容与要求

1、安装j2sdk,jcreator并把帮助文档配置好。

2、输入一个Application源程序,学习编辑、编译、运行程序的方法。

//例1-1 文件HelloWorldApp.java如下:

//  HelloWorldApp.java

public class HelloWorldApp{           

public static void main(String args[]){

System.out.println(″Hello World!″);

}

}

本程序的作用是输出下面一行信息:

  Hello World!

请在jcreator中运行该程序。

2、输入一个applet源程序,学习编辑、编译、运行程序的方法。

  简单的Applet小程序

例1-2 // HelloWorldApplet.java

import java.awt.*;

import java.applet.*;

public class HelloWorldApplet extends Applet{   //anapplet

public void paint(Graphics g){

g.drawString(″Hello World in Applet!″,20,20);

}

}

 这个程序中没有实现main()方法,这是Applet与应用程序Application(如上例)的区别之一。为了运行该程序,首先我们也要把它放在文件HelloWorldApplet.java中,然后在jcreator中对它进行编译:

得到字节码文件HelloWorldApplet.class。由于Applet中没有main()方法作为Java解释器的入口,我们必须编写HTML文件,把该Applet嵌入其中,然后用appletviewer来运行,或在支持Java的浏览器上运行,如IE。它的<HTML>文件如下:
<HTML>
<HEAD>
<TITLE>An Applet</TITLE>
</HEAD>
<BODY>
<applet code=”HelloWorldApplet.class”width=200 height=40>
</applet>
</BODY>
</HTML>
其中用<applet>标记来启动HelloWorldApplet.code指明字节码所在的文件,width和height指明applet所占的大小,把这个HTML文件存入Example.html,然后运行该网页。
三:配置参考 

JCREATOR软件安装完成后,若要配置相关的东西,请打开配置->选项,如下,检查JDK配置文件是否安装好,如果没有点击新建完成配置。

七、           思考题

1.什么是Java虚拟机?它的作用是什么?

2.Java Application程序与Java Applet程序的不同之处有那些?请各位同学收集错误代码与提示信息,以及产生错误的原因。

3.上网搜索目前有哪些Java开发平台,分析他们的优缺点或特点。

八、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。

实验二 Java语言基础

一、           实验目的

1、掌握java语言的基本数据类型,各种运算符以及if,switch,while、do-while和for语句;

2、掌握一维数组的使用。

二、           实验内容与要求

1、仔细读下面的JAVA语言源程序,自己给出程序的运行结果

public class Ch21

   {

    public static void main(String args[])

      {

       char x,y,z;

       x='K';

       y='\\';

       z='\117';

       System.out.print(x);

       System.out.print(y);

       System.out.print(z);

      }

}

2、仔细读下面的JAVA语言源程序,自己给出程序的运行结果

public class Ch22

   {

    public static void main(String args[])

      {

       boolean x,y,z;

       int a=12,b=24;

       x=(a>b);

       y=(a!=b);

       z=(a+b==36);

       System.out.println("x="+x);

       System.out.println("y="+y);

       System.out.println("z="+z);

      }

    }

3、仔细读下面的JAVA语言源程序,自己给出程序的运行结果

public class  Ch23{

        public static void main(String args[])  {

       int x,y,z=0;

       for (x=1;x<=10;x++)

         for (y=1;y<10;y++)

           {

          if (x==5)

            continue;

         if (y>5)

             break;

         z++;

         }

       System.out.println("z="+z);

       }

    }

4.  编写程序:用字符串String数组存储英文字符串“java is an objected oriented programming language”

并计算单词个数和每个单词的平均字母数。

三、           思考题

1.break,continue在流程控制中的作用。

2.Java运算符的优先级与结合性是怎样的?

3.Java程序中可以定义中文字符的变量吗?

四、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。


实验三 类的设计与使用

一、           实验目的

1、熟练掌握类、对象的的概念以及对事物的抽象。

2、熟练掌握成员、方法的概念以及构造方法的概念。

3、熟练掌握封装性,多态性的概念

4、理解面向对象的程序设计方法。

二、           实验内容与要求

1.设计复数类

  设计一个复数类,成员变量包括实部和虚部,成员方法包括实现复数的加法、减法、比较、转换成字符串输出等。

public class Complex

{

    private double real,im;                //实部,虚部

    public Complex(double real, double im) //构造方法

    {

        this.real = real;

        this.im = im;

    }

   

    public Complex(double real)            //构造方法重载

    {

        this(real,0);

    }

   

    public Complex()

    {

        this(0,0);

    }

   

    public Complex(Complex c)              //拷贝构造方法

    {

        this(c.real,c.im);

    }

   

    public boolean equals(Complex c)       //比较两个对象是否相等

    {

        return this.real==c.real && this.im==c.im;

    }

   

    public String toString()

    {

        return "("+this.real+"+"+this.im+"i)";

    }

   

    public void add(Complex c)             //两个对象相加

    {                                      //改变当前对象,没有返回新对象

        this.real += c.real;

        this.im += c.im;

    }

   

    public Complex plus(Complex c)         //两个对象相加,与add()方法参数一样不能重载

    {                                      //返回新创建对象,没有改变当前对象

        return new Complex(this.real+c.real, this.im+c.im);

    }

   

    public void subtract(Complex c)        //两个对象相减

    {                                      //改变当前对象,没有返回新对象

        this.real -= c.real;

        this.im -= c.im;

    }

   

    public Complex minus(Complex c)        //两个对象相减,与subtract()方法参数一样不能重载

    {                                      //返回新创建的对象,没有改变当前对象

        return new Complex(this.real-c.real, this.im-c.im);

    }

}

class Complex__ex

{

    public static void main(String args[])

    {

        Complex a = new Complex(1,2);

        Complex b = new Complex(3,5);

        Complex c = a.plus(b);             //返回新创建对象

        System.out.println(a+" + "+b+" = "+c);

    }

}

2、为一个Java州立大学的学生建立账单系统,州内外的学生收费不同,州内每学分收费$75,州外为$200,每个学生账单上有学校名称,学生姓名,学分数以及账单总数。

public abstract class Student

{

       final static double INSTATE_RATE=75;

       final static double OUTSTATE_RATE=75;

       String name;

       int hours;//学分数

      

       public abstract void showStudent();

      

       public final void showSchool()

       {

              System.out.println("Java State University");

              System.out.println("**********************");

       }

}

public class OutStateStudent extends Student

{

       //添加相应的代码,要有构造方法

}

public class InStateStudent extends Student

{

       //添加相应的代码,要有构造方法

}

public class Test

{

       //添加相应的代码,测试上面的类

}

三、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。

3、评出成绩,按五级(A,B,C,D、E)评分。


实验四 设计实现接口的类

一、           实验目的

理解接口,设计实现接口的类

二、           实验内容与要求

1.请仔细阅读下面程序,体会接口的使用。

  该程序的功能是计算某商店商品的销售总额。

interface ComputeTotalSales

{

   public double totalSalesByYear();

}

class Television implements  ComputeTotalSales

{

   public double totalSalesByYear()

   {

      return 50000.456;

   }

}

class Computer implements  ComputeTotalSales

{

   public double totalSalesByYear()

   {

      return 50000.456;

   }

}

class Mobile implements  ComputeTotalSales

{

   public double totalSalesByYear()

   {

      return 50000.456;

   }

}

class Shop

{

   ComputeTotalSales[] goods;

   double totalSales=0;

   Shop(ComputeTotalSales[] goods)

   {

      this.goods=goods;

   }

   public double giveTotalSales()

   {

      totalSales=0;

      for(int i=0;i<goods.length;i++)

       {

         totalSales=totalSales+goods[i].totalSalesByYear();

       }

      return totalSales;

   }   

}

public class HappySale

{

   public static void main(String args[])

   {

      ComputeTotalSales[] goods=new ComputeTotalSales[50];

      for(int i=0;i<goods.length;i++)

       {

           if(i%3==0)

             goods[i]=new Television();

           else if(i%3==1)

             goods[i]=new Computer();

           else if(i%3==2)

             goods[i]=new Mobile();

       }

     Shop  shop=new Shop(goods);

     System.out.println("商店年销售额:"+shop.giveTotalSales());

   }

}

2、定义一个接口OneToN,在接口体中包含一个方法disp()。定义Sum和Pro类,并分别用不同代码实现OneToN中的disp()方法,在Sum的方法中计算1~n的和,在Pro中计算1~n的乘积。

三、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。

3、评出成绩,按五级(A,B,C,D、E)评分。

实验五 异常处理

一、           实验目的

1、理解什么是异常

2、掌握java的异常处理机制和方法

 

二、           实验内容与要求

1、仔细读下面的JAVA语言源程序,自己给出程序的运行结果

   mport java.io.*;

public class Ch61 {

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

       int[] ko=new int[15];

       int n,a;

       String x;

       BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));

       System.out.print("Enter an integer:");

       x=keyin.readLine();

       n=Integer.parseInt(x);

       try {

               a=110/n;

               ko[15]=100;

               System.out.println("此描述无法执行!");

          } catch(ArithmeticException e){

               System.out.println("除数为0的错误");

          } catch(ArrayIndexOutOfBoundsException f) {

        System.out.println("数组索引值大于数组长度的错误!");

          }

      System.out.println("执行完catch的描述!!!");

       }

   }

2.运行下面的程序,自己给出程序的运行结果。

import java.io.*;

public class Ch62{

public Ch62(){

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 Ch62 ();

}

}

3、自定义异常类。请为下面的Date2类定义一个异常类,当set方法的3个整形参数不能构成一个合法的日期时候,抛出异常,Date2类中的其他方法将捕获并处理该异常。

public class Date2                               //公有的类,与源程序文件同名

{

    private int year,month,day;                  //私有的成员变量

   

    public Date2(int y,int m,int d)              //指定参数的构造方法

    {

        set(y, m, d);                            //可以调用定义在后面的成员方法

    }

   

    public void set(int y,int m,int d)           //公有的成员方法,设置日期值,算法不全

    {

        this.year = y;

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

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

    }

}

三、           思考题

1. 本实验的实验内容2中,finally程序块的作用是什么?

2.异常分为哪两类?

3.如果申明int a[]=new int[-10];应属于那类异常

4.比较throw和throws两者的用法上的区别。

四、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。

3、评出成绩,按五级(A,B,C,D、E)评分。

实验六 图形用户界面设计

一、           实验目的

1. 掌握常用GUI控制组件的使用方法。

2. 掌握事件处理的方法。

3.了解swing控件的概念。

二、           实验内容

1.编程包含一个标签和一个按钮,单击按钮时,标签的内容在"你好"和"再见"之间切换。

2.编程包含一个文本框和一个文本区域,文本框内容改变时,将文本框中的内容显示在文本区域中;在文本框中按回车键时,清空文本区域的内容。

3.设计计算器,要求见教材P212。

三、           思考题

1.Java的事件处理机制是怎样的?

2.若一个数据只有两种取值可能,采用哪种组件表示比较合适?如果有二种到三种取值可能,采用哪种合适?如果取值的可能大于5个,采用哪种组件合适?

3.事件监听器和事件适配器的关系是什么?

4.编程包含两个按钮和一个标签,将发生单击事件的按钮上的文本信息显示在标签中。

提示:关键代码如下:

b1.addActionListener(new B1());

b2.addActionListener(new B2());

class B1 implements ActionListener {

public void actionPerformed(ActionEvent e) {

who.setText("Button 1");

}

}

class B2 implements ActionListener {

public void actionPerformed(ActionEvent e) {

who.setText("Button 2");

}

}

四、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。

3、评出成绩,按五级(A,B,C,D、E)评分。

2、编写实验报告,在下一次上实验课时提交。

3、评出成绩,按五级(A,B,C,D、E)评分。

实验七 Applet应用程序设计

一、           实验目的

1.掌握Java Applet程序结构和开发过程

2.了解Applet运行机制

二、           实验内容与要求

1.Java Applet程序开发过程

输入一个applet源程序,学习编辑、编译、运行程序的方法。

   简单的Applet小程序

例// HelloWorldApplet.java

import java.awt.*;

import java.applet.*;

public class HelloWorldApplet extends Applet{   //anapplet

public void paint(Graphics g){

g.drawString(″Hello World in Applet!″,20,20);

}

}

 这个程序中没有实现main()方法,这是Applet与应用程序Application(如上例)的区别之一。为了运行该程序,首先我们也要把它放在文件HelloWorldApplet.java中,然后对它进行编译:
  得到字节码文件HelloWorldApplet.class。由于Applet中没有main()方法作为Java解释器的入口,我们必须编写HTML文件,把该Applet嵌入其中,然后用appletviewer来运行,或在支持Java的浏览器上运行,如IE。它的<HTML>文件如下:
<HTML>
<HEAD>
<TITLE>An Applet</TITLE>
</HEAD>
<BODY>
<applet code=”HelloWorldApplet.class”width=200 height=40>
</applet>
</BODY>
</HTML>
其中用<applet>标记来启动HelloWorldApplet.code指明字节码所在的文件,width和height指明applet所占的大小,把这个HTML文件存入Example.html,然后运行IE中运行Example.html,注意HelloWorldApplet.class要和Example.html在同一文件夹中。
 

2.运行下面的程序,掌握Applet的生命周期与绘图周期。

import java.applet.*;

import java.awt.*;

public class LifeCycle extends Applet{

  

   private int InitCnt;

   private int StartCnt;

   private int StopCnt;

   private int DestroyCnt;

   private int PaintCnt;

  

   public LifeCycle(){//在init()执行前执行构造函数

          InitCnt = 0;

          StartCnt = 0;

          StopCnt = 0;

          DestroyCnt = 0;

          PaintCnt = 0;

   }

  

   public void init(){

         

          InitCnt++;

   }

  

   public void destroy(){

          DestroyCnt++;

   }

  

   public void start(){

          StartCnt++;

   }

  

   public void stop(){

          StopCnt++;

   }

  

   public void paint(Graphics g){

          PaintCnt++;

          g.setColor(Color.red);

  

       g.drawString("InitCnt:"+InitCnt,20,20);

       g.drawString("StartCnt:"+StartCnt,20,40);

       g.drawString("PaintCnt:"+PaintCnt,20,60);

       g.drawString("StopCnt:"+StopCnt,20,80);

       g.drawString("DestroyCnt:"+DestroyCnt,20,100);

   }

}

三、           思考题

1、说明Applet的生命周期。

2、构造方法、start()方法和init()方法谁先被执行?

2、说明Applet 类的继承关系。

3、Applet如何与网页中其他对象通信

4、说明Java和JavaScript的区别。

四、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。

3、评出成绩,按五级(A,B,C,D、E)评分。

实验八  输入/输出流和文件操作

一、           实验目的

1、理解流的概念,流的划分

2、 掌握文件描述,顺序处理,随机访问处理的方法;

3、  能够熟练的使用过滤流;掌握字符流处理的方法;

4、  理解对象串行化的概念和方法。

  

二、           实验内容与要求

 

1、  仔细读下面的JAVA语言源程序,自己给出程序的运行结果,理解File类的使用。

import java.io.*;

import java.awt.*;

import java.awt.event.*;

public class Ch71 extends Frame  {

    int n;

    String dirname="/jdk1.4";

    File file=new File(dirname);

    String[] flist=new String[100];

    Choice listFile=new Choice();

    TextField tf=new TextField();

    public Ch71(){

       setLayout(new BorderLayout(10,10));

       flist=file.list();

        for (n=0;n<flist.length;n++) {

             listFile.addItem(flist[n]);

              }

        add("North",listFile);

        add("South",tf);

setSize(250,200);

         setVisible(true);

        listFile.addItemListener(new koListener());

        addWindowListener(new koWindowListener());

       }

    public static void main(String args[]) {

   new Ch71();

      }

    class koListener implements ItemListener {

         public void itemStateChanged(ItemEvent e) {

         String ko=(String)e.getItem();

          for (n=0;n<flist.length;n++)

          if (ko==flist[n])       {

              File f=new File(file+System.getProperty("file.separator")+ko);

           if (f.isFile()==true)

              tf.setText(ko+"是个文件!");

              if (f.isDirectory()==true)

              tf.setText(ko+"是个目录!");

          }

       }

   }

    class koWindowListener extends WindowAdapter {

     public void windowClosing(WindowEvent e) {

         dispose();

         System.exit(0);

       }

   }

}

2、仔细读下面的JAVA语言源程序,自己给出程序的运行结果

import java.io.*;

public class testRandom2{

public static void main(String args[]){

try{

RandomAccessFile rf=new RandomAccessFile("rtest.dat", "rw");

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

 rf.writeInt(i);

 rf.writeDouble(i*1.414);

 }

rf.close();

rf = new RandomAccessFile("rtest.dat", "rw");

rf.seek(5*(4+8));

rf.writeInt(47);

rf.writeDouble(47.00021);

rf.close();

rf = new RandomAccessFile("rtest.dat", "r");

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

 ;

 System.out.println("Value " + rf.readInt() + ": " + rf.readDouble());

}

rf.close();

}catch(IOException e){

System.out.println(e.toString());

}

}

}

3、编写程序,能接收键盘输入的字符串,并将字符串的内容写入文件。

三、           思考题

1、InputStream和OutputStream的基本方法是什么?

2、  DataOutputStream类的常用方法。

3、  Ascii编码和Unicode编码的区别?

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

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

四、           实验报告

1、实验完成后,检查是否达到试验目的。

2、编写实验报告,在下一次上实验课时提交。

3、评出成绩,按五级(A,B,C,D、E)评分。

附录:

Java Learning Path (一)、工具篇

一、 JDK (Java Development Kit)

JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。

1、 JDK的下载和安装
JDK又叫做J2SE(Java2 SDK Standard Edition),可以从Sun的Java网站上下载到,http://java.sun.com/j2se/downloads.html ,JDK当前最新的版本是J2SDK1.4.2,建议下载该版本的JDK,下载页面在这里:http://java.sun.com/j2se/1.4.2/download.html。

下载好的JDK是一个可执行安装程序,默认安装完毕后会在C:\Program Files\Java\目录下安装一套JRE(供浏览器来使用),在C:\j2sdk1.4.2下安装一套JDK(也包括一套JRE)。然后我们需要在环境变量PATH的最前面增加java的路径C:\j2sdk1.4.2\bin。这样JDK就安装好了。

2、 JDK的命令工具
JDK的最重要命令行工具:
java: 启动JVM执行class
javac: Java编译器
jar: Java打包工具
javadoc: Java文档生成器
这些命令行必须要非常非常熟悉,对于每个参数都要很精通才行。对于这些命令的学习,JDK Documentation上有详细的文档。

二、 JDK Documentation

Documentation在JDK的下载页面也有下载连接,建议同时下载Documentation。Documentation是最最重要的编程手册,涵盖了整个Java所有方面的内容的描述。可以这样说,学习Java编程,大部分时间都是花在看这个Documentation上面的。我是随身携带的,写Java代码的时候,随时查看,须臾不离手。

三、 应用服务器(App Server)

App Server是运行Java企业组件的平台,构成了应用软件的主要运行环境。当前主流的App Server是BEA公司的Weblogic Server和IBM公司的Websphere以及免费的Jboss,选择其中一个进行学习就可以了,个人推荐Weblogic,因为它的体系结构更加干净,开发和部署更加方便,是Java企业软件开发人员首选的开发平台。下面简要介绍几种常用的App Server:

1、 Tomcat
Tomcat严格意义上并不是一个真正的App Server,它只是一个可以支持运行Serlvet/JSP的Web容器,不过Tomcat也扩展了一些App Server的功能,如JNDI,数据库连接池,用户事务处理等等。Tomcat被非常广泛的应用在中小规模的Java Web应用中,因此本文做一点下载、安装和配置Tomcat的介绍:

Tomcat是Apache组织下Jakarta项目下的一个子项目,它的主网站是:http://jakarta.apache.org/tomcat/ ,Tomcat最新版本是Tomcat4.1.27,软件下载的连接是:http://www.apache.org/dist/jakarta/tomcat-4/binaries/ 。

下载Tomcat既可以直接下载zip包,也可以下载exe安装包(个人建议zip更干净些),不管哪种情况,下载完毕安装好以后(zip直接解压缩就可以了)。需要设置两个环境变量:

JAVA_HOME=C:\j2sdk1.4.2
CATALINA_HOME=D:\tomcat4 (你的Tomcat安装目录

这样就安装好了,启动Tomcat运行CATALINA_HOME\bin\startup.bat,关闭Tomcat运行shutdown.bat脚本。Tomcat启动以后,默认使用8080端口,因此可以用浏览器访问http://localhost:8080来测试Tomcat是否正常启动。

Tomcat提供了两个Web界面的管理工具,URL分别是:
http://localhost:8080/admin/index.jsp
http://localhost:8080/manager/html
在启用这两个管理工具之前,先需要手工配置一下管理员用户和口令。用一个文本工具打开CATALINA_HOME\conf\tomcat-users.xml这个文件,加入如下几行:

<role rolename="manager"/>
<role rolename="admin"/>
<user username="robbin" password="12345678" roles="admin,manager,tomcat"/>

这样用户“robbin”就具备了超级管理员权限。重新启动Tomcat以后,你就可以使用该用户来登陆如上的两个管理工具,通过Web方式进行Tomcat的配置和管理了。

2、 BEA Weblogic
Weblogic可以到BEA的网站上免费注册之后下载到最新的Weblogic8.1企业版,License可以免费使用1年时间,其实这已经完全足够了。Weblogic的下载连接:http://commerce.bea.com/index.jsp,Weblogic的在线文档:http://edocs.bea.com/ 。

3、 IBM Webshpere
Websphere同样可以下载到免费的试用版本,到IBM的developerWorks网站可以看到Websphere试用产品的下载和相关的Websphere的资料,developerWorks中文网站的连接是:http://www-900.ibm.com/developerWorks/cn/wsdd/ ,Websphere的下载连接:http://www7b.software.ibm.com/wsdd/downloads/WASsupport.html 。

4、 Jboss
Jboss是免费开源的App Server,可以免费的从Jboss网站下载:http://www.jboss.org/index.html,然而Jboss的文档是不免费,需要花钱购买,所以为我们学习Jboss设置了一定的障碍。在Jdon上有几篇不错的Jboss配置文档,可以用来参考:http://www.jdon.com/idea.html

四、 Java应用的运行环境

Java的应用可以简单分为以下几个方面:

1、 Java的桌面应用
桌面应用一般仅仅需要JRE的支持就足够了。

2、 Java Web应用
Java的Web应用至少需要安装JDK和一个web容器(例如Tomcat),以及一个多用户数据库,Web应用至少分为三层:
Browser层:浏览器显示用户页面
Web层:运行Servlet/JSP
DB层:后端数据库,向Java程序提供数据访问服务

3、 Java企业级应用
企业级应用比较复杂,可以扩展到n层,最简单情况会分为4层:
Browser层:浏览器显示用户页面
Client层:Java客户端图形程序(或者嵌入式设备的程序)直接和Web层或者EJB层交互
Web层:运行Servlet/JSP
EJB层:运行EJB,完成业务逻辑运算
DB层:后端数据库,向Java程序提供数据访问服务

4、 Java嵌入式应用
Java嵌入式应用是一个方兴未艾的领域,从事嵌入式开发,需要从Sun下载J2ME开发包,J2ME包含了嵌入式设备专用虚拟机KVM,和普通的JDK中包含的JVM有所不同。另外还需要到特定的嵌入式厂商那里下载模拟器。

Java Learning Path(二)、书籍篇

学习一门新的知识,不可能指望只看一本,或者两本书就能够完全掌握。需要有一个循序渐进的阅读过程。我推荐Oreilly出版的Java系列书籍。

在这里我只想补充一点看法,很多人学习Java是从《Thinking in Java》这本书入手的,但是我认为这本书是不适合初学者的。我认为正确的使用这本书的方法应该是作为辅助的读物。《Thinking in Java》并不是在完整的介绍Java的整个体系,而是一种跳跃式的写作方法,是一种类似tips的方法来对Java很多知识点进行了深入的分析和解释。

对于初学者来说,最好是找一本Java入门的书籍,但是比较完整的循序的介绍Java的语法,面向对象的特性,核心类库等等,在看这本书的同时,可以同步来看《Thinking in Java》,来加深对Java的理解和原理的运用,同时又可以完整的了解Java的整个体系。

对于Java的入门书籍,蔡学镛推荐的是Oreilly的《Exploring Java, 2nd Edition》 或者《Java in a Nutshell,2nd Edition(针对C++背景)》,我并没有看过这两本书。其实我觉得电子工业出版社的《Java 2编程详解》或者《Java 2从入门到精通》就很不错。

在所有的Java书籍当中,其实最最有用的,并不是O'reilly的 Java Serials,真正最最有用处是JDK的Documentation!几乎你想获得的所有的知识在Documentation里面全部都有,其中最主要的部分当然是Java基础类库的API文档,是按照package来组织的,对于每一个class都有详细的解释,它的继承关系,是否实现了某个接口,通常用在哪些场合,还可以查到它所有的public的属性和方法,每个属性的解释,意义,每个方法的用途,调用的参数,参数的意义,返回值的类型,以及方法可能抛出的异常等等。可以这样来说,所有关于Java编程方面的书籍其实都不过是在用比较通俗易懂的语言,和良好的组织方式来介绍Documentation里面的某个package里面包含的一些类的用法而已。所以万变不离其宗,如果你有足够的能力来直接通过Documentation来学习Java的类库,那么基本上就不需要看其他的书籍了。除此之外,Documentation也是编程必备的手册,我的桌面上有三个Documentation的快捷方式,分别是J2SDK1.4.1的Documentation,Servlet2.3的Documentation和J2SDKEE1.3.1的Documentation。有了这个三个Documentation,什么其他的书籍都不需要了。

对于Java Web 编程来说,最核心的是要熟悉和掌握HTTP协议,这个就和Java无关了,在熟悉HTTP协议之后,就需要熟悉Java的实现HTTP协议的类库,也就是Servlet API,所以最重要的东西就是Servlet API。当然对于初学者而言,直接通过Servlet API来学习Web编程有很大的难度,我推荐O'reilly的《Java Server Pages 》这本书来学习Web 编程。

EJB的书籍当中,《Enterprise JavaBeans, 2nd Edition》是一本很不错的书, EJB的学习门槛是比较高,入门很难,但是这本书完全降低了学习的难度,特别重要的一点是,EJB的学习需要结合一种App Server的具体实现,所以在学习EJB的同时,必须同步的学习某种App Server,而这本书相关的出了三本书,分别是Weblogic6.1,Websphere4.0和JBoss3.0上面部署书中例子的实做。真是既有理论,又有实践。在学习EJB的同时,可以边看边做,EJB的学习会变得很轻松。

但是这本书也有一个问题,就是版本比较旧,主要讲EJB1.1规范和部分EJB2.0的规范。而Ed Roman写的《Mastering EJB 2.0》这本书完全是根据EJB2.0规范写的,深入浅出,覆盖了EJB编程的各个方面,并且还有很多编程经验tips,也是学习EJB非常推荐的书籍之一。

如果是结合Weblogic来学习J2EE的话,《J2EE应用与BEA Weblogic Server》绝对是首选读物,虽然是讲述的Weblogic6.0,仍然值得购买,这本书是BEA官方推荐的教材,作者也是BEA公司的工程师。现在中文版已经随处可见了。这本书结合Weblogic介绍了J2EE各个方面的技术在Weblogic平台上的开发和部署,实践指导意义非常强。

在掌握了Java平台基础知识和J2EE方面的知识以后,更进一步的是学习如何运用OO的方法进行软件的设计,那么就一定要学习“设计模式”。Sun公司出版了一本《J2EE核心模式》,是每个开发Java企业平台软件的架构师必备的书籍。这本书全面的介绍了J2EE体系架构的各种设计模式,是设计师的必读书籍。

Java Learning Path(三)过程篇

每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法,只能给大家提供一点参考了。

学习Java的第一步是安装好JDK,写一个Hello World,? 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索清楚了,就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。

第二步是学习Java的语法。Java的语法是类C++的,基本上主流的编程语言不是类C,就是类C++的,没有什么新东西,所以语法的学习,大概就是半天的时间足够了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,这可能需要有人来指点一下,我当初是完全自己琢磨出来的,花了很久的时间。不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的。

第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习Java之前没有C++的经验,只有C的经验,我是大概花了一个月左右吧,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了不下5遍,才彻底领悟了。不过我想如果有C++经验的话,应该一两天时间足够了。那么在这个过程中,可以多看看《Thinking in Java》这本书,对面向对象的讲解非常透彻。可惜的是我学习的时候,并没有看到这本书,所以自己花了大量的时间,通过自己的尝试和揣摩来学会的。

第四步就是开始熟悉Java的类库。Java的基础类库其实就是JDK安装目录下面jre\lib\rt.jar这个包。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。据说有3000多个,我没有统计过。但是真正对于我们来说最核心的只有4个,分别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;

这四个包的学习,每个包的学习都可以写成一本厚厚的教材,而O'reilly也确实是这样做的。我觉得如果时间比较紧,是不可能通过读四本书来学习。我觉得比较好的学习方法是这样的:
首先要通读整个package的框架,了解整个package的class,interface,exception的构成,最好是能够找到介绍整个包框架的文章。这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍。

对包整体框架的把握并不是要熟悉每个类的用法,记住它有哪些属性,方法。想记也记不住的。而是要知道包有哪些方面的类构成的,这些类的用途是什么,最核心的几个类分别是完成什么功能的。我在给人培训的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但是我反复强调,我给你们讲这些包的不是要告诉你们类的方法是怎么调用的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提供了哪些类,每个类是用在什么场合,当我遇到问题的时候,我知道哪个类,或者哪几个类的组合可以解决我的问题,That'all!,当我们具体写程序的时候,只要你知道该用哪个类来完成你的工作就足够了。编码的时候,具体的方法调用,是边写代码,边查Documentation,所有的东西都在Documentation里面,不要求你一定记住,实际你也记不住3000多个类的总共将近10万个方法调用。所以对每个包的总体框架的把握就变得极为重要。

第五步,通过上面的学习,如果学的比较扎实的话,就打好了Java的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其他一些比较有用处的类。相信进展到这一步,Java的自学能力已经被培养出来了,可以到了直接学习Documentation的水平了。除了要做GUI编程之外,JDK里面其他会有用处的包是这些:
java.text.*;
java.net.*;
javax.naming.*;
这些包里面真正用的比较多的类其实很少,只有几个,所以不需要花很多时间。

第六步,Java Web 编程,Web编程的核心是HTTP协议,HTTP协议和Java无关,如果不熟悉HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举一反三,一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP协议的话,又有了Java编程的良好的基础,学习Servlet/JSP简直易如反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP来做项目了。

在Servlet/JSP的学习中,重头仍然是Servlet Documentation。Servlet API最常用的类很少,花比较少的时间就可以掌握了。把这些类都看一遍,多写几个例子试试。Servlet/JSP编程本质就是在反复调用这些类来通过HTTP协议在Web Server和Brower之间交谈。另外对JSP,还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了。

此外Java Web编程学习的重点要放在Web Application的设计模式上,如何进行业务逻辑的分析,并且进行合理的设计,按照MVC设计模式的要求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet和JSP之间进行流程的控制和数据的共享,以及Web Application应该如何配置和部署。

第七步,J2EE编程
以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难度比较大。

首先一定要学习好JNDI,JNDI是App Server定位服务器资源(EJB组件,Datasouce,JMS)查找方法,如果对JNDI不熟悉的话,EJB,JMS这些东西几乎学不下去。JNDI其实就是javax.naming.*这个包,运用起来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,就需要看看专门的文档规范了,比如web.xml的写法,ejb-jar.xml的写法等等。针对每种不同的App Server,还有自己的服务资源配置文件,也是需要熟悉的。

然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及该在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可以对于一个数据库连接进行事务控制(conn.setAutoCommit(false),....,conn.commit()),做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作,你能做的到吗?这时候只能用JTA了。假设操作过程是先往A数据库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不了把整个操作做为一个原子操作的。用JTA的话,由App Server来完成控制。

在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的,以及在什么情况下要用到EJB。

在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识,一个是UML,另一个是Design Pattern。Java企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件。在这个时候,应该开始把学习的重点放在设计模式和框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式。

J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有很多很多的企业技术,这里不一一进行介绍了。

另外还有一个最新领域Web Services。Web Services也完全没有任何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是EJB组件,还是.Net组件,还是什么CORBA组件,还是其他的什么实现,我也不需要知道。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人激动的技术领域。Web Services好像目前还没有什么很好的书籍,但是可以通过在网络上面查资料的方式来学习。

Java Learning Path(四) 方法篇

Java作为一门编程语言,最好的学习方法就是写代码。当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用几个类的方法,看看运行结果,这样非常直观的把类给学会了,而且记忆非常深刻。然后不应该满足把代码调通,你应该想想看如果我不这样写,换个方式,再试试行不行。记得哪个高人说过学习编程就是个破坏的过程,把书上的例子,自己学习Documentation编写的例子在运行通过以后,不断的尝试着用不同的方法实现,不断的尝试破坏代码的结构,看看它会有什么结果。通过这样的方式,你会很彻底的很精通的掌握Java。

举个例子,我们都编过Hello World


public class HelloWorld {  public static void main(String[] args) {    System.out.println("Hello World");  }}


很多初学者不是很理解为什么main方法一定要这样来定义public static void main(String[] args),能不能不这样写?包括我刚学习Java的时候也有这样的疑问。想知道答案吗?很简单,你把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,看看运行结果如何。

我当初学习Java的时候就是这样做的,把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。

此外,我对于staic,public,private,Exception,try{ }catch {}finally{}等等等等一开始都不是很懂,都是把参考书上面的例子运行成功,然后就开始破坏它,不断的根据自己心里面的疑问来重新改写程序,看看能不能运行,运行出来是个什么样子,是否可以得到预期的结果。这样虽然比较费时间,不过一个例子程序这样反复破坏几次之后。我就对这个相关的知识彻底学通了。有时候甚至故意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编程的掌握是及其深刻的。

其中特别值得一提的是JDK有一个非常棒的调试功能,-verbose
java –verbose
javac –verbose 以及其它很多JDK工具都有这个选项
-verbose 可以显示在命令执行的过程中,JVM都依次加载哪里Class,通过这些宝贵的调试信息,可以帮助我们分析出JVM在执行的过程中都干了些什么。

另外,自己在学习过程中,写的很多的这种破坏例程,应该有意识的分门别类的保存下来,在工作中积累的典型例程也应该定期整理,日积月累,自己就有了一个代码库了。遇到类似的问题,到代码库里面 Copy & Paste ,Search & Replace,就好了,极大提高了开发速度。最理想的情况是把一些通用的例程自己再抽象一层,形成一个通用的类库,封装好。那么可复用性就更强了。

所以我觉得其实不是特别需要例程的,自己写的破坏例程就是最好的例子,如果你实在对自己写的代码不放心的话,我强烈推荐你看看JDK基础类库的Java源代码。在JDK安装目录下面会有一个src.zip,解开来就可以完整的看到整个JDK基础类库,也就是rt.jar的Java源代码,你可以参考一下Sun是怎么写Java程序的,规范是什么样子的。我自己在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的细节的时候,往往会打开相应的类的源代码,通过看源代码,所有的问题都会一扫而空。

Java Learning Path(五)资源篇

1、 http://java.sun.com/ (英文)
Sun的Java网站,是一个应该经常去看的地方。不用多说。

2、http://www-900.ibm.com/developerWorks/cn/
IBM的developerWorks网站,英语好的直接去英文主站点看。这里不但是一个极好的面向对象的分析设计网站,也是Web Services,Java,Linux极好的网站。强烈推荐!!!

3、http://www.javaworld.com/ (英文)
关于Java很多新技术的讨论和新闻。想多了解Java的方方面面的应用,这里比较好。

4、http://dev2dev.bea.com.cn/index.jsp
BEA的开发者园地,BEA作为最重要的App Server厂商,有很多独到的技术,在Weblogic上做开发的朋友不容错过。

5、http://www.huihoo.com/
灰狐动力网站,一个专业的中间件网站,虽然不是专业的Java网站,但是在J2EE企业应用技术方面有深厚的造诣。

6、http://www.theserverside.com/ (英文)
TheServerSide是一个著名的专门面向Java Server端应用的网站。

7、http://www.javaresearch.org/
Java研究组织,有很多优秀的Java方面的文章和教程,特别是在JDO方面的文章比较丰富。

8、http://www.cnjsp.org/
JSP技术网站,有相当多的Java方面的文章和资源。

9、http://www.jdon.com/
Jdon论坛,是一个个人性质的中文J2EE专业技术论坛,在众多的Java的中文论坛中,Jdon一个是技术含量非常高,帖子质量非常好的论坛。

10、http://sourceforge.net/
SourgeForge是一个开放源代码软件的大本营,其中也有非常非常丰富的Java的开放源代码的著名的软件。

更多相关推荐:
Java程序设计实验报告

学生实验报告册(理工类)课程名称:JAVA程序设计实验专业班级:M11计算机科学与技术II学生学号:学生姓名:所属院部:XX学院指导教师:20XX20XX学年第二学期金陵科技学院教务处制实验报告书写要求实验报告…

JAVA简单记事本程序设计实验报告(带源码)

JAVA程序设计实验报告院系专业班级11计算机01班姓名任课教师XXX实验题目JAVA简单记事本程序设计目录目录1一引言211课程设计目的212题目说明213开发工具介绍2二总体设计421系统开发平台422系统...

java程序设计课程--实验报告-实验09

Java开发技术实验报告实验序号实验09实验项目名称条件和循环语句二

Java程序设计实验报告 哈工大

Java语言基础实验指导报告书20xx20xx年秋季学期使用班级姓名计算机科学与技术学院实验一Java编程开发环境一实验学时1学时二实验目的1学习从网络下载JDK开发工具与帮助文档2学习安装JDK开发工具及其文...

Java程序设计实验报告20xx

Java程序设计实验指导报告书目录实验1熟悉Java开发环境2实验2简单的输入输出处理3实验3类的练习6实验4Java图形用户界面设计9实验5Java数据流21实验6Java多线程52实验7Java网络功能练习...

JAVA程序设计实验报告

JAVA程序设计实验报告姓名葛猛学号119xx4183班级软件工程112班指导教师柯栋梁20xx年12月24日实验1利用JAVA反射技术分析类结构1实验内容运行程序指定一个要分析的类名称如javalangDou...

简单java程序设计 实验报告

广州大学实验报告学院商学院专业、班级11电子商务姓名、学号课程名称Java语言程序设计项目名称简单java程序设计实验时间:20##年3月8日简单java程序设计_实验报告

Java程序设计实验报告20xx

Java程序设计实验指导报告书班级学号姓名哈尔滨工业大学威海计算机科学与技术学院Java程序设计实验报告目录实验1熟悉Java开发环境3实验2简单的输入输出处理5实验3类的练习8实验4Java图形用户界面设计1...

java数据库编程实验报告

大连民族学院计算机科学与工程学院实验报告实验题目课程名称Java语言实验类型演示性验证性操作性设计性综合性专业软件工程班级102学生姓名杨腾飞学号20xx082225实验日期20xx年12月10日实验地点多媒体...

Java程序设计实验报告20xx

数学与系统科学系实验报告20xx20xx学年第一学期实验一实验项目Java基本语法练习实验日期月日三实验预习实验目的1理解Java程序语法结构掌握顺序结构选择结构和循环结构语法的程序设计方法2通过以上内容掌握J...

《Java程序设计》实验报告 --实验3

Java程序设计实验报告实验31828384858687888

java程序设计课程--实验报告-实验11

Java开发技术实验报告实验序号实验11实验项目名称面向对象设计

java程序设计实验报告(36篇)