基于J2SE 7.0进行GUI编程_第1页
基于J2SE 7.0进行GUI编程_第2页
基于J2SE 7.0进行GUI编程_第3页
基于J2SE 7.0进行GUI编程_第4页
基于J2SE 7.0进行GUI编程_第5页
已阅读5页,还剩267页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java教程目录第一章Java入门第二章面向对象编程第三章标识符、关键字和数据类型第四章表达式和流程控制基于J2SE7.0进行GUI编程第五章数组第六章类设计第七章高级类特性第八章异常和断言第十章建立JavaGUI第十一章GUI事件处理第十二章基于GUI的应用程序第十三章线程第十四章高级I/O流第十五章网络连接第十六章注解与反射第十七章JDBC简介第十八章使用JDBC高级特性第九章基于文本的应用程序基于J2SE7.0进行GUI编程----引言一、Java发展历史

1990年12月,Sun的工程师Patrick(帕特里克)和JamesGosling(詹姆斯.加索林)为嵌入式设备开发一种新的基础平台技术,项目名为"Green",JamesGosling在使用C++做开发时,碰了一头包,所以决定开发一种新的编程语言来实现这个项目,这个小语言随后被命名为Oak(橡树)。

1992年9月,Oak语言连同GreenOS(操作系统)和一些应用程序被用于投标时代华纳公司的机顶盒项目,但因为功能太强大给客户太多权利遭遇失败。

1993年的美国,互联网发展迅猛,1994年,Sun定位互联网,与此同时Sun将Oak命名为Java(爪哇,一种咖啡的名称),并用此针对互联网开发,诞生了Applet(浏览器java小应用程序),在浏览器端炫目的表现征服了互联网开发者,并一发不可收拾。

1995年,Sun正式对外公布了Java,并且发布了JDK1.0,即JavaDevelopmentKit,Java开发人员工具包。这种外形酷似C++,却包含一颗Smalltalk般纯洁的面向对象之心的全新程序设计语言及其平台,几乎在一夜之间就成为软件产业的新宠儿。

1996年,Sun正式发布Java1.0,同时召开第一届"JavaOne"大会。引起了当时众多知名厂商追随,包括NetScape(网景)、惠普、IBM、Oracle、Sybase等公司。

1997年,Sun发布JDK1.1,微软VJ++6.0加入支持、JBuilder加入支持。基于J2SE7.0进行GUI编程----引言1998-1999年,Sun发布JDK1.2(Java2SDKv1.2StandardEdition),将Java版本更名为2.0。同时将Java定位三个方向,即Java2StandardEdition(J2SE),Java2EnterpriseEdition(J2EE),Java2MicroEdition(J2ME)。J2SE定位于基于桌面应用开发,J2EE定位于基于企业级服务器端应用开发,J2ME定位于嵌入式设备(包括手机)应用开发。其中J2EE后来得到了飞速发展,同时J2ME也在嵌入式开发,犹其手机开发中得到了广泛应用,但J2SE中的AWT(抽象窗口工具包)/Swing(图象处理包)却使终被人们所诟病。

2000-2001年,Sun发布J2SE(Java2StandardEdition)1.32001年,Sun发布J2EE(Java2EnterpriseEdition)1.32002年,Sun发布J2SE1.4,自此Java的计算能力有了大幅提升。2002年,Sun发布J2EE1.42004年,Sun发布J2SE1.5,并同时更名为J2SE5.0

2005年,JavaOne大会召开,SUN公司公开JavaSE6.0,并同时将Java的各种版本名称中的数字"2"取消:J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。

2006年,SUN公司宣布Java全线采纳GNUGeneralPublicLicenseVersion2(GNU通用公共许可证),从而公开了Java的源代码。到现在为此,Java最成熟的应用仍然J2EE,在嵌入式设备中J2ME发展的也相当不错,J2ME需要它自己的JDK,而J2EE需要以J2SE做为基础。目前J2EE用的最多的还是J2EE1.4版本,JavaEE是J2EE的最新版本,引入了JDK5.0及6.0新的特性与技术。

Sun是java的发明者,但是却几乎没有从java身上挣到一分钱,java的最大受益者是IBM,其次是Bea、oracle等。基于J2SE7.0进行GUI编程----引言

二、Java的三个版本:Java2.0(JDK1.2)开始,JDK分为三个版本J2EE(企业级版本)J2SE(标准版本)J2ME(微型版本)J2ME基于J2SE7.0进行GUI编程----第一章Java入门本章主要介绍了Java的特性、Java核心技术的实现及功能,并通过一个简单的Java应用程序介绍了如何对Java程序进行编写、编译及运行,同时对编译及运行时错误进行处理。1.1什么是JavaTM技术?首先,Java是一种编程语言;其次,Java还是一种开发环境;再次,Java还是一种应用程序环境;最后,Java是一种部署环境。

