大三上java17单元课件lesson_第1页
大三上java17单元课件lesson_第2页
大三上java17单元课件lesson_第3页
大三上java17单元课件lesson_第4页
大三上java17单元课件lesson_第5页
免费预览已结束,剩余109页可下载查看

下载本文档

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

文档简介

1、Java程序语言设计Lesson 6Contents4Java 中的包123Java中的注释再次认识数组和字符串作 业21. Java中的包通过前面的学习我们知道,Java类必须放置在*.java文件中。之前我们都是直接将所有的*.java源文件放在同一个目录下。这样难免显得很乱。这里,我们将学习如何使用Java中的包和如何将类放置在不同的包中。31.1 包(Package)为了将源文件更好的组织起来,Java中的类可以存放到不同的文件夹中。Java中用于存放源文件的文件夹叫做包(Package)。Java要求一个包的名字必须是符合Java标识符规定的名字,否则一个文件夹是不能作为包的。在我们

2、的文件系统中(也就是磁盘上),包的存在形式就是一个普通的文件夹。Java中的包内可以包含源文件,也可以包含其它的包。这点与文件夹也是类似的。我们可以认为Java中的包就是有着符合标识符规定的文件夹。41.1 包(Package)java中的类的组织是悬空的,这样的话,它们可以随意放在任意平台下,但是要在该平台下正确找到一个类,则必须使用classpath来设置类所在目录的前面一部分(即区别于平台的部分)。在java中常常把一棵类树压缩成一个.jar文件.51.1 包(Package)Java中的包名必须是一个合法的标识符。包的全限定名是从源代码的根目录开始,以点号“.”作为分隔符的。比如在源代

3、码根目录下有一个包叫做:container,其下又有一个包叫items,则items的全限定名为:container.items 61.2 在Eclipse中使用包首先需要创建一个新的项目(Project)。然后我们开始规划类的目录结构。我们还是以汽车为例子。假设我们现在有三种汽车Car,Bus和RaceCar。我们想把Car和Bus放在一个名为“common”的包中,然后把RaceCar放在“common”包内的另一个名为“special”包中。这样,common包中就既有源文件又有其它包了。71.2 在Eclipse中使用包创建流程第一步我们新建一个项目(project),其中src目录就

4、是我们所说的“源代码的根目录”,在这个目录下的各个类可以相互间调用。但问题是实际中的Java项目都很大,往往有几十上百甚至上千个类,这样都放在一个目录下很不方便,也很乱。所以要分门别类。81.2 在Eclipse中使用包在根目录下(src目录)下创建一个包(common)。右键src目录New/Package 填写对话框;单击Finish,包创建完成;91.2 在Eclipse中使用包在common包中创建Car类和Bus类。右键单击common包New/Class填写对话框;在对话框中是可以选择包的,具体可以动手去操作一下。101.2 在Eclipse中使用包在common包中创建speci

5、al包。右键单击srcNew/Package在Name属性栏中键入包的全限定名单击Finish完成。具体到这个例子就“common.special”;最后在special类中添加RaceCar类。111.2 在Eclipse中使用包我们还可以调换包显示的方式:Package Explore菜单Package PresentationFlat/Hierarchical;121.2 在Eclipse中使用包这时,我们打开Car类,会发现如下代码:package common;public class Car 注意开头的“package common;”很重要。它表明了Car类所从属的包。之前之所以

6、没有是因为所有类都保存在src根目录下,这个部分被默认隐藏了。131.2 在Eclipse中使用包package语句的格式如下package+空格+类所在包的全限定名+;Eclipse软件会自动帮我们添加package语句。141.3 包的使用Java中引入包后,使结构更清晰,可以根据类的不同用途,来把它们放入不同的包之中。Java运行在不同包中命名相同名字的类。类的全限定名:类所在包的全限定名+ . +类名比如RaceCar类:common.special.RaceCar151.3 包的使用不同包中可以有同名的类注意类的全限定名使用包中的类时 必须使用类的全限定名对于同一个包中的类 可省略全

