《JAVA程序设计_教案(自用)精品资料.doc》由会员分享,可在线阅读,更多相关《JAVA程序设计_教案(自用)精品资料.doc(96页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java程序设计授课教案授 课 人:刘志成授课班级:NIITJava概述一、 Java历史Java来自于Sun公司的一个叫Green的项目,该项目的负责人为James Gosling(JAVA创始人)。Green项目的目的是为家用消费电子产品开发一个分布式代码系统,这样我们可以把E-mail发给电冰箱、电视机等家用电器,对它们进行控制,和它们进行信息交流。1990-1991年,James Gosling和项目小组成员基于C+开发一种新的语言Oak(Java的前身)。1995年,Gosling决定创建一个新的语言,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着J
2、ava(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,得到了其他人的赞赏,于是,Java这个名字就这样传开了。Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发,正在不断发展和完善。二、 Java特点简单:Java的风格类似于C+;Java摒弃了C+中容易引发程序错误的地方,如指针和内存管理;Java提供了丰富的类库。面向对象:不支持类似C语言那样的面向过程的程序设计技术;Java支持静态和动态风格的代码继承及重用。分布式:Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。健壮:Java致力于检查程序在编
3、译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自已操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。Java提供Null指针检测数组边界检测异常出口字节代码校验。结构中立:Java将它的程序编译成一种结构中立的中间文件格式。Java源程序被编译成一种高层次的与机器无关的byte-code格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行。安全:指针和释放内存等C+功能被删除,避免了非法内存操作;当Java用来创建浏览器时,语言功能和一种浏览器本身提供的功能结合起来,使它更安全。可移植的:使得Java应用程序可以在配备了Jav
4、a解释器和运行环境的任何计算机系统上运行,Java语言规范中也没有任何“同具体实现相关”的内容。解释的:Java解释器(运行系统)能直接运行目标代码指令。高性能:Java可以在运行时直接将目标代码翻译成机器指令。多线程:使得在一个程序里可同时执行多个小任务(线程),多线程带来的更大的好处是更好的交互性能和实时控制性能。动态:允许程序动态地装入运行过程中所需要的类,这是C+语言进行面向对象程序设计所无法实现的。三、 Java版本J2SE(Java 2 Standard Edition):主要用于桌面开发。J2EE(Java 2 Enterprise Edition):主要用于企业级服务器。J2M
5、E(Java 2 Micro Edtion):主要用于手机等移动设备开发。JDK(Java Develop Kit):Java开发包。J2SDK(Java 2 Software Develop Kit):Java 2软件开发包。两者基本相同。JRE(Java Runtime Enviroment):Java运行环境。四、 Java环境构建1. JDK的下载2. 安装JDK3. 设置JDK的操作环境Path 中添加c:j2sdkbin建立classpath=.;c:j2sdklib五、 JDK的组成Java程序类型应用程序(Application):可在任何操作系统下执行的、可以是基于窗口(图形
6、界面)的或是基于控制台(字符界面)的。小应用程序(Applets):在Web页面内执行的Java程序,需要浏览器。1. Java源程序编辑可以使用Notepad或其他专门编译器编辑源程序(扩展名为java)。2. Java程序编译Java程序的编译程序是javac.exe。javac命令将Java程序编译成字节码(扩展名为.Class)。3. Java程序运行Java.exe命令解释java字节码文件,执行程序。4. Applet程序运行使用AppletViewer.exe,展示WEB页面中包含的Applet。5. Java文档生成使用javadoc.exe自动生成指定的范围内的JAVA软件文
7、档。六、 第一个Application程序HelloWorld.javapublic class HelloWorldpublic static void main(String args)System.out.println(Hello World! );/end of class HelloWorld七、 第一个JAVA Applet程序FirstApplet.javaimport java.applet.*;import java.awt.*;public class FirstApplet extends Applet public void paint(Graphics g) g.d
8、rawString(Hello World!,10,10); FirstApplet.html实验一 第一个JAVA程序C+代码转换为JAVA一、 Java与C+差别1. 数据类型(1) 增加了Byte和Boolean。(2) 去掉了pointer和structs(3) 字符类型存储16位Unicode格式的字符,而C+为8位的ASCII格式。(4) Java数据类型有固定的大小(操作系统无关)。如:C+中int在IBM PC中为16位,VAX-11中为32位。而在JAVA中均为32位,保证了JAVA的平台无关性。2. 继承性(1) Java不支持多重继承。(2) 要继承一个类,使用exten
9、ds关键字。3. 方法重载Java允许方法重载,但不允许运算符重载。4. 数组(1) Java中的数组是实在的对象,可以new分配内存。(2) 检查数据访问确保其下标在数组的范围内。5. 串对象(1) Java中String是一个实在的对象。(2) 一致性(对不同系统)和可靠性(不会引起程序中的内存泄漏)。6. Main()方法(1) main()方法必须在类内定义。(2) Java环境必须访问main()方法以执行程序。Main应声明为public,static,因为此类的任何对象在创建前必须存在。(3) 命令行参数args为String类型,个数由String类对象确定。7. 访问区分符(
10、1) Public:公共。(2) Protected:对所有子类和同一包中的类可见。(3) Private:私有(C+中缺省)。(4) Friendly:缺省。(5) Java中不可重设限制访问的方法。8. 废料收集(1) 可用new分配内存,但不可显式地释放内存。(2) 废料收集是自动释放不再使用对象内存的过程。(3) 废料收集器必须限制内存的碎片化。9. 抽象类和接口(1) C+中的Virtual类等价Java中abstract类。(2) 抽象类用来实现同一层次的类之间的继承关系。(3) 接口可用来实现不属于同一层次的不相关的类之间的继承关系。(4) 抽象的含义是只有方法的说明而不涉及方法
11、的实现。解释:抽象类:abstract class和interface在Java语言中都是用来进行抽象类(该抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法)。在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发
12、,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。二者关系:从某种意义上说,interface是一种特殊形式的abstract class。abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。附: Java与C的不同点1 Java没有预处理指令。(如C中的#define , #include , #ifdef等)
13、。C中的常量定义在Java中用static final来取代。2 Java中没有C中的全局变量。3 Java中的主类型的size是确定的,而C中主类型的size跟平台相关。4 Java中没有了指针,它使用了类似的句柄来取代指针,但是Java中不允许对句柄进行加减,没有取地址操作符之类的东东。5 Java有垃圾收集机制,不需要自己释放空间。6 Java没有goto语句。Java在C提供的控制语句基础上增加了异常处理和标签break和continue语句。这些可以替代goto的作用。7 C要求一个方法或块中使用的所有局部变量的定义在该方法或块的最开始处定义,而Java允许这些定义在方法或块的任意地
14、方出现。8 Java不要求在调用一个函数以前已经定义了该函数,可以在调用点后面定义。而C有这个要求。9 Java不支持C中的strut 和 union类型。Java支持方法重载。10 Java不支持C中的enum关键字。11 Java不支持C中的bitfields能力。12 Java不支持C的typedef。13 Java不支持C的方法指针。14. Java不支持C的可变参数表。二、 把C+代码转换为JAVA#include #include-import#include Class Customerclass前加public Char custmorID10;char-String Char
15、 name20; Int age; Public:Customer():省略Strcpy(customerID,”CID001”);字符变量直接赋值Strcpy(name,”Carol”);Age=29;Void displayDetails()void前加public Cout”Customer ID is”customerID;coutSystem.out.println Cout”Customer Name is”name; Cout”Customer Age is”age;Void main()void前加public staticCustomer custObj;Customer c
16、ustObj=new Customer()custObj.displayDetails();实验二 C+代码转换为JAVA(1.P.1)JAVA独立实践1static通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。如下所示:class Simple static void go() System.out.println(Go.); public class Cal public static void main(String args) Simple.go(); 调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用
17、程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。1. 静态变量静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了。看下面这段代码:class Value static int c=0; static void inc() c+; class Count public static void prt(String s) System.out.println(s); public static void main(String args) Val
18、ue v1,v2; v1=new Value(); v2=new Value(); prt(v1.c=+v1.c+ v2.c=+v2.c); v1.inc(); prt(v1.c=+v1.c+ v2.c=+v2.c); 结果如下:v1.c=0 v2.c=0v1.c=1 v2.c=1可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。同时,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。2. 静态类通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。3. Sy
19、stem.out.println分解一下这条语句。首先,System是位于java.lang包中的一个核心类,如果你查看它的定义,你会发现有这样一行:public static final PrintStream out;接着在进一步,点击PrintStream这个超链接,在METHOD页面,你会看到大量定义的方法,查找println,会有这样一行:public void println(String x)。由此可以看出:out是System的一个静态变量,所以可以直接使用,而out所属的类有一个println方法。finalfinal在Java中并不常用,然而它却为我们提供了诸如在C语言中定
20、义常量的功能,不仅如此,final还可以让你控制你的成员、方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或缺的地位,也是学习Java时必须要知道和掌握的关键字之一。1. final成员当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数
21、中给另外的值。下面这段代码演示了这一点:2. final方法将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。另外有一种被称为inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。3. final类当你将fin
22、al用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。This和super在Java中,this通常指当前对象,super则指父类的。This的两种用法:(1)当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实
23、现这个目。(2)this的另一个用途是调用当前对象的另一个构造函数。1. 在一般方法中最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”,而不带this的那个便是形参。另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。下面的代码演示了上面的用法:public class DemoThis private String name; private int age;
24、 DemoThis(String name,int age) setName(name); /你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的 setAge(age); this.print(); public void setName(String name) this.name=name;/此处必须指明你要引用成员变量 public void setAge(int age) this.age=age; public void print() System.out.println(Name=+name+ Age=+age);/在此行中并不需要用th
25、is,因为没有会导致混淆的东西 public static void main(String args) DemoThis dt=new DemoThis(Kevin,22); 在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。class Person public int c; private String name; private int age; protected void setName(String name) this.name=name; protected void setAge(i
26、nt age) this.age=age; protected void print() System.out.println(Name=+name+ Age=+age); public class DemoSuper extends Person public void print() System.out.println(DemoSuper:); super.print(); public static void main(String args) DemoSuper ds=new DemoSuper(); ds.setName(kevin); ds.setAge(22); ds.prin
27、t(); 在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点:DemoSuper:Name=kevin Age=22这样的使用方法是比较常用的。另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。2. 在构造函数中构造函数是一种特殊的方法,在对象初始化的时候自动调用。在构造函数中,this和super也有上面说的种种使用方式,并且它还有特殊的地方,请看下面的例子:class Person pub
28、lic static void prt(String s) System.out.println(s); Person() prt(A Person.); Person(String name) prt(A person name is:+name); public class Chinese extends Person Chinese() super(); /调用父类构造函数(1) prt(A chinese.);/(4) Chinese(String name) super(name);/调用父类具有相同形参的构造函数(2) prt(his name is:+name); Chinese
29、(String name,int age) this(name);/调用当前具有相同形参的构造函数(3) prt(his age is:+age); public static void main(String args) Chinese cn=new Chinese(); cn=new Chinese(kevin); cn=new Chinese(kevin,22); 在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的构造函数,如1和2处。this后加参数则调
30、用的是当前具有相同参数的构造函数,如3处。当然,在Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它是父类中的方法且可被子类访问),它照样可以正确运行。JAVA用户界面设计基础一、 良好用户界面的必要性二、 用户界面的类型1. 图形用户界面(GUI)2. 字符用户界面(CUI)三、 GUI的组件四、 AWT和JFC1. AWT抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户
31、界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中, AWT设计的初衷是支持开发小应用程序的简单用户界面。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。java.awt包中提供了GUI设计所使用的类和接口,可从图中看到主要类之间的关系。java.awt包提供了基本的java程序的GUI设计工具。主要包括下述三个概念:组件Compone
32、nt容器(Container):也是一个类,实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。布局管理器(LayoutManager): 每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。2. SwingSwing是从AWT发展而来的。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。在javax.swing包中,定义了两种类型的组件:顶层容器(JFrame,JApplet,JDialog和JWindow)和轻量级组件。Swing组件都是AWT的Conta
33、iner类的直接子类和间接子类。Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件以J开头,除了有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。Swing的程序设计一般可按照下列流程进行:1 引入Swing包2 选择外观和感觉3 设置顶层容器4 设置按钮和标签5 向容器中添加组件6 在组件周围添加边界7 进行事件处理组件从功能上分可分为:(1) 顶层容器:JFrame,JApplet,JDialog,JWindow共4个(2)
34、 中间容器:JPanel,JScrollPane,JSplitPane,JToolBar(3) 特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame,JLayeredPane,JRootPane.(4) 基本控件:实现人际交互的组件,如Jbutton, JComboBox, JList, JMenu, JSlider, JtextField。(5) 不可编辑信息的显示:向用户显示不可编辑信息的组件,例如JLabel, JProgressBar, ToolTip。(6) 可编辑信息的显示:向用户显示能被编辑的格式化信息的组件,如JColorChooser, JFileChoos
35、e, JFileChooser, Jtable, JtextArea。五、 JFrame1. 从JFrame类继承得到Frame对象JFrameExtend.java/该示例演示了从JFrame类继承得到Frame对象import javax.swing.*;public class JFrameExtend extends JFramepublic JFrameExtend()setTitle(Frame From Extend);setSize(300,200);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);public
36、static void main(String args)new JFrameExtend();2. 通过JFrame类实例化Frame对象JFrameClass.java/该示例演示了通过JFrame类实例化Frame对象import javax.swing.*;public class JFrameClassstatic JFrame frm;public static void main(String args)frm=new JFrame(Frame From Class);frm.setSize(300,200);frm.setVisible(true);frm.setDefault
37、CloseOperation(frm.EXIT_ON_CLOSE);六、 组件应用综合实例CustomerGui.java/该示例演示了SWING组件的应用import javax.swing.*;public class CustomerGuiJFrame frm;JPanel pnlFirst;JButton btnFirst;JButton btnSecond;JLabel lblDate;JTextField txtDate;JList lstCountry;JComboBox cmbCity;JMenuBar mnuBar;JMenu mnuFile,mnuEdit,mnuSearc
38、h,mnuHelp;JMenuItem itmFile,itmEdit,itmSearch,itmHelp;public Customer()btnFirst=new JButton(First Button);btnSecond=new JButton(Second Button);lblDate=new JLabel(Enter Date:);txtDate=new JTextField(12);String country=China,Japan,India,United State,United Kingdom;lstCountry=new JList(country);String
39、city=ChangSha,ZhuZhou,HeYang,XiangTan;cmbCity=new JComboBox(city);mnuBar=new JMenuBar();mnuFile=new JMenu(File);mnuEdit=new JMenu(Edit);mnuSearch=new JMenu(Search);mnuHelp=new JMenu(Help);itmFile=new JMenuItem2;itmFile0=new JMenuItem(Open);itmFile1=new JMenuItem(Exit);for (int i=0;iitmFile.length;i+
40、)mnuFile.add(itmFilei);mnuBar.add(mnuFile);mnuBar.add(mnuEdit);mnuBar.add(mnuSearch);mnuBar.add(mnuHelp);pnlFirst=new JPanel();pnlFirst.add(btnFirst);pnlFirst.add(btnSecond);pnlFirst.add(lblDate);pnlFirst.add(txtDate);pnlFirst.add(lstCountry);pnlFirst.add(cmbCity);frm=new JFrame(Customer Details For
41、m);frm.setJMenuBar(mnuBar);/该语句必须在JFrame实例化之后frm.getContentPane().add(pnlFirst);frm.setSize(300,300);frm.setVisible(true);frm.setDefaultCloseOperation(frm.EXIT_ON_CLOSE);public static void main(String args)Customer cust=new Customer();实验三 JAVA(2.P.1)JAVA独立实践2Applet程序一、 Applets概述使用applets可以增加网页的动态效果,
42、也可以使用applets让WEB是可交互的。同时,由于applets是下载到计算机本地执行,可以减少在WEB服务器上的加载。二、 JApplet类1. 概述要创建applet,需要使用JApplet类层次结构。JApplet类层次结构允许程序员编写的applet使用快速编写网页所需的所有属性。2. 生命周期(1) init()applet首次加载到计算机内存中时将调用该方法。功能类似构造函数,即系统将自动执行这个方法。因此可以将初始化变量和组件的语句写在init()方法中。(2) start()在调用init()后调用该方法,而且在用户每次访问其他页面并返回到包含applet的页面时,该方法被
43、调用。因此,如果程序员希望在用户每次访问页面的时候重新启动某进程,则可以使用这个方法。(3) stop()当applet失去焦点时,调用该方法。可以使用这个方法重新设置变量和停止正在运行的线程。(4) destroy()当用户开始浏览另一个网页时将调用destroy()方法。可以使用这个方法来完成关闭文件等清理操作。注意:JAVA环境会自动调用这些方法,因此,必须将这些方法声明为public,同时这些方法都没有参数。三、 Applet实例AppletExample.javaimport java.awt.*;/保证drawString能正常使用import javax.swing.*;/import java.applet.*;public class AppletExample extends JAppletpublic void paint(Graphics g)g.drawString(The Applet Example,20,20);注意:(1)如果Applet中需要包含Swing组件,必须从JApplet类继承,否则可以从Applet类继承。(2)如果从Applet类继承必须添加i