Java编程语言的语法与C++(包括C#)的语法相似。任何传统编程语言所能创建的应用程序,都可以用Java编程来创建。作为开发环境,Java提供了一系列的工具来实现软件开发。包括:Java编译器、解释器、产品文档生成器、类文件打包工具等。

Java提供了对多种环境的支持,包括万维网(Web)及浏览器环境,在万维网(Web)服务器端Java提供了J2EE技术以开发基于互联网的企业级应用开发环境。在浏览器环境,Java提供了Java应用小程序(Applet)来实现浏览器端特殊效果及功能的开发,Applet驻留在Web服务器中,但在浏览器端被下载并于浏览器中执行,而且它可以与HTML进行交互。

Java应用程序是独立的应用程序,并可以跨平台在多种环境中被执行。只要在相应的平台中安装了该平台的Java运行时环境(JRE,JavaRuntimeEnvironment)。Sun公司、IBM、Bea、Oracle等都开发了相应版本的JRE,可用于不同的操作系统及平台。Java遵循"一次编写,到处运行"的跨平台理论,这使得Java风靡全球。基于J2SE7.0进行GUI编程----第一章Java入门

Java有两个主要的部署环境,第一个是Java2SDK(Java2软件开发工具包)中的JRE,它提供了标准的Java开发、编译及运行环境,是最主要的部署环境;第二个是适用于Web浏览器的JRE,大多数浏览器厂商都提供了浏览器环境的解释器和运行环境JRE。1.2Java技术的主要目标

Java语言由C++发展而来,但Java语言是简单的易于使用的编程语言。从历史角度来说:

Java语言="C++语言"–"C++中的复杂性和奇异性"+"安全性和可移植性"1、易于编程的语言

1)摒弃了C++中容易引发程序错误的一些特性及复杂特性,如指针及内存管理,并能进行自动内存管理,不用象C++一样需要自己管理内存的分配与释放。

2)完全面向对象最核心的东西是类与对象OO语言以类的形式组织代码并具有封装、继承、多态特性

3)、提供了丰富的类库,即SDK(SoftwareDevelopmentKit,软件开发包),使用这些类库有助于你简化代码

2、解释环境的特性:

1)、开发速度大大提高:缩短编译—链接—加载时间,缩短测试周期

2)、代码可移植性:解释环境执行的是非常接近于机器语言代码的Java二进制代码,所以仅与JVM(JavaVirtualMachine)有关,与操作系统无关,这导致代码可以容易在多个操作系统中运行。五月花NIIT软件开发基于J2SE7.0进行GUI编程----第一章Java入门

3、支持多线程编程,提高应用程序性能

4、允许程序下载代码模块,使得在程序运行时周期内可动态改变程序的方法

5、通过检查加载的代码模块来确定代码安全性(类加载器)

为了实现上述Java目标与特性,Java使用了自己独立的核心技术:

1、JVM:JavaVirtualMachine虚拟机,这是Java技术得以实现的最重要的技术和核心技术,不同的操作系统甚至手机操作系统都有不同的JVM版本,只要安装了相应版本的JVM,你的系统就支持Java程序。JVM通常是集成中JRE中。2、垃圾回收(GC):

Java使用垃圾回收技术实现自动内存管理、碎片收集,防止了内存分配问题,提高了开发效率。3、Java运行时环境JRE:通过JRE对程序进行解释、实时编译从而执行Java代码。

4、JVM应用程序接口(API):即Java核心类库1.2.1Java虚拟机JVM

JVM指的是在真实的计算机中使用用软件模拟实现的一种虚拟机器。JVM只能运行非常接近本地硬件及操作系统的二进制代码(字节码,bytecode),这些代码必须存储在.class文件中,每个.class文件最多包含一个public类,这个类我们称之为主类。

JVM提供了编译所有Java技术代码的硬件平台规范,这个规范与任何一个具体的操作系统及硬件都没有任何关系,所以JVM是使用Java软件技术规范实现的通用机。基于J2SE7.0进行GUI编程----第一章Java入门通过使用Java编译器(javac程序)可以将Java源程序文件(.java文件)编译为Java字节码文件(.class文件)。字节码是JVM的这个虚拟机器的机器语言指令代码,但它并不是当前操作系统及硬件能够直接执行的机器语言代码。

Java应用程序主要包括两大类:JavaApplication应用程序和JavaApplet小应用程序。分别运行于标准平台和浏览器环境。无论哪种应用程序,都需要一个JVM的实现。

JVM规范定义为:一套指令系统(类似于CPU指令系统)、一组寄存器、类文件格式、运行时堆栈、垃圾回收堆、一个内存区、致命错误报告机制和高精度计时支持。

JVM的代码格式由简洁、高效的字节码构成。Java仍然是一个严格的面向对象的编程语言,所以绝大部份错误都将在编译时被检查出来。这保证了字节码的健壮与安全特性。不同的操作系统平台有不同的JVM。而且不同的公司有不同JVM,IBM公司有IBM公司的JVM,Bea公司有Bea的JVM(JRockit),Sun公司有Sun的JVM(Hotspot)。无论在linux/unix或Windows平台上,Bea的JRockit与IBM的JVM性能表现不相上下,Bea稍快。而Sun的JVM(Hotspot)性能都要慢很多,Sun的Hotspot在Linux/unix下的表现要比在Windows下的表现差。所以Sun的JVM比较适合做开发,而客户目标平台上常常使用Bea或者IBM的JVM。