7、限定名中的包名编译包中类时 需要进入源代码根目录161.4 import语句通过上面的学习,我们发现虽然通过包将类组织起来会让源代码的结构更加清晰。但是在使用包中的类时,却要通过类的全限定名,这多少给程序带来了些许不便。本节中我们将学习使用“import”语句将繁琐降至最低点。171.4.1 import语句“import”是Java中的关键字,用于提供给Java编译器“类中使用到的其它类的寻找位置”。单词import的意思是“引入”。在Java中,它的意思就是“引入其它的类”。其语法格式为:import+空格+类的全限定名+;181.4.1 import语句我们现在根目录下创建一个包usei

8、mport,然后在其中创建一个类UseImport,假设这个类需要使用common.Car类,则有:package useimport;import common.Car;public class UseImportCar abc= new Car();191.4.1 import语句注意import语句的格式123在代码中使用import语句引入所需类 则使用这些类时无需使用其全限定名 直接使用类名即可源文件中的import语句可以有多个201.4.2 引入包内所有类在一个类中,import语句可以有多个。问题是如果需要引入几十个甚至百十个类,一个一个导入就会很繁琐。Java中的packag

9、e语句还有另一种类似的语法,可以用来将一个包中所有的类一起引入进来。这样,当我们使用到一个包中的多个类时,就不比一个个的敲入import语句了。211.4.2 引入包内所有类格式如下:import + 空格 + 包的全限定名 + . + * + ;import语句的这两种格式可以同时使用(不同包)。此语法仅是用来引入包中所有的类,而对于此包中的子包中的类则没有引用。221.4.3 import语句的一个问题Java编译器不允许在同一个源文件中存在两个或者多个使用第一种语法的import语句引入类名相同的类。如果第一种语法的import语句引入的类和第二种import语句引入的类有冲突,Java

10、编译器会采用第一种import语法结构引入的类。231.4.3 import语句的一个问题比如有一个包fruits,里面有3个类:apple, banana and orange. 包中还有一个子包myFavorite,包内有一个类:apple. 那么当我们使用import语句第一种格式时,不能同时引用两个包中的apple类。import fruits.apple;import fruits.myFavorite.apple;241.4.4 默认引入包前面说过,String类不是基本类型,但我们并没有引入String类。Java编译器会自动为每一个类添加一个import语句:import ja

11、va.lang.*;String类就在Java.lang包中。25Contents4Java 中的包123Java中的注释再次认识数组和字符串作 业262 Java中的注释编程语言是一种抽象和逻辑的语言。我们就需要在源代码中使用自然语言来对代码的作用进行解释。这种用于解释源代码作用的文字就叫做注释。为了区分有效的源代码和注释,向源代码中添加注释需要使用注释专用的语法。Java中有三种注释语法。272.1 使用双斜杠的单行注释前面内容中已经使用过使用双斜杠向源代码中添加一行注释。当源代码中出现了两个连续的双斜杠后(被双引号括起来的不算),那么这两个双斜杠以及双斜杠后面直到此行结束的所有内容都是注

12、释的内容。282.2 多行注释程序中有时候我们需要很多行注释,这时候如果还使用双斜杠就显得太繁琐了。我们可以使用下面的语法添加多行注释:/* + 一行或多行注释内容 + */292.2 多行注释如果Java源文件中出现了连续的“/*”,那么Java会认为后面和下面的内容全部都是注释,空行也不会结束注释,直到遇到一个连续的“*/”。302.2 多行注释例程/*我们也可以使用这种语法写单行注释*/package comment;/*注释从这里开始一直到这里结束*/public class ment /* 同样的,这种注释可以放在任何想要的地方 ,可以不比从一行的开头*/312.2 多行注释注意如果

