Java程序设计与应用-全套电子课件完整版ppt整本书电子讲义最全教学教程整套课件_第1页
Java程序设计与应用-全套电子课件完整版ppt整本书电子讲义最全教学教程整套课件_第2页
Java程序设计与应用-全套电子课件完整版ppt整本书电子讲义最全教学教程整套课件_第3页
Java程序设计与应用-全套电子课件完整版ppt整本书电子讲义最全教学教程整套课件_第4页
Java程序设计与应用-全套电子课件完整版ppt整本书电子讲义最全教学教程整套课件_第5页
已阅读5页,还剩492页未读 继续免费阅读

下载本文档

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

文档简介

第1章

Java语言概述

06二月20232学习目的:了解程序设计语言的发展历史了解Java语言的特色和应用背景了解Java虚拟机、Java的运行环境和Java编程语言开发环境初步掌握简单Java程序的创建、编译和运行学习重点面向对象的程序设计语言

Java虚拟机Java的运行环境Java程序的创建、编译和运行06二月20233第1章

Java语言概述

本章提要:

1.程序设计语言概述2.Java语言简介3.

Java语言概述

4.简单Java程序的创建、编译及运行步骤06二月202341.1程序设计语言概述

1.1.1计算机程序设计方法和语言随着计算机硬件与通讯技术的发展,计算机应用领域越来越广泛,应用规模也越来越大,程序设计不再是一、两个程序员可完成的任务,在这种情况下编写程序不再片面追求高效率,而是综合考虑程序的可靠性、可扩展性、可重用性和可理解性等因素。

程序设计方法是独立于具体程序设计语言的一门技术。由于程序设计通常离不开程序设计语言作为工具,所以容易混淆程序设计方法与程序设计语言的概念。程序设计语言的设计目的主要是为了支持某种程序设计方法。06二月20235早期的程序设计早期的高级程序设计语言有FORTROM、COBOL、BASIC等。这一时期由于追求程序的高效率,程序员过份依赖技巧与天份,不太注重程序的结构,。一个典型问题是程序中的控制随意跳转,即不加限制地使用goto语句,这样的程序对阅读者来说是难以理解的,程序员也难以修改程序。结构化的程序设计随着程序规模与复杂性的不断增长,20世纪60年代诞生了结构化程序设计方法。结构化程序设计方法的主要技术是自顶向下、逐步求精,采用单入口/单输出的控制结构。这一程序设计方法的代表语言是Pascal、C、Ado等。06二月20236

自顶向下是一种分解问题的技术,与控制结构有关。逐步求精指对结构化程序进行分解,最终使其成为三种基本控制结构的组合。结构化程序设计的结果是一个程序最终由若干过程组成,每一个过程完成一个明确的功能。面向对象程序设计

虽然结构化程序设计提高了软件生产率和软件质量,但随着程序规模与复杂性的增长,程序中的数据结构变得与这些数据上的操作同样重要。在大型结构化程序中,一个数据结构可能由许多个过程来处理,修改数据结构将影响到所有相关的过程。在由几百个过程组成的成千上万行的结构化程序中,这种情况变得相当麻烦并且容易产生错误。

06二月20237

20世纪80年代兴起的面向对象程序设计方法在结构化程序设计的基础上提出了一种新的设计思路,最重要的改变是程序围绕被操作的数据来设计,而不是围绕操作本身。面向对象程序设计以类作为构造程序的基本单位,具有封装、数据抽象、继承、多态化等特点。较有影响的面向对象程序设计语言有Simula、C++、Java等。Java语言是在C++语言基础上发展起来的一种适合分布式计算的新型面向对象程序设计语言,也是目前推广最快的程序设计语言。Java语言将面向对象、平台无关性、稳定性与安全性、多线程等特征集于一身,为用户提供了一个良好的程序设计环境,特别适合因特网的应用开发。与当前迅速发展的因特网应用紧密结合是Java语言成功的关键所在。

06二月202381.1.2

计算机程序设计方法和语言面向对象与面向过程的区别

早期的编程语言如Fortran语言和C语言基本上都是面向过程的语言,主要是采用数学语言方式编程的语言,其编程的主要思路专注于算法的实现。

传统的面向过程的编程在描述问题时,由两部分组成:数据:描述实体状态的数据结构;过程:操作这些状态数据的程序和步骤。

面向过程编程的一个显著特点是数据与程序的分开。数据是静止的东西,不会自行变化,必须通过过程操作来改变数据,因此,函数调用在面向过程编程中被大量使用。06二月20239

针对程序结构不清晰而无法维护改进的局面。面向对象编程提出了一种全新的思路,让计算机语言结构像人类思维方式一样简单和清晰。面向对象的软件开发中将世界上的事物均看成对象,任一对象有两个特征:行为与状态。每个对象可以通过自身的行为来改变自己的状态。在面向对象的世界中,通过对象间的协作与交互来运作。由于将对象的操作封闭在对象内,外部要与对象进行交互只能通过给对象发送“消息”,这个消息实际上就是调用对象的某个行为方法,消息中还包括方法的参数。06二月202310面向对象程序设计的特性封装性

面向对象的第一个原则是把数据和该数据的操作都封装在一个类中,比如说笔记本电脑就是一个类。笔记本电脑这个类有许多属性,有些是静态的(数据),比如:显示屏的亮度,本身的重量;有些是动态的(对数据的操作),比如:可以按下组合键“ctrl+F4”或“ctrl+F5”来调整显示器的亮度,可以卸掉它的外挂光驱来减轻它的重量。

对象是类的一个实例化结果,对象具有类所描述的所有的属性以及方法。比如不同品牌、不同样式的笔记本电脑之间的共同属性就是它们所属的类——笔记本电脑类的属性。只不过类是抽象的东西,而对象是具体的,对象具有它隶属类的所有属性,包括静态的和动态的。06二月202311

每个对象都有自己的存储空间,可容纳其他对象,或者说通过封装现有的对象,可以产生新型对象。因此,尽管对象的概念非常简单,但是经过封装以后却可以在程序中达到任意高的复杂程度。