Java字节码没有保存特定平台的信息,具体与特定平台交互由JVM实现。基于J2SE7.0进行GUI编程----第一章Java入门注:SPARC,全称为"可扩充处理器架构"(ScalableProcessorARChitecture),是RISC微处理器架构之一。是Sun公司推出的,最多支持1000个处理器CPU。SPARC处理器是Sun的命脉,以UltraSPARC为基础的Unix服务器为Sun带进大量营收收入,包括在这个平台上Sun实现的SolarisOS操作系统。MIPSPPC是嵌入式设备处理器,RTOS为嵌入式设备操作系统,即实时操作系统。基于J2SE7.0进行GUI编程----第一章Java入门1.2.2垃圾回收在C、C++等语言中,程序员往往在编写程序时,常常需要使用内存、分配内存,并且程序员还需要手工释放所用的内存,否则可能带来系统崩溃和内存泄露等严格安全及稳定问题。而java支持垃圾回收,程序员现在可以不用再为手工释放程序占用的内存而烦恼了,这将由垃圾回收器(GC)帮助我们自动完成,垃圾回收器自动检查对象是否被引用,如果对象没有被任何其它对象引用,垃圾回收器将回收此对象。垃圾回收在JavaVM的整个生命周期中自动进行,它消除了手工释放内存的问题并避免了内存泄露,大大提高了软件的开发周期。不同的JVM对垃圾回收的实现可能不同。1.2.3Java运行时环境JRE一、JDK技术:JDK(JavaSoftwareDevelopmentKit,Java软件开发包)

JDK(JavaSoftwareDevelopmentKit)是SunMicrosystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的JavaSDK(SoftwareDevelopmentkit)。JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvironment,即JRE),一堆Java工具和Java基础的类库(例如rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM、BEA等。JDK的主要目的是利用JDK所提供的工具将Java源程序(.java文件)基于J2SE7.0进行GUI编程----第一章Java入门编译为Java字节码文件(.class文件),同时JDK也提供了我们开发人员所必须的Java基础类库。JDK从1.0到现在的1.6,经历了多个版本,JDK从1.5版本开始不再称之为1.5了而是称之为5.0,例如JDK1.6已经改名为JDK6.0,虽然有很多人仍然沿用习惯,但Sun官方版本命名已改变。在JDK5.0中,Java引入了枚举、泛型、注解等很多新特性。每个JDK版本安装后,都会自动安装相应版本的JRE。二、JRE技术(JavaRuntimeEnvironment,Java运行环境)JRE为JavaRunTimeEnvirment的简称,它是指运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JRE又分为两类:

1)、JavaApplication(Java应用程序)依赖的JRE(JavaRuntimeEnvironment):

JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机、Java平台核心类库和支持文件(JavaAPI)。它不包含开发工具--编译器、调试器和其它工具,仅包含运行环境。

JavaApplication包括Java开发的桌面应用程序,服务器端组件,Web应用程序、手机应用程序、嵌入式应用程序等。

2)、JavaApplet(Java小应用程序)依赖的JRE(JavaPlug-in浏览器插件):JavaPlug-in浏览器插件主要目的是为了便于在浏览器中运行JavaApplet。JavaPlug-in软件允许JavaApplet和JavaBean组件在相应浏览器中运行。JavaPlug-in插件可用于Netscape

Navigator、FireFox和MicrosoftInternetExplorer等支持Java的所有浏览器。基于J2SE7.0进行GUI编程----第一章Java入门JavaApplet(Java小应用程序)是指只能在客户端浏览器中运行的Java小程序。如果你要自行开发Java软件,请下载JDK。在JDK中附带有JRE。注意由于Microsoft对Java的支持不完全,请不要使用IE自带的Java虚拟机来运行Applet,务必安装一个相应浏览器版本的JRE或JDK。

在客户目标计算机上,我们只需要安装相应版本的JRE就可以让Java程序或者Applet运行起来。JRE的版本一般与JDK版本相对应,例如JDK1.6与JRE1.6等。下图展示了JRE以及JRE是如何增强代码安全的。编译javac从硬盘、网络或其它资源加载类加载器字节码校验器解释器运行时底层硬件java运行时编译得到字节码文件字节码文件被加载解释执行在运行时,Java字节码被加载、检验并在解释器中运行。如果执行Applet,则浏览器下载字节码文件,在浏览器内存的JVM中解释执行。解释器需要实现两大代能:执行字节码以及正确调用底层硬件资源。基于J2SE7.0进行GUI编程----第一章Java入门

在Java运行时环境(JRE)中,需要将Java字节码解释然后再执行,然而这降低了代码的执行速度。因此,Java将字节码在运行时编译成本地机器语言代码,并直接在硬件平台上执行,从而提高代码执行速度,这样代码的运行速度将非常接近于C以及C++,但因为要在运行时进行编译,这会带来少许加载时间的延迟,以使得代码能够编译为本机代码。这需要使用Java的JIT(JustInTime)即时编译器来完成。编译javac从硬盘、网络或其它资源加载类加载器字节码校验器解释器运行时底层硬件java运行时编译得到字节码文件字节码文件被加载解释执行带有即时编译器(JIT)的JRE代码编译及执行过程JIT代码生成器基于J2SE7.0进行GUI编程----第一章Java入门1.2.4JVM任务

JVM主要有三个任务:加载代码、校验代码、执行代码。一、类加载器-加载代码:类加载器加载程序执行所需的全部类。类加载器通过将本地文件系统的类命名空间与网络源导入的类命名空间分隔开来,以增加安全性。由于总是首先加载本地类,因而可以限制任何"特洛依木马"程序的运行。当全部类被加载后,可执行文件的内存布局就确定了。这时,符号引用被赋值为具体的内存地址,并创建了内存变量的查询表。由于内存布局在运行时产生,Java技术解释器增加了保护,以防止对受限代码区的未授权访问,从而提高了程序的安全。二、字节码校验器:

