第7章类.pdf
《第7章类.pdf》由会员分享,可在线阅读,更多相关《第7章类.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 92第 7 章 类 什么是类?类有什么用处?为什么它会是面向对象编程的一个典型特征?带着这些问题,本章将会结合大量的实例为读者一一讲解。类是面向对象编程中最基本、也是最重要的特征之一。从本章开始,将介绍如何进行面向对象的程序开发,以及程序开发的过程中,所需要具备的重要思想是什么?编程思想是很多学习编程的人,学习时间长却学不好的一个主要原因。7.1 JDK 5 和 JDK 6 特性 本节介绍什么是 JDK,以及 Java 开发工具集中两个不同的版本。本节的讲解比较简单,希望有兴趣的读者查看其他的相关书籍。7.1.1 什么是 JDK JDK 的意思是 Java 开发工具包(Java Develo
2、pment Kit,JDK),JDK 是 Sun 公司免费提供的 Java 语言工具,是 Java 应用程序开发的基础。通常第三方开发工具“JBuilder9.0”、“IBM VisualAge for Java”等都是基于 JDK 进行开发。7.1.2 JDK 5 的特点 JDK 5 其实就是 JDK1.5,JDK1.5(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,包括泛型、for-else 循环、自动装包/拆包、枚举、可变参数、静态导入。使用这些特性有助于编写更加清晰、精悍、安全的代码。下面简单介绍下这些新特性。?泛型(Generic)C+通过模板技术可以指定集合的元素类型
3、,而Java在1.5之前一直没有相对应的功能。在 C+中,一个集合可以存放任何类型的对象,相应地从集合里面拿对象的时候,也不得不对他们进行强制得类型转换。JDK1.5 引入了泛型,并且允许指定集合里元素的类型,这样可得到强类型在编译时刻进行类型检查的好处。?For-Each 循环。For-Each 循环的加入简化了集合的遍历。?自动装包/拆包(Autoboxing/unboxing)自动装包/拆包大大方便了基本类型数据和其包装类的使用。自动装包就是基本类型自动转为包装类。自动拆包就是包装类自动转为基本类型。在 JDK1.5 之前,总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制解决了问题
4、。?枚举(Enums)JDK1.5 加入了一个全新类型的“类”枚举类型。?可变参数(Varargs)93可变参数的出现,使程序员可以声明一个接受可变参数数目的方法,注意的是可变参数必须是函数声明中的最后一个参数。?静态导入(Static Imports)要使用静态成员(方法和变量),必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法,在当前类直接可见,从而使用这些静态成员无需再给出他们的类名。7.1.3 JDK 6 的特点 浏览了 JDK6 的新特性,感觉“Compiler API”的应用有很大空间。JDK6 提供对代码的编译功能,可以实现代码编辑、编译及加载运行,可
5、以在系统运行中动态配置和扩展用户自定义的功能,甚至可以把 Java 语句作为脚本,内嵌到原有系统中扩充功能集。7.1.4 JDK 5 与 JDK 6 的比较 2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号“Mustang(野马)”,跟“Tiger(Java SE 5)”相比,“Mustang”在性能方面有了不错的提升。从与“Tiger”在 API 类库的比较来讲,有了大幅度加强,虽然“Mustang”在 API库方面的新特性显得不太多,但其提供了许多实用和方便的功能:在脚本、Web Service、XML、编译器 AP
6、I 数据库、JMX、网络方面都有不错的新特性和功能加强。随着不断的发展和进步,相信 JDK 6 会有不错的表现。7.2 用比较法阐述类的概念 现实生活中的有一个例子。造房子的砖头有红色的砖、有方砖、有圆砖,此时,在现实生活中各种各样的砖头都可以称作是对象。红色的砖可以称为一个对象,圆砖可以称为一个对象,它们有共同点,但也有不同的方面,这些不同的方面使得它们不可能是同一个对象。然而,砖头就是所有种类的总称,所有的砖都是由它派生而来,所以这个砖可以称为是一个类。类就是模板,也可以说类其实就是创建对象的基地,它能产生很多不同的对象。再举个例,汽车就是一个类,而卡车、轿车等等都是从汽车这个类中派生出来
7、的,也就是说,这些都是属于汽车这个类。其实类是个很灵活的概念,也可以将轿车作为一个类,在轿车这个类中,再创建各种品牌的轿车对象出来,有桑塔纳、红旗、奔驰,而每种轿车都是一个对象。类与对象的关系,有点像一个母亲与子女的关系。本章重点讲述类的知识,至于对象的知识将在下一章给大家详细讲述。7.3 Java 中已有的类 目前,Java 中已经存在了很多由前辈开发出来的类,可以被开发人员直接使用,将这些 94有共同特征的类组合在一起形成了类库。在 Java 中包含大量用于不同目的的类库,这些类库是开发 Java 软件的基础。即使是需要设计自己的类,也有可能使用到 Java 类库中的很多类。可以打开 AP
8、I 文档,查看一些已经存在的类库,能发现 Java 类库非常丰富。鉴于读者都是初学者,所以暂时只介绍一些简单的 API 类库,随着学习的深入,后面读者会接触到更多的类。7.3.1 Java 的数学运算处理类 Math 看到“Math”这个单词,立刻就能明白这个类一定跟数学有关。其包含了丰富的数学函数,可以使用这个类的方法,而不用管内部是如何实现的。通过查看 API 文档,知道“Math”类中的所有方法和字段都是可以直接访问的,在 Java 中,称之为静态方法和静态字段。有关静态方法和静态字段的概念,后面章节有介绍,现在只需要知道,这些方法和字段可以直接去使用。那么如何访问其中的方法和字段呢?因
9、为这些成员是静态成员,所以可通过“类名.方法名称”和“类名.字段”来访问方法和字段。在 Math 类中,由于都是静态成员,就可以使用“Math.方法名称或常量名”。下面把这个类中经常使用到的方法和属性值列举出来,以提供给大家参考。Math 类中包含了两个静态常量:Math.PI-表示数学常量。Math.E-表示和 e 的最可能接近的近似值。Math 类提供了常用的三角函数:Math.sin-表示正弦函数 Math.cos-表示余弦函数 Math.tan-表示正切函数 Math.asin-表示反正弦函数 Math.acos-表示反余弦函数 Math.atan-表示反正切函数 Math.atan2
10、-表示反余切函数 Math 类还提供了幂函数、指数函数和自然对数函数:Math.pow-返回 a 的 b 次方 Math.exp-返回 e 的 a 次方 Math.log-返回 a 的常用对数值 Math 类提供了一个常用的数学运算函数:Math.abs-返回绝对值 Math.sqrt-返回平方根 Math.max-返回最大值 Math.min-返回最小值 Math 类提供了角度与弧度相关的转换运算方法:Math.toDegrees(double angrad)-将弧度转换成角度值 Math toRadians(double angdeg)-将角度值转换成弧度 Math 类提供了四舍五入的运算
11、及截断运算:Math.round(double e)-四舍五入运算 Math.floor(double e)-返回不大于 e 的最大整数 Math 类提供了一个专门用来产生随机数的函数:Math.random()-用来产生随机数的函数 以上是在 Math 类中常用的方法函数。下面将通过举例来熟悉这些函数。95首先通过下列程序代码来熟悉数学运算函数的用法:public class Math1 public static void main(String args)int x=9;int y=16;System.out.println(Math.sqrt(x);-计算 x 的平方根的结果 Syst
12、em.out.println(Math.abs(x);-计算 x 的绝对值的结果 System.out.println(Math.max(x,y);-计算 x 与 y 的最大值 System.out.println(Math.min(x,y);-计算 x 与 y 的最小值 运行结果:3.0 9 16 9 在运用这些函数方法的时候,希望能注意到函数所带的参数,“Math.sqrt”、“Math.abs”带的是一个参数。“Math.max”、“Math.min”带的是两个参数,这一点必须记住。再通过下列程序代码来熟悉四舍五入函数的用法:public class Math1 public stati
13、c void main(String args)double x=4.51;System.out.println(Math.round(x);-返回的是四舍五入的值 System.out.println(Math.floor(x);-返回的是不大于 x 的最大整数 运行结果:5 4.0 通过以上两个例子可以看出,函数方法的使用很简单,关键是要注意其参数。纵观类库,其实就是一个方法和属性的集合。至于类库的学习方法,关键是多练习,只要熟悉了类库中各种方法的使用,也就掌握了类库。7.3.3 测试时间和日期的类-Date 类 下面要介绍另一个比较重要的类:Date 类。Date 类包括了有关日期和时间
14、操作的一些方法。Date 类提供相应的方法,可将日期分解为年、月、日、时、分、秒。Data 类还可以将日期转换成一个字符串,甚至可以执行反向的操作。因为 Math 类中的方法和字段属性都是静态的,所以可以直接使用它。而 Date 类中的方法和字段属性不是静态的,所以不能直接用“类.方法名或字段名”,必须使用“对象名.方法名或字段名”。如何将类变成对象呢?因为类是模板,对象是实物。在 Java 中,从模板中创建一个实物是使用关键字“new”来实现的(在下一章会详细介绍创建对象方面的知识)。针对非静 96态的类或方法,就要使用对象来操作,不能使用类来操作。下面演示如何从类中产生一个对象:new D
15、ate()这个表达式构造了一个日期对象,并把这个对象初始化为当前的日期和时间,其实可以从一个类中,产生多个不同种的对象。Date 类可创建很多种不同的对象,如:Date(int year,int month,int date),Date(int year,int month,int date,int hrs,int min);但是如果在程序中需要将时间显示出来,应该使用什么方法呢?这里有两种方法:第一种方法是将 Date 对象作为一个参数,传给“println”方法。import java.util.Date;public class Math1 public static void main
16、(String args)System.out.println(new Date();运行结果:Fri Jun 29 14:33:30 CST 2007 这个程序代码段是显示当前的日期和时间。它将 Date()作为当前时间日期,然后将此对象传给“println”方法。另一种方法就是使用 Date 类中的一个方法:“toString”(有关这一点在前面已经介绍过),它可以直接将时间日期,按照字符串的形式显示出来。import java.util.Date;public class Math1 public static void main(String args)System.out.print
17、ln(new Date();System.out.println(new Date().toString();运行结果:Fri Jun 29 14:33:30 CST 2007 Fri Jun 29 14:33:30 CST 2007 这个例子将两种方法作了对比,其实从输出结果来看,是一模一样的。只是使用的方法不同而已。下列代码段说明 Date 类中函数的用法:import java.util.Date;public class Math1 public static void main(String args)System.out.println(new Date().getDay();Sy
18、stem.out.println(new Date().getHours();运行结果:5 15 977.3.4 测试日历的类-GregorianCalendar 类 在对 Date 类的介绍中,读者会发现 Date 类所表示的是一个时间点,也就是在创建对象当时的时间点,而这对于进行日期的相关操作及运算,是非常不方便的。为此,前辈们在Java 类库中,为开发者提供了一个方便操作日期的类:GregorianCalendar 类。其实GregorianCalendar 类是 Calendar 类的一个扩展而已,Calendar 类是从总体上描述历法的类。Date 类中也有用于得到日期的方法函数,如
19、“getDay”、“getMonth”等方法函数,但是这些方法已经不被推荐使用了,在程序中尽量不要使用不被推荐(deprecated)的方法函数。相比之下,GregorianCalendar 类拥有更多的对日期操作的方法函数,GregorianCalendar类的常用方法:Public int get(int field)这里的“field”指的 Calendar 类中定义的常数,返回与“field”相关的日期。举个具体的例子:import java.util.*;public class GregorianCalendar public static void main(String arg
20、s)GregorianCalendar gc=new GregorianCalendar();int X=gc.get(Calendar.MONTH);System.out.println(X);运行结果:5“public void set(int field,int value)”将“field”所表示的日期替换成“value”的值,举个具体的例子:import java.util.*;public class GregorianCalendar1 public static void main(String args)GregorianCalendar gc=new GregorianCa
21、lendar();gc.set(Calendar.YEAR,2009);System.out.println(gc.get(Calendar.YEAR);运行结果:2009 下面是有一些有关如何设置系统时间的方法。“public final void set(int year,int month,int date)”“public final void set(int year,int month,int date,int hour,int minute)”“public final void set(int year,int month,int date,int hour,int minut
22、e,int second)”这里的“final”在后面一章会讲述。上面的三个方法函数是指如何设定时间和日期。看下列代码段,就可以明白以上这三个方法函数是什么含义:import java.util.*;public class Math1 public static void main(String args)98 GregorianCalendar gc=new GregorianCalendar();gc.set(2009,06,18);System.out.println(gc.get(Calendar.YEAR);System.out.println(gc.get(Calendar.MO
23、NTH);System.out.println(gc.get(Calendar.DATE);运行结果:2009 6 18 在上面的例子里,先通过“set”方法设置年份为 2009 年,然后设置日期为 6 月,最后设置日期是 18 号,然后再通过“get”访问器的方法取出值。7.3.5 日历处理的实例解析 对于月历类来说,最重要的参数是年、月、日、小时、分、秒、毫秒,所以 Calendar类提供了这些参数:YEAR(年)、MONTH(月)、DATE(日)、HOUR(小时)、MINUTE(分钟)、SECOND(秒)、MILLISECOND(毫秒)。另外一年还有十二个月的参数,所以 Calendar
24、 类提供了:JANUARY(一月)、FEBRUARY(二月)、MARCH(三月)、APRIL(四月)、MAY(五月)、JUNE(六月)、JULY(七月)、AUGUST(八月)、SEPTEMBER(九月)、OCTOBER(十月)、NOVEMBER(十一月)、DECEMBER(十二月)。依次表示 1-12 个月份,需要注意的是它们从零开始计算的。例如:get(Calendar.MONTH)+1 另外,一周的每一天使得 Calendar 类提供了:SUNDAY(=1)、MONDAY(=2)、TUESDAY(=3)、WEDNESDAY(=4)、THURSDAY(=5)、FRIDAY(=6)、SATUR
25、DAY(=7)。如果获取星期或改变星期时使用:DAY_OF_WEEK。如果表示上午/下午:AM_PM 上面介绍了很多常用函数和属性常量,下面看一个实例。import java.util.*;public class calendar1 public static void main(String args)GregorianCalendar gc=new GregorianCalendar();String now=gc.get(Calendar.YEAR)+年+(gc.get(Calendar.MONTH)+1)+月+gc.get(Calendar.DATE)+日+gc.get(Calend
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章类
限制150内