每个对象都属于某个类。根据语法,每个对象都是某个“类”的实例。一个类的最重要的特征就是“能将什么消息发给它?”,也就是类本身有哪些操作。面向对象程序设计就是设计好相关的类,类中有静态的域,和动态的方法。继承性继承是在类、子类、以及对象之间自动地共享属性和方法的机制。类的上层可以有父类、下层可以有子类,形成一种层次结构。一个类将直接继承其父类的属性和行为06二月202312,而且继承还具有传递性,因此,它还将间接继承所有祖先类的属性和行为。

继承最主要的优点是重复使用性,通过继承可以无限繁衍出更多的类,这样的结果可让软件的开发加速,同时可达到程序共享的好处。通过继承可以直接继承系统提供的或他人写作的类,并加以改写,进而得到功能的不断扩充。

继承的另一个优点是在于接口的一致性。当超类繁衍出许多子类时,它的行为接口通过继承可以传给其所有子类。因此可以通过统一的行为接口去访问不同的子类对象的方法,但不同子类中行为的具体实现可能时不一样的。06二月202313多态性多态是指在表示特定功能时,有多种不同的形态或实现方法。常见的多态形式有两种:方法的重载:即在同一个类中某个方法有多种形态,其方法名相同,但参数不同,所以也称参数多态。方法的覆盖:在子类中重新定义一个与父类有相同形态的方法,这样,在子类中将覆盖从父类继承来的那个方法。多态为描述客观事物提供了极大的能动性。参数多态提供了方法的多种使用形态,方便使用者的调用;而覆盖多态则使得用户可以用同样的方式对待不同的对象,不同的对象可以用它们自己的方式响应同一消息。用户可以通过父类去引用子类的对象,执行方法时则表现出每个子类对象各自的行为。

06二月202314抽象性这里的抽象有两个层次的含义,一是体现在类的层次设计中,高层类是底层类的抽象表述。类层次设计体现着不断抽象的过程。第二体现在类与对象之间的关系上,类是一个抽象的概念,而对象是具体的。面向对象编程的核心是设计类,但实际运行操作的是对象。类是对象的模板,对象的创建是以类为基础。同一类创建的对象具有共同的属性,但属性值不同。06二月2023151.2程序设计语言概述Java语言有下面一些特点:简单性Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。另外,Java也适合于在小型机上运行。

1.2.1Java语言的特色06二月202316面向对象Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。分布性

Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便地访问其它对象。

06二月202317鲁棒性Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的例外处理机制,在编译时,Java提示出可能出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外,Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。06二月202318安全性

用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用“特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。体系结构中立

Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。

06二月202319可移植性

与平台无关的特性使Java程序可以方便地被移植到网络上的不同机器。同时,Java的类库中也实现了与不同平台的接口,使这些类库可以移植。另外,Java编译器是由Java语言实现的,Java运行时系统由标准C实现,这使得Java系统本身也具有可移植性。解释执行Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。高性能和其它解释执行的语言如BASIC、TCL不同,Java字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。06二月202320多线程

多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。动态性

Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。06二月2023211.2.2Java的应用背景Java语言对软件开发技术的影响Java语言将对未来软件的开发产生影响,可从如下几个方面考虑:软件的需求分析:可将用户的需求进行动态的、可视化描述,以提供设计者更加直观的要求。而用户的需求是各色各样的,不受地区、行业、部门、爱好的影响,都可以用Java语言描述清楚。软件的开发方法:由于Java语言的面向目标的特性,所以完全可以用面向对象的技术与方法来开发,这是符合最新的软件开发规范要求的。

06二月202322Java语言的动画效果远比GUI技术更加逼真,尤其是利用Internet提供的巨大动画资源空间,可以共享全世界的动态画面的资源。软件最终产品:用Java语言开发的软件可以具有可视化、可听化、可操作化的交互、动画与动作,要它停就停,要它继续就继续,而这是在电影与电视播放过程中难以做到的。其它:使用Java语言对开发效益、开发价值都有比较明显的影响。

06二月202323Java语言的应用前景

Java语言有着广泛的应用前景,大体上可以从以下几个方面来考虑其应用:所有面向对象的应用开发,包括面向对象的事件描述、处理、综合等。计算过程的可视化、可操作化的软件的开发。动态画面的设计,包括图形图像的调用。交互操作的设计(选择交互、定向交互、控制流程等)。Internet的系统管理功能模块的设计,包括Web页面的动态设计、管理和交互操作设计等。Intranet(企业内部网)上的软件开发(直接面向企业内部用户的软件)。与各类数据库连接查询的SQL语句实现。其它应用类型的程序。06二月2023241.3程序设计语言简介

用Java可写两种类型的程序:小程序(又叫JavaApplet)和应用程序(Javaapplicatian)。

小程序是嵌入在HTML文档种的Java程序;而Java应用程序是从命令行运行的程序。对Java而言,Java小程序的大小和复杂性都没有限制。由于WWW使小程序的发布十分便利,因此小程序更适合作为Internet上的应用程序。

应用程序(JavaApplication)是可以独立运行的Java程序,有Java解释器控制执行。Applet则不能独立运行,而是被嵌入到Web页中,有Java兼容浏览器控制执行。

06二月202325

Java程序在编译后生成的不是某种CPU的指令码,而是Java语言特有的字节代码。Java字节代码运行在Java虚拟机上。

每一个操作系统的Java解释器是不同的,但实现Java虚拟机时相同的,这就是Java语言与平台无关的关键所在。Java虚拟机由五部分组成:一组指令集、一组寄存器、一个堆栈、一个无用内存单元收集器、一个方法区域,这五个部分是Java虚拟机的逻辑抽象成分,不倚赖于任何实现技术或组织,但是它们的功能必须在真实机器上以某种来实现。Java虚拟机内存区域不倚赖实现内存的位置,也不要求连续,但要求逻辑的长度固定。

1.3.1Java的虚拟机06二月202326

Java虚拟机支持240多个字节代码,每个字节代码执行一种基本的CPU运算。Java语言指令集相当于Java语言程序的“汇编语言”,Java语言指令集的一条指令有一个操作码、领个或多个操作数。操作数指定实施的操作,操作数是操作码所需要的参数。Java语言的操作码均为一个字节长,操作数没有限制。