Java软件代码在计算机上实际运行之前要经过几次测试。JVM通过字节码校验器对代码进行测试,以检查非法代码段,以防止非法伪造指针、违反对象访问权限或试图改变对象类型的代码。所有网络导入的类文件都要经过字节码校验器的验证,以提高安全。校验过程:字节码校器对程序将进行四次校验,以确保代码符合JVM规范并且不违反系统的完整性。如果校验器在完成四次校验后未返回错误消息,则说明:

1、类符合JVM规范指定的类文件格式

2、没有访问权限违例

3、代码未引起操作数堆栈上溢或下溢

4、所有操作代码的参数类型是正确的

5、无非法数据转换发生,如将整数转换为对象引用然后,JVM开始解释执行代码。基于J2SE7.0进行GUI编程----第一章Java入门1.3Java的工作方式

1、文件类型.java Java源代码文件.class 二进制字节码文件

2、运行机制对于大多数语言,要运行程序,要么编译程序要么解释程序;而Java语言的程序则既要被编译又要被解释。3、其工作方式为:

1)、编译程序将Java源程序编译为字节码(bytecode)程序;

2)、解释程序(Java虚拟机中的解释程序)分析并运行字节码程序。

基于J2SE7.0进行GUI编程----第一章Java入门1.4Java开发工具:1、记事本+JDK:适合初学者,并能了解Java程序执行逻辑

2、JCreator:适合初学者,一个简单免费的IDE(集成开发环境)

3、JBuilder:Bland公司非常强大的IDE(商业的集成开发环境),已走下坡路

4、NetBeans:Sun公司开源免费IDE,速度比较慢,适合做桌面开发

5、Eclipse:IBM资助的开源免费IDE,是目前企业主流开发平台,最新版3.5及JavaEEforEclipse。

1.5、JDK的下载与安装:为了鼓励使用Java语言开发软件,SunMicrosystems公司提供了免费开源的软件开发工具包(SDK),其中包括编译器、虚拟机、调试器等开发工具,称为Java开发工具包或JDK。JDK(可从下载最新版本)jdk6.0

基于J2SE7.0进行GUI编程----第一章Java入门1.6安装JDK后产生如下目录结构:\bin目录:Java开发工具,包括Java编译器、解释器等\demo目录:一些实例程序\lib目录:Java开发类库\jre目录:Java运行环境,包括Java虚拟机、运行时类库等1.7JDK实用程序:1、javacJava编译器,将Java源程序编译成字节码2、javaJava解释器,直接从类文件执行Java应用程序,即application3、appletviewer小程序浏览器,执行html文件上的Java小程序,即Applet1.8设置环境变量:

1、JAVA_HOME:JAVA_HOME环境变量主要设置JDK的安装目录这个环境变量主要为其它java环境变量服务,使用:%JAVA_HOME%2、PATH:…;%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;

使得在Windows命令窗口下能直接使用bin中的实用程序。在Windows操作系统"运行"中输入cmd进入命令窗口,在提示符下输入:

c:\>java-version如果能够看到java版本提示信息,表示环境变量配置成功。基于J2SE7.0进行GUI编程----第一章Java入门

3、CLASSPATH:为java加载类(classorlib)路径,只有类在CLASSPATH中,java命令才能识别。设为:.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar1.9一个简单的Java应用程序HelloWorld一、程序示例:保存到c:\java\TestGreeting.java,代码如下:publicclassTestGreeting{publicstaticvoidmain(String[]args){Greetinghello=newGreeting();hello.greet();}}保存到c:\java\Greeting.java,代码如下:publicclassGreeting{publicvoidgreet(){System.out.println("Java,你好");}}基于J2SE7.0进行GUI编程----第一章Java入门二、TestGreeting应用程序:publicclassTestGreeting{publicstaticvoidmain(String[]args){Greetinghello=newGreeting();hello.greet();}}三、Greeting类publicclassGreeting{publicvoidgreet(){System.out.println("Java,你好");}}四、编译和运行TestGreeting应用程序确保操作系统的Path环境变量增加了JDK安装文件夹下的bin文件夹路径。c:\java>javacTestGreeting.javac:\java>javaTestGreeting基于J2SE7.0进行GUI编程----第一章Java入门五、诊断编译错误

1、编译时错误

1)、javac:Commandnotfound环境变量Path没有配置好,请在Path中增加jdk安装文件夹下的bin文件夹的路径

2)、语法错误:

如:System.out.printl("Java,你好");3)、类和文件命名错误:如果一个.java文件中包含一个public类,则该文件的主文件名必须与这个类名完全相同,包括大小写。示例:

4)、类的个数每一个.java文件中只能声明一个顶级非静态的public类,且这个类的名称必须与.java文件主文件名完全相同。如果在一个源文件.java中声明了多个public类,将发生错误。每个.java文件中允许非public的类多个。2、运行时错误

1)、Can’tfindclassTestGreeting

java是严格区分大小写的,这个运行时错误说明TestGreeting类没有找到