13、(/*或*/)出现在双引号中,那么同样会被当作是字符串的内容而不会被当作注释。322.3 Javadoc注释上述两种注释,目的在于在源代码中添加说明性文字。而对于Javadoc注释,Java平台提供专门工具来将注释内容从源代码中抽取出来,保存为专门文档。332.3 Javadoc注释格式/*+* 一行注释内容* +*/该注释最大特点在于以/*开头,并且之后每行注释都以*开头。342.3 Javadoc注释Javadoc注释本身格式没有与众不同,关键是Java平台会为其自动生成html格式的文本注释。从而当我们看这个程序时,不需要看源程序就可以直接先看到注释内容,对该程序的组成和功能有一个大概的

14、了解。Javadoc注释在商业上有很重要的应用(类似于商品的说明书);我们来看一个例程。352.3 Javadoc注释为了演示这种注释格式与普通多行注释的不同,我们来使用Eclipse中的Javadoc视图。(1)如果Javadoc视图没有出现在Eclipse的右下部分,我们可以单击菜单中的【Window】|【Show View】|【Javadoc】菜单项(或者在【other】菜单项中找到Javadoc),来让Javadoc视图出现。362.3 Javadoc注释(2)然后,我们将光标移动到方法名“ ment”上,这时候我们会发现Javadoc视图中出现了方法名字,然后还出现了我们添加的注释的

15、内容。37Contents4Java 中的包123Java中的注释再次认识数组和字符串作 业383 数组、字符串和main()方法前面我们学习的Java语法就是Java这个世界的规则。但是只有规则是没用的,我们必须借助外部资源来构建自己想要的东西。这里说的资源就是Java类库中的类。我们一直使用的向控制台输出内容的“System.out.println”也是属于Java类。这里我们将学习最基本的Java类,熟练使用这些类是构建一个Java程序的基础。首先,我们来看看之前接触过的类有哪些诱人的方法。393.1 数组也是类在Java中数组也是类,只不过是一种特殊的类。它特殊并不是因为它复杂,而是因

16、为它简单。简单到我们不用自己去定义数组类而是由Java自己提供数组类的定义。从学习使用一门编程语言的角度来看,我们无需去深究Java是如何定义数组类的。我们主要关注数组类中有什么需要关心的属性和方法。403.1.1 数组的长度 之前关于数组的例程中,我们总是在程序中用一个变量保存数组的长度,如下:int len = 9;int arr = new int9;413.1.1 数组的长度 当需要遍历数组arr时,我们就使用变量len作为其长度。其实这是完全不必要的。对象arr本身就有一个属性length来保存数组的长度。数组对象本身就有一个属性length来代表了数组中元素的个数。423.1.1

17、数组的长度 例程package com.javaeasy.learnarray;public class LengthOfArray public static void main(String args) int arr = new int9; / 创建一个长度为9的数组int len = arr.length; / 使用数组对象的length属性给变量len赋值System.out.println(数组的长度为: + len);/ 将len的值输出Results:数组的长度为:9433.1.1 数组的长度 数组对象的length属性代表了数组中元素的个数443.1.2 final变量我们在

18、前面学习过,数组对象一旦创建出来以后,其中包含的元素的个数是不能够增减的。也就是说,如果我们想要数组对象的length变量的值可以代表数组中元素的个数,那么这个变量的值是不可改变的。453.1.2 final变量如果我们希望一个变量也拥有这种性质,就需要使用java中的final关键字。例程package com.javaeasy.usefinal;public class UseFinalVariable public static void main(String args) final int unchangeable = 9; / final修饰的变量必须赋初始值 unchangeab

19、le = 8;/ 错误,final修饰的变量不可再次赋值463.1.2 final变量123使用final关键字修饰的变量,必须在创建/声明的时候赋初始值。且这个初始值必须是确定的值(等同case语句)使用final关键字修饰的变量,在赋初始值之后不能再次赋值。数组的length属性也是用final修饰的,故无法改变其值473.1.3 多维数组的长度对于多维数组,length属性同样代表数组对象的长度。这个长度是对应维度的长度,而不是所有元素的长度。483.1.3 多维数组的长度例程package com.javaeasy.learnarray;public class LenOfMutiDA

20、rray public static void main(String args) int multiDArr = new int919;System.out.println(第一维的长度为: + multiDArr.length);System.out.println(第二维的长度为: + multiDArr3.length);Results:第一维的长度为:9第二维度长度为:19493.1.3 多维数组的长度multiDArr是一个二维数组的引用,其指向的是一个长度为9的数组。此数组中的每一个元素均是一个指向一维数组的引用。类比:引用相当于钥匙;二维数组的引用相当于钥匙串。503.1.3

21、多维数组的长度multiDArrn是一个指向一维数组的引用,其所指向的数组有19个元素。故multiDArrn.length的值是19.513.1.4 一维数组的clone()方法之前学习的是数组中的length属性。这里学习数组类中的一个方法clone()方法。clone的意思就是“克隆”。方法的返回值 就是数组的中内容的复制。523.1.4 一维数组的clone()方法我们还是通过例程来学习package com.javaeasy.learnarray.clone;public class PrimerArrClone public static void main(String args

22、) int arr = 7, 8, 9 ; / 1)创建一个int类型一维数组int clonedArr = arr.clone(); / 2)调用此数组的clone方法。arr2 = 777; / 3)给原数组第三个元素赋值clonedArr2 = 888; / 4)给clone出的数组第三个元素赋值System.out.println(arr的第三个元素的值是: + arr2); / 5)输出两个数组的第三个元素的值System.out.println(clonedArr的第三个元素的值是: + clonedArr2);533.1.4 一维数组的clone()方法分析例程创建一个一维int

23、数组,并为其赋初值。543.1.4 一维数组的clone()方法调用数组clone()方法,将数组复制一份,并让cloneArr指向复制后的数组。复制的数组中元素和原数组相同。553.1.4 一维数组的clone()方法使用arr引用给原数组第三个元素赋值777.注意:原数组与clone()复制的数组是不同的数组对象,故改变的仅是原数组元素。563.1.4 一维数组的clone()方法使用cloneArr引用给复制出的数组中第三个元素赋值888,同样,该操作不会影响原数组对象。573.1.4 一维数组的clone()方法最后将两个数组的第三个元素值输出。arr的第三个元素的值是:777clon

24、eArr的第三个元素的值是:888583.1.5 数组类型不是基本数据类型当数组元素的类型不是基本数据类型时,clone方法的行为有可能会让我们吃惊。我们先创建一个类TestClonepackage com.javaeasy.learnarray.clone;public class TestClone int value=9;593.1.5 数组类型不是基本数据类型我们接着创建TestClone类型的数组,并调用clone()方法。注意:对于非基本类型的数组,clone()方法复制的数组的内容是指向对象的引用而非对象本身。故数组的clone并没有产生新的元素对象。603.1.5 数组类型不是

25、基本数据类型例程非基本数据类型clone()方法613.1.5 数组类型不是基本数据类型解析例程此处比较简单,创建TestClone类型的一维数组,并给第二个元素赋值。注意:由于一维数组中是对象的引用,故赋值过程就是创建对象实例的过程!623.1.5 数组类型不是基本数据类型对数组Arr调用clone()方法。因为数组中内容是指向对象的引用,故赋值过程并没有产生新的TestClone类对象。633.1.5 数组类型不是基本数据类型给arr第二个元素赋值。643.1.5 数组类型不是基本数据类型给cloneArr的第二个元素赋值。注意:cloneArr和arr数组中的引用指向的是同一对象。故此处

26、赋值将会覆盖之前的赋值。653.1.5 数组类型不是基本数据类型输出arr1和cloneArr1的值。由于它们指向的是同一对象,故此处值均为999.663.1.5 数组类型不是基本数据类型创建一个新的TestClone对象,并让cloneArr的第二个元素指向这个对象。注意:这时arr和cloneArr的第二个元素指向的对象不同了。673.1.5 数组类型不是基本数据类型再次向两个数组的第二个元素赋值。683.1.5 数组类型不是基本数据类型程序结果arr的第二个元素的value属性的值是:999cloneArr的第二个元素的value属性的值是:999arr的第二个元素的value属性的值是

27、:777cloneArr的第二个元素的value属性的值是:999693.1.6 多维数组的clone()方法其实明白了一维数组的clone()方法,再去理解多维数组的clone()方法就不是问题了。clone()方法的实质就是赋值了数组的内容。703.1.6 多维数组的clone()方法我们还是通过例程来学习多维数组的clone()方法713.1.6 多维数组的clone()方法解析例程1. 此处创建一个int型的二维数组,如下图。723.1.6 多维数组的clone()方法2. 此处调用数组的clone()方法。使用cloneMultiArr指向复制出来的数组。733.1.6 多维数组的c

28、lone()方法3. 此处,给数组cloneMultiArr12赋值999.743.1.6 多维数组的clone()方法4. 通过控制台输出MultiArr12和cloneMultiArr12的值。由于二者指向同一实体,故其值均为999.753.1.6 多维数组的clone()方法5. 使用multiArr1来调用clone()方法,并赋值给cloneMultiArr1 。注意:此时multiArr1指向的是一个int类实体。763.1.6 多维数组的clone()方法6. 此处,再次给multiArr12和cloneMultiArr12赋值。注意:此时multiArr1和cloneMulti

29、Arr1指向不同的实体。773.1.6 多维数组的clone()方法7. 输出结果multiArr12的值为:999cloneMultiArr12的值为:999multiArr12的值为:999cloneMultiArr12的值为:777783.2 String类我们一直在使用String类,但对其认识远远不够。一直以来String类都被当作是一个字符串来使用,其实String类有很多方法供我们使用。学习使用这些方法可以让我们灵活的操作字符串和其中的字符。793.2 String类我们先来纠正一个可能的错误观点。方法属性类803.2 String类在前面介绍类时,我们对类的属性有很大的依赖,仿

30、佛一个类就是让我们使用它的属性的。这是一种错误的观点!当我们说到一个类的时候,最应该关心的是它有哪些方法,而不是它有那些属性。其实一个类的属性在大多数情况下是不应该(不应该不是不能够)被使用的,应该被使用的是类中的方法。这是“面向对象编程思想”的一种体现。813.2.1 遍历String中字符String类实际上是用来表示0个或多个字符的类。为了遍历整个字符串,我们需要用到String类提供的两个常用方法。823.2.1 遍历String中字符1. int length()方法此方法的返回值是字符串的长度,即字符串包含字符的个数。例程:String str=“abc”;int len=str.

31、length();result:len=3833.2.1 遍历String中字符2. char charAt(int index)此方法返回指定位置的字符。其参数是想要得到的字符的所在位置。注意:首字符位置为0!例程:String str=“abc”;char ch=str.charAt(2);result:c843.2.1 遍历String中字符例程:遍历一个字符串,找出里面含有几个字符spackage com.javaeasy.learnstring;public class IterateChars public static void main(String args) String

32、str = This is a simple string. We will check how many s chars in this.;char target = s;int len = str.length();int count = 0;for (int i = 0; i len; i+) char ch = str.charAt(i);if (ch = target) count+;System.out.println(字符串: + str + 中包含 + count + 个 + target+ 个字符); results:字符串:“This is a simple string.

33、 We will check how many s chars in this.”中包含7个s字符853.2.1 遍历String中字符123String类中length()方法的返回值是String对象中字符数。不要与数值中的length属性混淆对于String对象charAt()方法能接受的参数最小值为0,最大值为length()方法返回值减1使用“=”来判断两个char变量是否相等863.2.2 获取字符串中一部分有时候我们需要截取一个String对象的一部分。String类提供了现成的方法来完成这个功能。这个方法叫做substring,它有两个重载。873.2.2 获取字符串中一部分S

34、tring substring(int beginIndex, int endIndex)substringStringsubstring(int beginIndex)883.2.2 获取字符串中一部分例程我们有一个字符串和一个字符,设计一个程序让其输出此字符串第一次出现该字符后的内容。注意:不包括该字符。893.2.2 获取字符串中一部分package com.javaeasy.learnstring;public class SubString public static void main(String args) String str = ABCDEFGH;char target =

35、 C;int len = str.length();String result = null;for (int i = 0; i len; i+) if (target = str.charAt(i) result = str.substring(i + 1);break;if (result != null) System.out.println(结果为: + result); else System.out.println(没有在字符串中找到目标字符);Result:DEFGH903.2.3 比较两个字符串是否相等对于类型相同的基本类型变量,可以使用“=”来比较。那么对于String类型,

36、乃至延伸到对于“两个对象”,如何判断其是否相等呢?两个对象是否相等本质上是一个逻辑判断过程!913.2.3 比较两个字符串是否相等equals()方法String类中提供一个equals()方法,其返回值是一个boolean变量。 equals()方法会比较两个String类型字符串的每一个字符(区分大小写),若完全相同,则返回true,否则false。923.2.3 比较两个字符串是否相等例程package com.javaeasy.learnstring;public class StringEquals public static void main(String args) int v

37、alue = 1;String str1 = ABC + value;String str2 = abc + value;String str3 = ABC + value;boolean equals12 = str1.equals(str2);boolean equals13 = str1.equals(str3);System.out.println(字符串str1和字符串str2相等: + equals12);System.out.println(字符串str1和字符串str3相等: + equals13);Results:字符串str1和字符串str2相等: false字符串str1

38、和字符串str3相等: true933.2.3 比较两个字符串是否相等注意两个引用之间也可以使用“=”来进行判断。若它们指向的是同一对象或都是null,则返回true;否则返回false。943.2.3 比较两个字符串是否相等例程package com.javaeasy.learnstring;public class StringRefEquals public static void main(String args) int value = 1;String str1 = ABC + value;String str2 = ABC + value;String str3 = str1;/

39、 (1) 字符串的复制boolean equals12 = (str1 = str2);boolean equals13 = (str1 = str3);System.out.println(引用str1和引用str2相等: + equals12);System.out.println(引用str1和引用str3相等: + equals13);Results:引用str1和引用str2相等:false引用str1和引用str3相等:true953.2.3 比较两个字符串是否相等在例程(1)处,str1和str2指向不同的对象,虽然对象内容相同;而str1和str3指向同一对象。963.2.3

40、比较两个字符串是否相等123String类中equals()方法可以判断两个String对象是否相等对象只存在逻辑上的相等,这中判断需要借助方法来实现使用“=”可以用来判断两个引用是否指向同一个对象973.2.4 判断字符串开头和结尾有时我们需要判断一个字符串是不是以另一个字符串开头或者结束,这时候我们就要用到String类的如下两个方法了。String startsWith(String prefix)String endsWith(String suffix)983.2.5 分割字符串String类提供一个split()方法,它可以将一个字符串以另一个字符串为分隔符将字符串分割为1到多个字

41、符串对象,它的返回值就是这些字符串对象的数组。993.2.5 分割字符串例程package com.javaeasy.learnstring;public class SplitString public static void main(String args) String str = AAA#BBB#CCC;String pieces = str.split(#);int len = pieces.length;System.out.println(将str按照#分割后得到的结果:);for (int i = 0; i len; i+) System.out.println(pieces

42、i);Results:将str按照“#”分割后得到的结果:AAABBBCCC1003.2.6 其它有用方法1. int indexOf()当我们希望在字符串对象中查找特定字符代码时,String类提供了现成的indexOf()方法来完成这个功能。例程:String str=“ABCDE”;int index1=str.indexOf(C);int index2=str.indexOf(F);rusult:index1的值为 2,index2的值为-11013.2.6 其它有用方法2. String replace(char oldChar, char newChar)String类提供一个叫做

43、replace的方法用来将字符串中的字符/字符串替换成另一个字符串。使用这个方法我们可以方便的实现替换功能。例程:String str=“ABCDE”;String str1=str.replace(“CD”, “cd”);result:str1的内容是:ABcdE1023.2.7 String对象String类常用的方法已经介绍的不少了。现在我们学习一个String对象的特性:String对象的内容是不可改变的。也就是说,String对象在创建出来以后,其中的内容就不可改变了。1033.2.7 String对象对于replace方法,很容易让人误以为它修改了原始String对象的内容,其实不是这样的。它是创建了一个新的String对象保存替换后的结果。对于字符串的拼接,其实也是创建了新的字符串对象。1043.2.7 Str

温馨提示

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

评论

0/150

提交评论