Java虚拟机的寄存器用于保存机器的运行状态。Java虚拟机寄存器有四种:Java语言程序计数器;指向操作数栈顶端的指针;指向当前执行方法的执行环境的指针;指向当前执行方法局部变量的区第一个变量的指针。Java虚拟机是用堆栈来处理数据传递的,它不定义或使用寄存器来传递或接受参数。目的是为了保证指令集的简洁性和实现时的高效性。06二月202327

Java虚拟机的堆栈有三个区域:局部变量区、执行环境区和操作数区。Java虚拟机的堆栈是运行时刻动态分配的对象存储区域。Java语言可以进行自动的无须内存单元的收集,程序无须显示释放占有的内存空间,无须内存单元自动回收的算法倚赖于虚拟机最终实现的硬件环境。

Java虚拟机的方法区是编译后的代码区域,包含方法代码、符号表等。

06二月2023281.3.2Java的运行环境的配置Java不仅提供了一个丰富的语言和运行环境,而且还提供了一个免费的Java开发工具集(JavaDevelopersKits,简称JDK,也称SDK)。编程人员和最终用户可以利用这些工具来开发Java程序或调用Java内容。

SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(SDK)。开发人员和最终用户可以利用这个工具来开发Java程序。SDK简单易学,可以通过任何文本编辑器编写Java源文件,然后在DOS状况下利通过javac命令将Java源程序编译成字节码,通过Java命令来执行编译后的Java文件。

06二月202329SDK的另一个显著特点是随着Java(J2EE、J2SE以及J2ME)版本的升级而升级。但它的缺点也是非常明显的就是从事大规模企业级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发。建立Java开发环境JDK开发环境中常用工具介绍在Java环境中的Java工具主要有:*appletviewer小应用程序浏览器*java解释器*javac编译器*javah头文件生成器*javadocAPI文档生成器*javap类文件反汇编器*sdbJava语言调试器06二月2023301.3.1Java的虚拟机目前可供开发人员选择得Java语言开发工具有很多,例如:Sun公司的SDK(命令行方式的)Java语言编辑器,用Java语言开发的图形化界面的JavaWorkShop,Symmatec公司的VisualCafé,微软公司的VisualJ++,Borland公司的JBuilder等等。开发人员选择开发工具可以根据以下原则:开发界面是否友好,编译效率是否高,是否有可视化的调试器,能否在浏览器中调试Java语言小程序,能否为使用者完成一些重复的劳动等。06二月2023311.4简单Java程序的创建、编译及运行步骤Java是解释型的高级编程语言,所以Java程序的开发通常需要编写源程序、编译生成字节码和运行几个过程。编写源程序编写源程序是程序开发的第一步,我们只需要简单的文字编辑器,如Edit或记事本或集成开发环境中的编辑窗口,利用这些文字编辑器将源程序录入到计算机中,形成一个文件保存起来。注意必须要保证Java程序是无格式的纯文本文件。

06二月202332编译和运行HelloWorld应用程序我们利用Java的编译器系统软件,一般采用Sun公司提供的javac.exe。

如果编译成功,则生成以类命名、以class为后缀的字节码文件;否则报告错误。要运行一个编译好的Java字节码程序,还需要调用Java的解释器软件java.exe。

06二月2023331.5本章小结本章介绍了Java语言的产生和特点。给出了两种Java程序,Java应用程序和JavaApplet程序的调试步骤。JavaApplication在命令方式下进行调试,而JavaApplet在浏览器的环境下运行。Java语言是一门纯面向对象的编程语言。

面向对象编程的思路认为程序都是对象的组合,因此要克服面向过程编程的思路,直接按照对象和类的思想去组织程序,面向对象所具有的封装性、继承性、多态性等特点使其具有强大的生命力。

06二月202334Sun公司为全世界Java开发人员提供了一套免费的软件开发包Java2SDK,也称为JDK,它不仅是Java的开发平台,还是Java的运行平台。Java源程序存放在.java文件中,可以通过任意一个文本编辑器编辑产生,源程序经过“javac”命令编译过后,就生成了相应的.class文件。第2章

Java语言基础

06二月202336学习目的:了解Java程序的构成

了解Java的基本数据类型

了解Java的运算符与表达式

了解数组的创建、定义和使用掌握Java流程控制语句

初步掌握java简单程序的编写学习重点:

Java的基本数据类型、运算符与表达式

一维数组和多维数组的创建、定义和使用While、do-while和for语句的使用06二月202337第2章

Java语言基础

本章提要:

1.Java程序的构成2.Java的基本数据类型3.Java的运算符与表达式

4.数组5.Java流程控制语句

06二月2023382.1Java程序的构成Java源程序是由类定义组成的,每个程序中可以定义若干个类,但是只有一个类是主类。在JavaApplication中,这个主类是指包含main方法的类;在JavaApplet中,这个主类是一个系统类Applet的子类,是Java程序执行的入口点。在同一个Java源程序中定义的若干类之间没有严格的逻辑关系要求,但它们通常是在一起协同工作的,每一个类都可能需要使用其他类中定义的静态属性或方法

Java程序中定义类使用关键字class,每个类的定义有类头定义和类体定义两部分组成。类体部分用来定义静态属性和方法这两种类的成员,其中方法类似于其他高级语2.1.1一个Java源程序06二月202339言的函数,而静态属性则类似于变量。类头部分除了声明类名之外,还可以说明类的继承特性,当一个类被定义为是另一个已经存在的类(称为这个类的父类)的子类时,它就可以从其父类中继承一些以定义好的类成员而不必自己重复编码。Java程序的每一条Java语句都由分号结束,其构成应该符合Java的语法规则。类和方法中的所有语句应该使用一对大括号括起。Java程序的每一个类中,除了静态属性声明语句之外,其他的执行具体操作的语句只能存在于类方法的大括号之中,而不能跳出方法孤立地直接书写在类中。

06二月202340

注解是指程序中用来说明程序的文字。它是为了方便程序员理解,维护该程序,并不参与程序的编译执行。Java的注解有3种:单行注解符号“//”后面的单行内容不参与编译;多行注解用“/*…*/”包含起来的一段文本,中间可以换行;用“/**…*/”包含起来的,它可以用javadoc工具来生成HTML形式的开发文档。也可以在写程序的时候将某些代码注释掉以便调试程序。2.1.1Java的程序注解06二月2023412.1.3Java的的标识符与关键字