2)、Exceptioninthread"main"java.lang.NoSuchMethodError:main这表示,解释器要执行的类没有一个静态的main方法,可能只有一个非静态的main方法,你需要为这个main方法加上static关键字。或者是main方法的参数格式错误。基于J2SE7.0进行GUI编程----第一章Java入门六、在上面HelloWorld示例中,下图演示了如何进行编译及运行TestGreeting.javaGreeting.javaTestGreeting.classGreeting.classjavac也编译JVMjava也加载UNIXJVMDOSJVMJavaOS可运行于多个平台编译运行时基于J2SE7.0进行GUI编程----第二章面向对象编程本章主要介绍了Java的类的层次结构、java中类的实现、类中成员、属性、方法、构造器、包、使用JavaAPI在线文档等相关知识,以及面向对象编程建模、软件工程等概念。2.1软件工程2.1.1软件工程发展历史软件工程是一门异常困难且难以驾驭的学科。软件工程的目的旨在通过让代码复用来使软件系统的开发、维护与扩展更容易。软件工程自从软件诞生以来一直在发展,历史如下:一、机器代码(二十世纪四十年代末--现在)

二、高级语言(二十世纪五十年代--现在)操作系统(二十世纪六十年代--现在)

FortranLISPCCOBOLOS/360UNIXMacOSWindows

三、库/函数API(二十世纪六十年代--二十世纪八十年代初)

NASTRANTCP/IPISAMX-WindowsOpenLook

四、面向对象的语言(二十世纪八十年代--现在)

SELFSmalltalkCommonLispObjectSystemEiffelC++Java

五、工具包/框架/对象API(二十世纪九十年代--现在)

Java2SDKAWT/J.F.C./SwingJiniJavaBeansJDBC从最早期的机器代码,到后面的高级语言,到面向对象的编程语言及框架的诞生,目的都是使对软件的开发更容易,对代码的组织与维护、代码的复用更方便。Java从1995年诞生后,发展至今有许多软件技术和框架,并且现在还在不断增加。基于J2SE7.0进行GUI编程----第二章面向对象编程2.1.2分析和设计阶段软件开发项目分为五个主要工作流程:需求捕获、分析、设计、实现和测试。每一个阶段都非常重要,但往往分析与设计阶段对后续的实现与测试影响很大,因为在分析和设计阶段确定了软件开发的方向。在分析阶段需要定义系统的功能任务,分析阶段必须明确要操作的目标系统所涉及的对象以及对象间的行为和关系。设计阶段需要定义系统并如何实现目标及功能任务,在该阶段需要创建目标系统中的角色、活动、对象和行为模型,这可以使用统一建模语言(UML)来实现建模。

UML是一种大型且复杂的建模语言,主要用于设计阶段,通过相应的UML建模软件例如IBM的Rose建模软件,可以方便实现软件建模,并支持生成代码。2.1.3分析和设计举例:略2.1.4抽象软件设计一直在从低级的构造向更高级发展。可以简化和抽象来实现这个发展。简化就是在早期语言设计都构建高级语言或技术时,不使用原始的复杂的东西,而采用简单的技术。抽象是指强制在公有接口后面隐藏私有实现的细节。抽象的要领导致了高级语言中子程序(函数)的出现,以及对象中函数与数据的配对。在更高级别上,抽象导致了框架和API的诞生与发展。基于J2SE7.0进行GUI编程----第二章面向对象编程2.1.5作为对象蓝图的类类是一种软件蓝图,可以实例化到得对象,从而被使用。类与对象中允许包括属性及方法,这称之为类与对象中成员。类具有三大特性:封装、继承和多态特性。2.2声明Java技术类:格式:

[访问修饰符]class类名{//属性定义部分

//构成器定义部分

//方法定义部分}

注:类名遵循变量的名称规则,访问修饰符只能使用public或<缺省>,public说明类可以被任意访问。示例:

publicclassVehicle{privatedoublemaxLoad;publicvoidsetMaxLoad(doublevalue){maxLoad=value;}}基于J2SE7.0进行GUI编程----第二章面向对象编程2.3声明属性:在类中声明格式:

[访问修饰符]数据类型属性名称[=表达式|值];示例:

publicclassVehicle{ privateintx; privatefloaty=10000.0F; privateStringname="BatesMotel";}

注:private声明为私有的属性,只能供类本身使用。基于J2SE7.0进行GUI编程----第二章面向对象编程2.4声明方法:在类中声明格式:

[访问修饰符]返回值数据类型方法名称(类型1参数变量1,…,类型n参数变量n){//方法体

//允许使用return中止函数执行,并返回值,格式:return;或return表达式;}

说明:返回值类型可以为void,表示返回无值。示例:

publicclassDog{ privateintweight; publicintgetWeight(){returnweight;} publicvoidsetWeight(intnewWeight){ if(newWeight>0){ weight=newWeight; }}}基于J2SE7.0进行GUI编程----第二章面向对象编程2.5访问对象成员:格式:类名对象名=new类名();

对象名.成员;

对象名.成员函数();

示例:将使用前面的Dog类publicclassTestDog{publicstaticvoidmain(String[]args){ Dogd=newDog(); System.out.println("狗的体重为:"+d.getWeight());d.setWeight(42); System.out.println("狗的体重为:"+d.getWeight());d.setWeight(-42); System.out.println("狗的体重为:"+d.getWeight());}}基于J2SE7.0进行GUI编程----第二章面向对象编程2.6信息隐藏:技术:使用private、public等访问修饰符。例如:有一个MyDate类,包括属性:day、month和year。在UML(统一建模语言)中,类图如右。实现如下:

publicclassMyDate{ publicintday; publicintmonth; publicintyear;}

然后如果客户端代码如下,会导致出现错误:

MyDated=newMyDate();d.day=32;//非法的日子d.month=2;d.day=30;//2月没有30天d.day=d.day+1;//2月更没有31天

因此,对于上述代码的问题,最好是让客户端代码不能直接访问三个属性。而采用setXyz()(在java中通常称之为setter设置器)来设置三个属性的值,并做验证;采用getXyz()(在java中通常称之为getter获取器)来得到三个属性的值。将三个属性设置为私有private。类图如右:d.setDay(32);//非法的日子,检查后返回falsed.setMonth(2);d.setDay(30);//2月没有30天返回falsed.setDay(d.getDay()+1);//2月更没有31天返回false+day:int+month:int+year:intMyDate-day:int-month:int-year:intMyDate+getDay()+getMonth()+getYear()+setDay(int):boolean+setMonth(int):boolean+setYear(int):boolean基于J2SE7.0进行GUI编程----第二章面向对象编程2.7封装:对于客户端程序隐藏该隐藏的,开放该开发的就是封装。这些要使用public、private这样的访问修饰符来实现。使用封装特性,可以使对类的更改让客户端程序没有私毫察觉。例如:对于上面的MyDate类的开发人员决定使用一个相对于某一天(纪元日)的过去的天数做为MyDate的日期存储基础,以实现日期的比较和日期间隔的轻松计算。而不再采用原来的年、月、日做为存储基础。则开发人员可以轻松更改,而客户端程序不需要任何变动。类图如右:-date:longMyDate+getDay():int+getMonth():int+getYear():int+setDay(int):boolean+setMonth(int):boolean+setYear(int):boolean-isDayValid(int):boolean基于J2SE7.0进行GUI编程----第二章面向对象编程2.8声明构造器:构造器即构造函数。格式:

[访问修饰符]类名(参数变量列表){//函数体;}

说明:访问修饰符只能为public、protected或private。构造器不是方法,它们没有返回值也不能被继承。示例:publicclassDog{ privateintweight;publicDog(){ weight=42;} publicintgetWeight(){returnweight;} publicvoidsetWeight(intnewWeight){ if(newWeight>0){ weight=newWeight; }}}基于J2SE7.0进行GUI编程----第二章面向对象编程2.9缺省构造器:

java中每个类必须至少一个构造器,如果不为类编写任何构造器,Java将为该类自动创建一个缺省的构造器,这个缺省构造器没有任何参数,且没有任何语句。当拥有缺省构造器之后,对于类被实例化为对象可以直接如下格式任何:类名对象名=new类名();

注意:当手工为一个类编写任何一个构造函数时,该类都将丢失Java为其创建的缺省构成函数。示例:classGreeting{publicGreeting(Strings){System.out.println("Java,你好1"+s);}publicvoidgreet(){System.out.println("Java,你好");}}publicclassTestGreeting{publicstaticvoidmain(String[]args){Greetinghello=newGreeting();hello.greet();}}基于J2SE7.0进行GUI编程----第二章面向对象编程2.10源文件布局:任何Java源程序文件均按照下列部份依次组织每一个Java源代码文件。

[package名称;]//包声明部份

<import包路径名;>*//包导入部份,也可使用多行同时导入多个包

<类声明部份>+

说明:[]括起来的表示可出现可不出现,<>括起来的表示必须出现,*指示前面的部份出现>=0次(即可不出现),+指示前面的部份出现>=1次(即必须出现)

必须严格按照这种代码布局来编写Java源程序。先声明包,指定本文件中的所有类定义均位于该包空间中,以便于其它地方使用包空间加.对该文件中的类进行访问,如果不声明包,则该文件中所有类将被Java放入默认包空间空间中,不便于访问;紧接着,导入本文件下面将要使用的包空间或包空间中的具体类,可以使用多行导入多个包空间或类,需要使用包空间或类的完全限定名称,也可以使用包空间路径.*,一次性导入该包空间中的所有类,当导入包空间或类后,对于该包空间下的类或直接导入的类,可以在下面代码中直接使用类名,而不再需要完全限定名对类进行访问,如果不使用import,则Java将仅仅导入java.lang这个包中的所有类。再下面是类声明部份,在一个Java源文件中虽然允许同时声明多个类,但建议还是一个类使用一个Java源文件来定义,并且Java源文件的名称与类名完全相同。如果一个Java源文件中有多个类定义,则最多只能有一个public类,且该类的类名必须与该Java源文件名一致。基于J2SE7.0进行GUI编程----第二章面向对象编程示例:VehicleCapacityReport.javapackageshipping.reports;importshipping.reports.*;importjava.util.List;importjava.io.*;publicclassVehicleCapacityReport{privateListvehicles;publicvoidgenerateReport(Writeroutput){//方法主体

}}基于J2SE7.0进行GUI编程----第二章面向对象编程2.11软件包:大多数软件系统都很庞大,为了管理这些软件系统的源代码。常常需要将系统中的类分组到不同的包中来简化类的管理,并防止类命名冲突。在Java中使用包可以包含类以及其它包从而构成包的层次结构,并对包方便进行引用。在UML建模语言中也使用了包的概念。如下图,UML中的shipping包:shippingGUIreportsdomainCompanyVehicleTruckRiverBarge在上面的shipping包中实现了航运软件系统的部分功能。在shipping顶层包中包括了两个子包GUI和reports,而这两个子包要依赖domain包,在domain包中包括了Company、Vehicle(交通工具)、Truck(卡车)、RiverBarge(驳船)等模型元素即类。拥有0..*基于J2SE7.0进行GUI编程----第二章面向对象编程2.12package语句:格式:package顶层包空间名[.子包空间名.子包空间名];

包空间声明部份必须位于,Java源代码文件的第一行。每个Java源代码最多只能进行一次包空间声明,如果没有声明包空间则该Java源代码中的所有类型位于当前应用程序的默认包空间(无名包空间)中。Java应用程序中的包对应源程序中的一个文件夹,且包空间的名称与该文件夹名称完全相同。Java应用程序之所以引入包,主要是为了解决对Java源程序中的类型按包进行分类管理的问题,并且也防止了类名发生冲突的问题。这样后,不同包之间的类型允许重名,而不会出现任何问题。在创建Java类之前,我们应该创建相应的包,然后将该类放入该包空间中(即将Java类文件放入该包空间对于的文件夹中),包空间中只能包含Java的类型定义、接口定义等,不能直接出现执行代码。包空间的结构为一个层次结构,即允许在顶层包空间下创建各种下级,甚至下下级的包空间,并以此对类型进行分层管理,在声明包空间时,允许使用.做间隔直接声明顶层包空间的子包空间。示例:

packageshipping.domain;publicclassVehicle{//..类定义}

包空间声明前可以出现空白或注释,但包空间名称应全部小写,类名则应遵循第一个字母大小,其它单词首字母大写的驼峰规则。基于J2SE7.0进行GUI编程----第二章面向对象编程2.13import语句:格式1:import包名[.子包名].类名;格式2:import包名[.子包名].*;

格式1用于导入指定包空间中的指定类,该包空间中其它类不导入,这将导致Java编译器更快速找到该类并进行编译。格式2用于导入指定包空间中的所有类,这将导致编译器根据你Java源代码中类的使用情况,由编译器自动决定导入哪些类,将会花费比较多的时间从上到下依查找需要用到类相应的包,并检查是否有冲突,但不影响运行速度,只会降低编译速度。

import语句必须出现在所有类的声明代码之前。当导入相应的类或包中所有类后,在下方的代码中可以直接通过使用类名访问导入的类,而非类的完全限定名。示例:

packageshipping.reports;importshipping.domain.*;importjava.util.List;importjava.io.*;publicclassVehicleCapacityReport{privateCompanycompanyForReport;//…}

基于J2SE7.0进行GUI编程----第二章面向对象编程2.14目录布局和包:一个包在Java中必须对应一个目录(文件夹)(除开无名包)。所以,Java中的包层次管理可以理解为文件夹的层次管理,在相应包中声明类,可以理解为在相应文件夹中创建该类的Java源代码文件。不同的Java源文件中的类可以隶属于同一个包,并且需要放在相同的包文件夹中。对于前面的shipping软件包中的示例目录结构为:

shipping/|--------------domain/||--------Company.class||--------Vehicle.class||--------RiverBarge.class||--------Truck.class|--------------GUI/|--------------reports/|--------VehicleCapacityReport.class基于J2SE7.0进行GUI编程----第二章面向对象编程2.15开发:如果要同时进行几个项目开发,可以采用多种开发方式与手段。例如:对于前面的shipping软件包中的示例目录结构为:

JavaProjects/|------ShippingPrj/|-----src||------shipping/|||---------domain/|||---------GUI/|||---------reports/|-----docs/|-----classes/ |------shipping/ |---------domain/ |---------GUI/|---------reports/|------其它项目/这种对项目开发进行管理的技术好处在于,可以在src文件夹中管理.java源代码,而编译生成的.class文件将位于classes文件夹中,在docs文件夹中可以保存项目的文档资料。基于J2SE7.0进行GUI编程----第二章面向对象编程2.16使用–d编译选项指定类文件(.class文件)的存放路径:格式:javac-d目录路径编译文件.java对于上面开发技术示例中,在命令窗口执行:

cdJavaProjects/ShippingPrj/srcjavac-d../classesshipping/domain/*.java2.17部署在客户计算机上部署并运行一个Java程序可以不用操作客户计算机上的CLASSPATH环境变量,也很少这样做。采用下方法即可:即通过创建可执行的Java存档(JAR)文件来实现部署并运行。操作步骤:

1、创建一个临时文件MANIFEST.MF(清单文件):该文件的内容为:主要是指定主类,即启动类,必须在其后有两空行

Main-Class:mypackage.MyClass

2、使用如下命令:

jarcmfMANIFEST.MF

MyProgram.jar*.class|文件夹/

说明:如果没有包空间,则使用*.class将类文件打包到.jar中,如果有顶层包空间,则必须先到达顶层包空间文件夹的上层文件夹,在命令后指定顶层包空间文件夹名称并加一个/,jar将递归把当前文件夹下顶层包空间文件夹中所有的.class文件打包到.jar中。3、复制MyProgram.jar到目标计算机,并运行,如果是在Windows操作系统,双击jar文件就可以执行:

java–jar.jar文件的路径基于J2SE7.0进行GUI编程----第二章面向对象编程部署库:在Java中,特殊情况下,jar文件中可能包括许多类需要我们在不同项目程序中使用,这样的.jar库文件,可以直接通过复制的方式复制到JDK安装文件夹下的jre目录下的lib目录的ext子目录中,但这样做将导致任何程序都可以执行.jar库中的类,拥有完全执行权限。并且,如果jar库中的类与JDK类库中的类发生命名冲突将导致运行时错误。如果只安装了标准JRE,则应当复制到标准JRE目录下的lib下的ext子目录中。

示例:创建一个Test.jar软件包,包名test,类TestClass,有一公共方法,不需要设置MANIFEST.MF(清单文件)的主类。然后复制到jdk/jre/lib/ext下(扩展库文件夹下)。在自己的任意的类中调用该jar包中的TestClass类。技术摘要:

1、类--对象模型

2、对象--类的实例

3、属性--对象的数据元素

4、方法--对象的功能元素,函数或过程。

5、构造器--用于初始化创建对象时被自动调用,构造函数。

6、包--类、子包及两者的集合,用于管理软件系统。使用Java技术API文档:

基于J2SE7.0进行GUI编程----第三章标识符、关键字和数据类型本章主要介绍了Java语法基础,包括Java变量、关键字、基本类型和类类型等相关知识。3.1注释在Java代码中,允许使用三种格式的注释:

1、单行注释:

//2、段落注释:

/**/3、文档注释:文档注释可以使用javadoc命令生成HTML帮助文档。

javadoc-d输出目录包|.java

/***文档注释*/基于J2SE7.0进行GUI编程----第三章标识符、关键字和数据类型3.2分号、块和空白

1、分号:

Java中所有语句必须以;结束,单独的一个分号为空语句。

2、语句块:语句块必须以{开始及}结束。

{//语句块中的语句}

语句块可以嵌套。3、空白:在语句的元素之间可以有空白。并允许任意数量的空白,包括空格、制表符和换行符,以提高源代码的清晰度和直观效果。

基于J2SE7.0进行GUI编程----第三章标识符、关键字和数据类型3.3标识符

Java中的标识符是为变量、类或方法起的一个名称。标识符以字母、下划线_或美元符号$开头,其后可以是字母、数字和下划线的组合,没有长度限制。标识符不能使用Java的关键字。

Java源代码中的字符是16位即双字节Unicode字符。虽然Java支持使用Unicode字符做为标识符,但建议变量名、类名、方法名等标识符只使用ASCII字符(英文字符)。3.4Java编程语言关键字关键字对Java编译器有特殊意义,它们标识数据类型名称或程序结构名称。

Java编程语言关键字:abstract continue for new switchassert default goto package synchronizedboolean do if private thisbreak double implements protected throwbyte else import public throwscase enum instanceof return transientcatch extends int short trychar final interface static voidclass finally long strictfp volatileconst float native super while基于J2SE7.0进行GUI编程----第三章标识符、关键字和数据类型

对Java关键字的说明:

1、true、false和null都是小写,它们不是Java的关键字,也是Java字符(常量)2、没有sizeof运算符,Java中不能直接访问内存,因此sizeof没有用。

3、Java编程语言不使用关键字goto和const。3.5基本Java编程语言数据类型

Java编程语言有许多内置的数据类型,这数据类型分为两类:类数据类型和基本数据类型。基本数据类型即简单的值,而非对象。类数据类型用于更为复杂的数据类型,包含您自己声明的所有类型。类数据类型习惯上用来创建对象。3.5.1基本数据类型

1、逻辑类型:booleanboolean类型的常量值为:true和falsebooleantruth=true;Java中boolean类型只能保存true或false,而不能使用数字表示boolean类型的值2、字符类型:charJava中单个字符使用char类型表示,char表示双字节Unicode字符,必须位于’’之内。

‘a’字母a‘\t’制表符

‘\u????’表示特定的Unicode字符,例如,’\u03A6’表示一个特殊字符基于J2SE7.0进行GUI编程----第三章标识符、关键字和数据类型\\\字符本身\’‘字符本身

\""字符本身\n换行符

charch=‘A’;charch1,ch2;3、字符类型:String

可以使用String类型(它不是基本类型,而是一个特殊的类类型)来表示字符串。String仍然是一个Unicode字符串,在String类型中仍然允许使用转义字符。Java中的String不以\0(空字符)结束。String是非常特殊的对象数据类型,保存其中的值不能被更改。

String类型必须以""引起来。

Stringgreeting="GoodMorning!!\n";

StringerrorMessage="RecordNotFound!";Stringstr1,str2;

空字符串:""或者使用null基于J2SE7.0进行GUI编程----第三章标识符、关键字和数据类型4、整数类型:byte、short、int和longJava编程语言的四种整数类型。可以使用十进制、八进制或十六进制形式来表示整数类型的数据。格式:

225 十进制

077 八进制

0xBAAC0X23f十六进制

Java中数字类型都是带有符号,即可以表示正数也可以表示负数。Java中long类型的常量必须后缀l或L表示,建议使用L。

2L077L0xBAACL1)、byte:字节类型(1byte)-128到127-2^7到2^

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论