关键字是Java语言保留的字符串,表示特殊的指令,而不能用来做为程序中的标识符。标识符是用来代表程序中一个元素的名字,比如变量、函数、类等。在Java中标识符由字母、下划线、“$”和数字组成,只能以字母、“$”或者“_”开头,中间不能有空格,并且不能使用关键字。但可以包含关键字作为它的名字的一部分。在Java中中文字符也是字符,所以也可以作标识符。Java的标识符区分大小写,而且没有长度的限制,可以为标识符取任意长度的名字。标识符的名字要有一定的意义,让人一看标识符就知道这个变量、函数的大概作用,即常说的编码规范。

06二月202342在Java语言中,有三种基本类型,即简单类型(整型、浮点型、字符型、布尔型等)、数组类型(整型、浮点型、字符型、布尔型等)和复合类型(类、接口)。可以看出Java的数据类型与C语言相近,其不同之处在于:首先,Java的各种数据类型占用固定的内存长度,与具体的软硬件平台环境无关;其次,Java的每种数据类型都对应一个缺省的数值,使得这种数据类型的变量的取值总是确定的。这两点分别体现了Java的跨平台特性和安全稳定性。

2.2基本数据类型06二月202343在Java语言中有四种整数类型,每种类型可以使用关键字byte,short,int和long中的任意一个进行声明。所有Java编程语言中的整数类型都是带符号的数字,不存在无符号整数。整数类型的文字可使用十进制、八进制和十六进制表示。首位为“0”表示八进制的数值,首位为“0x”表示十六进制的数值。整数类型默认为int类型,如在其后有一个字母“L”表示一个long值(也可以用小写“l”)。

2.2.1整型

06二月202344

使用char类型可表示单个字符,字符是用单引号括起来的一个字符,如‘a’,‘B’等。Java中的字符型数据是16位无符号型数据,它表示Unicode集,而不仅仅是ASCII集。

与C语言类似,Java也提供转义字符,以反斜杠“\”开头,将其后的字符转变为另外的含义。值得注意的一点是,用双引号引用的文字,就是我们平时所说的字符串类型不是原始类型,而是一个类string,它被用来表示字符序列。字符本身符合Unicode标准且上述char类型的转义字符适用于string。2.2.2字符型

06二月2023452.2.3浮点型

在Java语言中有两种浮点数类型;float和double。如果一个数包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数为浮点数。如果不明确指明浮点数的类型,浮点数默认为double。

在两种类型的浮点数中,float为32位(单精度),double为64位(双精度)。也就是说double类型的浮点数具有更高的精度。

2.2.4逻辑型逻辑类boolean的数据类型有两种文字值:true和false。在Java语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算。06二月2023462.2.5变量与常量在Java中,不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现。常量就是指在程序执行期间其值不能发生变化的数据,常量是固定的。

变量的值是可以变化的,它的定义包括变量名、变量类型和作用域几个部分。注意以下几点:(1)变量名必须是一个合法的标识符。变量名应具有一定的含义,以增加程序的可读性。(2)变量类型可以为前面所说的任意一种数据类型。(3)声明一个变量的同时也就指明了变量的作用域。变量的作用域指明可访问该变量的一段代码。(4)变量的声明中多个变量间用逗号隔开。(5)在Java程序中声明变量后,需要给该变量赋值。可以用赋值语句来初始化变量——任何变量都不能没有初始值,否则无法通过编译。06二月202347

Java语言是支持两个不同数值类型之间的强制类型转换的,一个变量从一个类型强制转换到另一个类型,转化后的变量要受到新类型的制约。

类型转换语法格式:(type)variableName

类型变量名

2.2.6数据类型的转换06二月202348自动类型转换整型、浮点型、字符型数据可以混合运算。在运算中不同类型的数据先转化为同一种类型然后进行计算。自动类型转换原则是从在机器中占位(bit)少的类型向占位多的类型方向进行转换。强制类型转换在Java语言中强制类型转换是指从在机器中占位多的类型向占位少的类型方向进行转换,例如int类型转换成byte类型。强制类型转换需要使用类型转换语法格式,但是有些类型是不允许转换成另一种类型的,例如boolean类型不能转换成int等类型。06二月2023492.3运算符与表达式

Java语言的运算符(operator)指明对操作数所进行的运算,运算符按照操作数的数目来划分为单目运算符(例如~、++)、双目运算符(例如+、>)、三目运算符(例如?:)。基本运算符包括赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符等。Java语言的表达式是由标识符、数据和运算符等的组合而构成的,它基本上和C\C++语言的表达式一样。06二月2023502.3.1赋值

赋值运算符“=”把一个数据赋给另一个变量。Java语言支持简单算术运算符和赋值运算符的作用在赋值运算符两侧的类型不一致的情况下,如果左侧变量的数据类型的级别高,则就把右侧的数据转换为与左侧相同的高级数据类型,然后赋值给左侧的变量。否则需要使用强制类型转换运算符。

在赋值符“=”前加上其他运算符,即构成扩展赋值运算符。用扩展赋值运算符可表示为:varoperator=expression06二月2023512.3.2算术运算算术运算是针对数值类型操作数进行的运算。根据需要参与运算的操作数的数目要求,可将算术运算符分为双目运算符和单目运算符两种。双目算术运算符双目运算符有:+、-、*、/、%五种。要注意“/”运算符对于与整数和浮点数的运算结果是不同的。取模运算符“%”一般用于整数运算,它是用来得到余数部分。单目算术运算符变量的自增与自减和++与—出现在该变量的前后位置无关。无论是++x还是x++均表示x要增1,且表达式的值与运算符的位置有关。06二月2023522.3.3关系运算关系运算符也称为比较运算符,是用于比较两个数据之间的大小关系的运算符。关系运算结果是布尔值(true或false)。2.3.4逻辑运算逻辑运算是针对布尔型数据进行的逻辑判断运算,运算的结果仍然是布尔型量。常用的逻辑运算符有:与(AND)、或(OR)、非(NOT)。06二月202353

2.3.5位运算位运算是对操作数以二进制比特位为单位进行的操作运算,位运算的操作数和结果都是整型量。移位运算符移位运算符是将某一变量所包含的各比特位按指定方向移动指定的位数,移位运算符通过对第一个运算对象向左移位或向右移位来对数据执行位操作,移动的位数由右边的操作数决定,移位的方向取决于运算符本身。按位逻辑运算位运算符&、|、~、^分别提供了基于位的与、或、求反、异或操作。其中异或是指对应的两位数值不同时,结果为1,否则为0。

06二月2023542.3.6其他运算几点说明:条件运算符是唯一的一个三目运算符,其结构如下:条件?表达式1:表达式2其含义是如果条件的计算结果为真,则结果为表达式1的计算结果,否则为表达式2的计算结果。instanceof用来决定第一个运算对象是否为第二个运算对象的一个实例。06二月2023552.3.7运算符的优先级运算符的优先级决定了表达式中执行不同运算的先后顺序,在运算符优先级相同时,运算的进行次序取决于运算符的结合性。运算符的结合性分为左结合和右结合,左结合就是按照从左向右的次序计算表达式,而右结合就是按照从右到左的次序计算表达式。

06二月2023562.4数组

Java语言中,数组是一种最简单的复合数据类型。数组的主要特点如下:数组是相同数据类型的元素的集合;数组中的各元素是有先后顺序的,连续存放在内存之中;每个数组中的元素用整个数组的名字和它在数组中的位置(称为下标)表达。06二月2023572.4.1数组声明、创建、初始化声明数组声明数组是定义一个数组的名称、维数和数组元素的类型。有两种定义格式:格式1:数组元素类型数组名[];格式2:数组元素类型[]数组名;其中数组元素的类型可以是基本类型,也可以是类或接口。创建数组数组声明只是定义了数组名和类型,并未指定元素的个数。与变量一样,数组的每个元素需要占用存储空间,因此必须通过某种方式规定数组的大小,进而确定数组需要的空间。给已声明的数组分配空间可采用如下格式:

数组名=new数组元素类型[数组元素个数]

06二月202358也可以在声明数组的同时给数组规定空间,一旦数组创建以后,数组就有了固定长度的结构,数组中各元素通过下标来区分,下标从0开始,下标最大值为数组元素的个数减1。当数组的元素类型为基本类型时,在创建存储空间时将按照默认规定给各元素赋初值。数组的初始化

给数组元素分配空间和赋初值可以采取以下方式:声明数组时给数组一个初值表,格式如下:

类型数组名[]={初值表};所有的数组都有一个属性length,它代表了数组元素的个数。使用数组时,要注意下标不要超出范围。如果下标超出范围,则运行时会产生“数组访问越界异常”。06二月2023592.4.2数组使用在方法调用中,数组也可以作为方法参数来传递。但要注意数组是属于引用类型的参数传递,也就是在方法中对虚参数组的操作会影响实参数组。在Java语言应用程序的main方法中有一个字符串数组参数,该数组中存放所有的命令行参数,命令行参数是给Java语言应用程序提供数据的手段之一,它跟在命令行运行的主类名之后,各参数之间用空格分隔。使用命令行参数有利于提高应用程序的通用性。如果命令行参数中有引号,则两个引号之间的字符系列为一个参数,空格作为参数的分隔符。如果引号不匹配,则从最后一个引号到行尾的所有字符将作为一个参数。06二月2023602.4.2多维数组Java语言中,多维数组被看作数组的数组,多维数组的定义是通过对一维数组的嵌套来实现的。即用数组的数组来定义多维数组。多维数组中最常用的是二维数组,下面主要以二维数组为例介绍多维数组的使用。声明数组

二维数组的声明与一维数组类似,如下所示:格式1:数组元素类型数组名[][]格式2:数组元素类型[][]数组名;06二月202361二维数组的创建和初始化为二维数组创建存储空间有两种方式:直接为每个一维数组分配空间;从最高维开始,按照由高到低的顺序为每一维数据分配空间Java语言中,由于把二维数组看作是数组的数组,不要求二维数组中每一维数组的大小相同。要获取数组的行数,可以通过如下方式获得:数组名.length要获取数组的列数则要先确定行,再通过如下方式获取列数:数组名[行标].length在二维数组创建空间时,如果元素是基本类型,系统将按照默认规则赋初值;如果元素类型为其他引用类型,则其所有元素为未赋初值状态(null)。但可以在数组定义时同时进行初始化。06二月2023622.5流程控制语句流程控制语句是用来控制程序中各语句执行顺序的语句,使程序设计中非常关键和基本的部分。流程控制语句可以把单个的语句组合成有意义的、能完成一定功能的小模块。最主要的流程控制方式是结构化程序设计中规定的三种基本流程结构。2.5.1结构化程序设计的三种基本流程结构化程序设计原则是公认的面向过程编程应遵循的原则,它使得程序段的逻辑结构清晰、层次分明,有效地改善了局部程序段的可读性和可靠性,保证了程序质量,提高了程序开发的效率。06二月202363结构化程序设计的最基本原则是:任何程序都是可以由三种基本流程结构构成,即顺序结构、分支结构和循环结构。06二月202364三种流程结构的主要特点是:均为单入单出结构,每种结构仅有一个入口点,结构执行完毕后,仅有一个出口点。顺序结构和选择结构为开放式结构,执行完后立即退出;而循环结构为封闭式结构,只要满足条件则反复执行结构内的语句。三种基本结构可以相互嵌套。06二月2023652.5.2顺序结构顺序结构是三种结构中最简单的一种,即语句按照书写的顺序依次执行。从宏观上来看,整个程序就是一个顺序结构。2.5.3选择结构Java中的分支结构可以由两种选择语句来实现,一个是实现双选择的if语句,另一个是实现多分支的switch开关语句。06二月202366if语句if语句的一般形式是:if(条件表达式)语句块;//if分支

else

语句块;//else分支块其中条件表达式用来选择判断程序的流程走向。在程序的实际执行过程中,如果条件表达式的取值为真,则执行if分支的语句块,否则执行else分支的语句块。在编写程序时,也可以不书写else分支,此时若条件表达式的取值为假,则绕过if分支直接执行if语句后的其他语句。有时也会用到if-else复合结构。但要注意else字句不能单独作为语句使用,它必须和if配对使用。

06二月202367switch语句switch语句是多分支的开关语句,它的一般格式如下:switch(表达式){case判断值1:语句块1;//分支1case判断值2:语句块2;//分支2……case判断值n:语句块n;//分支ndefault:语句块n+1//分支n+1}

switch语句执行时,首先计算表达式的值,这个值必须是整型或字符型,同时应与各个case分支的判断值的类型相一致。计算出表达式的值之后,将它先与第一个case分支的判断值相比较。若相同,则程序转入第一个case分06二月202368支的语句块;否则,再将表达式的值与第二个分支相比较……依此类推。如果表达式的值与任何一个case分支都不相同,则转而执行最后的default分支;在default分支不存在的情况下,则跳出整个switch语句。各个case和default出现的次序不影响执行的结果。

需要注意各个case后面的常量不能有相同的值。还有各个语句块可以有多条语句,不必使用大括号。switch语句也允许嵌套。还要注意的是,switch语句的每一个case判断,都只负责指明流程分支的入口点,而不负责指定分支的出口点,分支的出口点需要编程时用相应的跳转语句来标明。06二月2023692.5.4循环结构循环结构是利用循环语句来实现的。循环语句是在一定条件下反复执行一段代码,被反复执行的程序段称为循环体。Java语言中提供的循环语句有三种:while语句、do-while语句、for语句。

06二月202370while语句while语句的一般形式是:

while(条件表达式)

循环体while语句的执行时,首先检查表达式的值是否为真,若为真,则执行循环体,然后继续判断是否继续循环,直到表达式的值为假,直到表达式的值为假,执行后续语句。循环体通常是一个组合语句,也可以是单个语句。

while循环的特点是“先判断,后执行”。如果条件已开始就不满足,则循环执行为0次。另外,在循环体中通常通过执行某个操作来改变循环条件,如果循环条件不改变,则循环会陷入死循环中。在程序设计中要避免死循环。06二月202371do-while语句如果需要在任何情况下都先执行一遍循环体,则可以采用do-while循环,它的格式如下:do{

循环体}while(条件表达式)do-while循环的特点是:“先执行,后判断”,在执行时,先执行循环体的语句,在检查表达式,若表达式的值为真,则继续执行循环体,否则,结束循环,执行后续语句。与while循环相比,循环体至少要执行一次。06二月202372for语句

for语句一般用于事先能够确定循环次数的场合,其格式为:

for(控制变量设定初值;循环条件;迭代部分)循环体for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后通过执行迭代部分给控制变量增值。完成一次循环后,重新判断终止条件。使用for循环要注意一下几点:初始化、终止条件以及迭代部分都可以为空(但分号不能少),三者均为空时,相当于一个无限循环。在初始化部分和迭代部分可以使用逗号表达式,来进行多个操作。06二月2023732.5.5跳转语句循环嵌套三种循环语句可以自身嵌套,也可以相互嵌套。嵌套将循环分为内外两层,外层循环每循环一次,内层循环要执行一圈。注意编写嵌套循环时,不能出现内外循环的结构交叉现象。break语句在switch语句中,break语句已经得到应用。在各类循环语句中,break语句也提供了一种方便的跳出循环的方法。它有两种使用形式:

06二月202374

break//不带标号,从break直接所在处的循环体中跳转出来

break标号名

//带标号,跳出标号所指的代码块,执行块后的下一条语句给代码块加标号的格式如下:BlockLabel:{codeBlock}continue语句continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。它有两种形式:continue//不带标号,终止当前一轮的循环,继续下一轮循环continue标号

//带标号,跳转到标号所指示的外层循环中06二月2023752.6本章小结本章是Java语言程序设计的基础,该章主要是对程序的组成元素和逻辑进行介绍。Java语言中的数据类型有简单数据类型和复合数据类型两种,其中简单数据类型包括整数类型、浮点数类型、字符类型和布尔类型;复合数据类型包括类、接口和数组。表达式是由运算符和操作数组成的符号序列,对一个表达式进行运算时,要按照运算符的优先顺序从高到低进行,同级的运算符则按照结合性决定运算次序。06二月202376

数组是具有相同类型元素的有序集合,数组的创建分为定义、分配内存以及初始化等阶段。通过下标变量访问数组中的元素。经常用循环语句来控制对数组元素的访问,但要注意访问不要越界。条件语句、循环语句和跳转语句是Java语言中常用的控制语句。对这些语句的正确理解和运用非常重要。程序设计的关键是要将算法思路转化为可实现的语句。第三章类和对象

06二月202378学习目的:了解面向对象基本概念

掌握类的创建和使用

掌握对象的创建与使用了解参数的传递

了解匿名对象

学习重点:掌握类的创建和使用

掌握对象的创建与使用06二月202379第三章类和对象

本章提要:面向对象基本概念类的创建和使用对象的创建与使用参数的传递匿名对象

06二月2023803.1面向对象的程序设计方法概述

3.1.1抽象

抽象是人们解决问题的主要手段,也是面向对象程序设计解决实际问题法宝之一。所谓抽象就是指从众多的事物面向对象程序设计标志着程序设计思想发展到一个新的高度,它用一种更符合人们认识客观世界的思维方式进行程序设计:相对于面向过程的程序设计以研究问题的解决过程为主体,面向对象编程是以对象为主体,使编程富于创造性,提高了程序的可重用性,简化了编程过程,同时也使程序更易于维护。06二月202381中舍弃个别的、非本质的属性,抽出共同的、本质的属性的过程。是面向对象程序设计的核心概念。用面向对象编程解决现实世界的问题时,首先是利用抽象技术将现实世界中的各种实体,归纳总结出共性的东西形成一类实体的基本特征。这些特征包括属性和行为,这些本质属性和方法的有机组合,就是面向对象方法中的类。3.1.2封装

封装性是面向对象编程的基本特性之一,它通过封装隐蔽了对象的内部实现细节。对象的封装有两个方面:06二月202382一方面表示对象的属性和方法是不可分割的整体。对象的属性和方法封装为一体具有重要的意义,因为它反映了对象同时具有了客观事物的静态特征和动态行为相统一的客观规律,使软件对客观事物的描述更接近人类表述;而过去的面向过程的编程语言都是将功能和数据相分离,使软件对客观事物的描述存在偏差,很难自然地用语言表达客观事物的对应关系。另一方面,封装还表示对象内部细节的隐蔽性。对内部细节的隐蔽性反映了事物客观的相对独立性,这样既可以防止外界的干扰,又可以降低复杂性。在java语言中,对象、类和包逐层封装,为管理大量的对象和类提供了方便,也增强了语言的安全性。隐藏了内部细节也使得java的使用者和设计者分离,使用者只需用接口去满足软件重用的策略,可以降低软件开发成本,缩短开发周期,是软件的开发和维护得到根本性的改善。06二月202383访问对象,而不必知道对象的内部细节。从软件工程的角度讲,封装也符合模块化设计原则,满足软件重用的策略,可以降低软件开发成本,缩短开发周期,是软件的开发和维护得到根本性的改善。

3.1.3

继承面向对象程序设计的另一重要特点是类的继承性。继承是让一个类成为另一个类的子类,子类继承父类的所有特性,并可以扩充自己的特性。这种关系为共享数据和操作提供了一种良好的机制。继承提高了软件的重用性、可用性和界面的一致性。根据继承的特性,可以将继承分为如下两种主要形式:06二月202384(1)直接继承和间接继承。如果类c的定义直接继承于类b,则称c直接继承于b,且b是c的直接父类;如果又有b类又直接继承于a类,则可称c类间接继承于a类。间接继承体现了继承关系的可传递性。(2)单继承和多继承。如果一个类只有一个直接父类,则称该关系为单继承;如果一个类有多于一个以上的父类,则称该继承关系为多继承。Java语言只支持单继承,而不支持多继承。

3.1.4

多态多态性也是面向对象编程的一个特性,它反映了现实世界中谋类事物中的每个实体,都具有一些不同于其它实体的某些方面,也是针对于类中有相似功能的06二月202385不同方法以同一方法名来定义。这样,可以用相同的方式调用不同的同名方法。Java中通过方法的重写和方法重载类实现多态。3.2类

类是组成java程序的基本要素,也是java程序设计的重要思想表现。作为程序的基本要素,类封装了某个对象范畴的状态和方法,可以看作定义对象的模板。3.2.1类声明类声明的最一般格式为:[类修饰符]class类名[extends父类名][implements[,接口名]06二月202386{…//类体}其中,[]中的元素表示可选项。大括号对“{}”及之间的内容为类体。类修饰符表示类的性质,主要是对于访问权限的限定。类的修饰符主要有:

l

Public公共类修饰符。表示可以被相同包中的类继承或访问,而不同包中的类也可以通过import引用后再继承或访问。l

Final终结类修饰符。这将在第五章介绍。l

Abstract抽象类修饰符。它没有方法的实现,也没有构造方法。不能用new运算符实例化。不能被继承。也将在第五章进行详细介绍。06二月202387class表示类声明的开始,class为关键字,用来定义类。“class类名”部分用来声明类。类名必须符合java对标识符的命名标准,如果类名使用拉丁字母,习惯上首字母使用大写;类名为容易识别的关系可用多个单词复合而成,此时习惯每个单词首字母大写。关键字extends表示类继承了某个父类,父类名必须是java标准类名或程序本身已定义过的类名。关键字implements表示继承某个接口,若有多个接口则接口间用逗号隔开。3.2.2类体

类是创建对象的模板,因此它应该能够描述一类事物共有的属性和功能,这个描述过程由类体实现。类声明之后的一对大括号“{”、“}”以及它们之间的内容称06二月202388做类体,大括号之间的内容称做类体的内容。类体的内容由两部分构成:一部分是变量的定义,用来刻画事物的属性;另一部分是方法的定义,用来描述事物的功能。例子3.1:定义一个People类,类体内容的变量定义部分定义了1个double类型变量“身高”、1个布尔类型变量“性别”、两个个字符串类型变量“姓名”和“职业”,和一个方法“人物简介”。classPeople{double身高;//定义变量部分

booblean性别=true;//定义变量时可以同时进行赋值

String姓名,职业;

publicvoid人物间介()//方法定义

{

System.out.println(“个人基本资料:”+姓名+性别+身高+职业);}}06二月202389当然,上述类的定义还可以有别的属性,如“婚否”等,也可以有别的方法,如“业余爱好”等。特别注意的是:在变量定义部分可以将变量定义部分可以和变量的赋值同时进行,但不可以如下这样做:classPeople{double身高;//定义变量部分

booblean性别;//定义变量和赋值分开进行

性别=true;

…因为,加下画线的语句属于对变量操作语句,而不是定义语句。所有变量的操作语句只能放在方法种进行。06二月2023903.2.4类的变量上一节提到类体分为变量定义和方法两部分。变量除了在类体变量定义部分进行定义外,还可以在方法内部定义;另外,成员变量又可以分为静态变量和实例变量。1)成员变量的定义格式[修饰符]变量类型变量名=初值;其中,变量名应为合法的标识符,尽量做到见名知意;变量类型通常指变量的基本数据类型。其中变量类型和变量名两项不可以省略。有时候某些类的实例也会作为类的成员变量,对象成员的定义格式如下:类名对象名=new类名([参数表]);大家可以类比一下普通变量和对象定义的关系。06二月202391

1)变量的修饰符变量的修饰符有进行访问控制的修饰符和非访问控制的修饰符两种,主要的访问控制修饰符有public、protected等,这些修饰符主要在继承等访问时进行访问权限的控制,将在第五章进行详细介绍;非访问控制符主要有static、final等,将在后面单独介绍。2)成员变量和局部变量变量按照定义的位置,可以分为成员变量和局部变量。变量定义部分定义的变量称为类的成员变量,成员变量在整个方法内有效,且和它在类体中书写的顺序无关;在方法内部定义的变量或方法的参数称为局部变量,局部变量只在定义它的方法内有效。例3.2:在例3.1的基础上增加一些变量及方法。06二月202392classPeople{double身高;//全局变量

booblean性别=true;String姓名,职业;

publicvoid人物间介() //方法定义{age=30; //合法,因为age为全局变量,切合定义位置无关String爱好=“围棋”; //局部变量

System.out.println(“个人基本资料:”+姓名+年龄+性别+身高+职业+爱好); }

intage;publicvoidspeak(Strings){System.out.println(“我的娱乐是”+爱好);//非法,变量爱好是局部变量}}在变量定义过程中,有时会出现成员变量和局部变量同名的情况,此时,在出现局部变量的方法中,同名的成员变量会被隐藏,即这个成员变量会在这个方法内暂时失效。06二月202393如:classTest{inta=30;publicstaticvoidmian(args[]) {inta=60;System.out.println(“a=”+a);}}程序输出结果为a=60,因为全局变量a对于main方法来说,已经失效。但有的时候还需要在出现上述情况的方法中还使用全局变量,就必须使用关键字this。特别是希望某些方法得到的参数作为全局变量来用时,如下例所示。例3.3:编写一个类,能够根据一个方法的参数来修改全局变量a。classTest{

06二月202394staticStringa=“全局变量”;

publicString修改字符串(Stringa) {Stringa;this.a=a;//方法中的参数和全局变量同一化

System.out.println(“a=”+a);}}

1)静态成员变量(类成员变量或类变量)与实例成员变量(实例变量)如果成员变量的类型关键字前面有关键字static,这样的成员变量称作类变量或静态成员变量。如:classdog{floatx;//实例成员变量

staticinty;//类变量…}06二月202395如果一个类中的某个成员变量是类变量,那么所有类的实例对象的这个类变量都分配给同一处的内存,修改了其中一个对象的这个类变量,其他类的这个类变量也会随之改变。也就是说,类变量被所有对象共享。3.2.3构造方法

根据类创建对象时,总是使用一个特殊的方法来初始化对象,这个方法称为构造方法。构造方法的名字要求与类同名(包括大小写),且无返回值。在创建对象时,java语言都会自动调用构造方法为新对象进行初始化。一个类可以创建多个构造方法,但必须具有不同的参数,也就是说,构造方法可以重载。利用不同参数调用不同的构造方法,可以实现对象的不同初始化。例3.4:还是people类的定义:06二月202396classPeople{Stringname,career;booleansex;//true代表女,false代表男

intage;doubleheight;//从姓名、年龄角度分析people类时使用

publicPeople(Stringname,intage) { =name; this.age=age;System.out.println(“姓名:”+name+“\n”+“年龄:”+age); }//从性别、职业角度分析people类时使用publicPeople(Stringcareer,booleansex) { this.career=career; this.sex=sex;System.out.println(“性别:”+sex+“\n”+“年龄:”+age); } publicPeople()//如果有前面定义的构造方法,最好也定义此构造方法: { }}06二月202397使用构造方法进行初始化的好处是避免了在生成对象后每次都调用对象的初始化方法,构造方法内部成员遵循前面局部变量的使用规则。总结构造方法有以下特点:l

构造方法名与类名必须大小写及拼写完全一致。l

构造方法用于对象初始化,不需返回值,但是不必用void说明。l

构造方法不能被程序调用,只能通过new运算符调用。l

构造方法可由编程人员在类中定义,当用户没有定义时,java语言会自动生成一个为空的构造方法,当用new调用默认的构造方法时,对象被初始化为内部各数据相应数据类型的默认值;但是当用户定义有构造方法时,默认的构造方法会失效,如果还要用的话,最好把默认的构造方法显式地定义出来。06二月202398构造方法对于创建对象非常关键。虽然在大多数情况下,类的对象都是调用有参数的构造方法,方便对象变量的初始化。

同时,类定义时如果没有声明任何构造方法,系统会赋给此来一个默认(无参)的构造方法。但是,一旦用户在类中声明了构造方法(有参),系统将不会再赋给这个类默认的构造方法了。所以,好的习惯是:要么不声明构造方法,要么声明两个以上构造方法,两个中包括一个无参数的构造方法。3.2.5终结函数终结方法:finalize(),该方法包含在java.Long.Object类中。java语言自动管理内存,可以自动进行垃圾收集,在收集前自动调用对象的finalize()方法来释放系统资源。finalize方法06二月202399很相似c++中的析构函数。但由于java有垃圾回收机制,并且java垃圾回收器的使用不由程序员控制,也无规律可循,有可能在程序终止时都没有启动的机会。因此,这样的资源回收并不是可靠的方法。这种垃圾回收器的不确定性,有时会给程序运行带来麻烦,比如说在某段时间系统产生了大量的待释放资源却无法有效释放。为了解决这种麻烦,java里提供了System.gc()方法,使用这个方法,可以强制启动垃圾回收器,进而自动执行finalize()方法。例3.5:一个finalize的一个典型应用示例。classPerson{ publicvoidfinalize() { System.out.println("theobjectisgone!"); }

06二月2023100publicstaticvoidmain(String[]args) { newPerson(); newPerson(); newPerson();System.gc(); System.out.println("theprogramisending!"); }}运行结果如图3-1。

图3-1对象的释放

3.2.6类方法和实例方法06二月2023101正如成员变量分为类变量和实例变量一样,类的方法也分为类方法和实例方法。如:classdog{floatx()//实例方法{…return…}staticinty();//类方法{…

return…}}若一个方法被声明为类方法,则它只能对类变量进行操作,且象类变量一样,类的所有实例对象共享同一个类方法。如:06二月2023102classtest{inta=3;staticintb;floatf(intx,inty){a=x;b=y;//变量引用合法,因为f为实例方法returnx*y;}staticfloatg(intx,inty){a=x;b=2*a;//变量a引用不合法,因为g为类方法,而a为实例变量returnx*y;}}3.3

对象的创建和使用知道类是创建对象的模板。当用一个类创建了一个对象时,意味着一类事物中具体的某个客观实体被程序表述了。在面相对对象的程序中,对象是由属性和方法封装而成,属性是实体的一些特征值或构件,方法是实体的功能和行为。06二月2023103对象可以被看作复杂的数据结构。一个对象的生命周期分为三个阶段:生成、使用和清除。3.3.1创建对象创建一个对象包括两个步骤:声明对象和为对象分配内存。1)对象的声明一般格式为:类名对象名如:People张三这里people是前面定义的一个类的名字,张三是声明对象的名字。但此时对象“张三”的内存中没有任何数据,即“张三”还是一个空对象,不能使用。要是用这个对象还必须为这个对象分配内存,也叫做为对象分配实体。06二月2023104

1)为对象分配内存为对象分配内存,即使用new运算符和类的构造方法实例化某个对象。如果类中没有构造方法,系统会自动调用默认的构造方法(没有参数,名字遵循普通构造方法的要

温馨提示

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

评论

0/150

提交评论