JAVA类和对象的高级特征.ppt
第四章 JAVA类和对象的高级特征主讲:张思民仰恩大学计算机与信息学院Java课程组1本章内容n4.1 抽象类n4.2 接口n4.3 包n4.4 JAVA的API24.1 抽象类n抽象类java语言中,用abstract 关键字来修饰一个类时,这个类叫做抽象类,用abstract 关键字来修饰一个方法时,这个方法叫做抽象方法。格式如下:abstract class abstractClass /抽象类abstract returnType abstractMethod(paramlist)/抽象方法抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现;抽象类不能被实例化,抽象类不一定要包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。若一个类继承了一个抽象类,则抽象类的抽象方法必须被实现,否则子类必须声明为abstract.34.2 接口n接口接口是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。它的用处体现在下面几个方面:通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。通过接口指明多个类需要实现的方法。通过接口了解对象的交互界面,而无需了解对象所对应的类。44.2 接口n1)接口的定义接口的定义包括接口声明和接口体。接口声明的格式如下:public interface interfaceNameextends listOfSuperInterface extends 子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个父类。接口体包括常量定义和方法定义常量定义格式为:type NAME=value;该常量被实现该接口的多个类共享;具有public,final,static的属性。在接口中只能声明常量,不可以声明变量。方法体定义格式为:(具有public和abstract属性,不能声明为protected)returnType methodName(paramlist);注意:在接口的实现类中,实现的接口方法必须声明为public,因为接口中定义的方法为public(默认)。所以其实现必须声明为public.否则编译不会通过。54.2 接口n2)接口的实现在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。n3)接口类型的使用接口作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。64.3 包(1)n包在JAVA中的作用:文件夹将文件和应用程序组织为组,包将类组织为组 包减少了命名冲突带来的问题,如果所有类放在同一个包中就容易产生命名冲突 n 引入包以后,声明类前必须声明类所在的包,格式:package 包1名.包2名包n名;例如:package java.awt;或:package javax.swing.event;如果一个类访问另一个包中的类,必须通过包来引用,有两种引用方法 1)声明该类前,使用import语句 例如:import java.awt.Button;/Button为被访问的类,位于包java.awt中 import java.awt.*;/引入包java.awt中的全部类 2)访问另一个包中的类时,使用包名 例如:java.awt.Button b=new java.awt.Button();74.3 包(2)/example one /类在同一个包中类在同一个包中 public class Date2 int year,month,day;void setDate(int y,int m,int d)year=y;month=m;day=d;void print()System.out.println(year+month+day);class UseDate2 public static void main(String args)Date2 b=new Date2();b.setDate(2004,9,1);b.print();/类在不同包中类在不同包中/Date2.javapackage p1.p2;public class Date2 int year,month,day;public void setDate(int y,int m,int d)year=y;month=m;day=d;public void print()System.out.println(year+month+day);/UseDate2.javaimport p1.p2.Date2;class UseDate2 public static void main(String args)Date2 b=new Date2();b.setDate(2004,9,1);b.print();8Example one 在DOS窗口下的运行(1)DOS窗口下必须手动建立包一 编译Date2.java1)建立保存p1.p2.Date2的文件夹,例如E:db0312)设置环境变量:右击我的电脑选属性、高级、环境变量,双击系统变量中的CLASSPATH,在变量值中加入保存p1.p2.Date2的文件夹,例如 ;E:db031(不要忘了环境变量以;隔开)3)E:db031下建立p1和p2文件夹,将Date2.java保存E:db031p1p2下4)打开DOS窗口,进入Date2所在目录,即E:db031p1p2。打开DOS窗口的方法:显示器左下角,点击开始、程序、附件、命令提示符;进入E:db031p1p2 的方法:切换 C:E:即输入E:然后回车(如文件保存在C 盘,不须切换);进入 E cd db031p1p25)编译,E:db031p1p2javac Date2.java 并回车9Example one 在DOS窗口下的运行(2)二 编译并运行UseDate2.java1)建立保存UseDate2的文件夹,例如:C:db0322)保存UseDate2.java,编译 javac UseDate2.java 3)3)运行 C:db032下 java q.UseDate2.java10example(1)在Jcreator下的运行Jcreator下,系统按源文件中的package语句自动建立包1)建立保存p1.p2.Date2的空project,例如E:db031,保存Date2.java并编译,可看到p1和p2已经自动生成2)编译UseDate2.java3)建立保存UseDate2.java的空project,保存UseDate2.java,此时编译会报错4)设置环境变量 在Jcreator主菜单的project下选择project settings 选择required libraries后按 new 选择classes后按 add 选add path,找到p1.p2.Date2所在文件夹(E:db031)在Name中给该路径命名,按OK 此时可看到该路径名出现在文本框中,选中该路径名,可看到该路径已加入到ClassPath中5)编译UseDate2.java并运行11环境变量classpath的配置Classpath的作用 当一个类访问位于其它包中的其它类时,Classpath帮助该类找到其它类,Classpath的值:Classpath就是包含被访问的类所在的包的文件夹 被访问的类所在的包由被访问的类的package语句声明,并且必须建立同名的文件夹 这样,被访问的类的路径包括两部分:Classpath的值和包 两个必须的Classpath值 .(实心句号)表示当前文件夹 (J2sdk)的安装目录 lib 表示JAVA类库所在文件夹 12J2sdk和Jcreator的安装nJ2sdk和Jcreator LE都是自由软件,可免费下载 J2sdk的网址:http:/ 还可下载Documation及其它资料 Jcreator LE的网址:http:/ 卸载J2sdk和Jcreator LE,方法:我的电脑、添加删除程序 选中Jcreator LE并删除,选中Java2 runtime environment 和J2sdk删除n 从ftp:/10.10.2.119下载Jcreator 和J2sdk安装软件n安装J2sdk,安装时可以设置安装路径,如设为:C:j2sdkn根据安装路径设置环境变量path:右击我的电脑选属性、高级、环境变量,双击系统变量中的path,增加 ;(J2sdk安装路径)bin 例如 ;C:j2sdkbin path设置后,打开DOS窗口,键入java命令并回车,可检验设置是否正确n设置环境变量classpath:右击我的电脑选属性、高级、环境变量,双击系统变量中的classpath 增加 .;(J2sdk安装路径)lib 例如:.;C:j2sdklibn 安装Jcreator LE13J2sdk安装时环境变量的设置n设置pathn设置classpath144.4 JAVA的API(1)nJAVA的类库称为应用程序编程接口(API,Application Programming Interface)nJAVA类按包来组织,常用包有:java.lang java.util java.awt javax.swing java.text java.io java.applet n 使用JAVA类库中的类,必须用(J2sdk安装目录)lib,例如E:j2sdklib 来设置环境变量classpathn使用JAVA类库中的类必须使用import语句导入该类,格式:import 包名1.包名2*;或 import 包名1.包名2类名;n使用java.lang中的类不需用import语句导入该类154.4 JAVA的API(2)nJAVA类库中的常用类njava.lang.Math类 该类的变量E和PI以及方法都是static的,可以通过类名直接引用/an exampleclass MathExample public static void main(String args)double d1=Math.E;double d2=Math.PI;System.out.println(d1);System.out.println(d2);System.out.println(Math.sqrt(d1);System.out.println(Math.sin(d2/2);164.4 JAVA的API(3)njava.lang.Byte、Short、Integer、Long、Float、Double、Character、Boolean类 这8个类对应8种基本数据类型;这8个类都有构造方法,可以通过对应的数据类型或字符串作为参数,生成对象 这8个类都有实例方法返回对应的数据类型和字符串 这8个类都有类方法返回对应的数据类型和字符串/an exampleclass DateWraper1 public static void main(String args)Byte b=new Byte(byte)10);/Byte b=new Byte(10);/调用实例方法 byte bb=b.byteValue();String ss=b.toString();System.out.println(bb+ss);/调用类方法 byte b1=Byte.parseByte(123);System.out.println(b1);String s1=Byte.toString(byte)111);System.out.println(s1);174.4 JAVA的API(4)njava.lang.Object、Class类 njava.lang.Object是所有类的超类,其它类可继承Object类的成员方法 class UseObject public static void main(String args)Boolean b=new Boolean(true);Class c=b.getClass();System.out.println(c.getName();184.4 JAVA的API(5)njava.lang.System类:该类的静态两个成员变量out和in对应标准输出和输入流n java.util.Date、Calendar类和java.text.SimpleDateFormat类import java.util.*;import java.text.SimpleDateFormat;class UseUtil public static void main(String args)Date d=new Date();boolean b=d.before(new Date(2003,12,4,21,33,55);System.out.println(b);System.out.println(d.getYear();System.out.println(d.getMonth();System.out.println(d.getDay();SimpleDateFormat sdf=new SimpleDateFormat(yyyyMMddhhmmss);System.out.println(sdf.format(d);System.out.println(Calendar.DATE);System.out.println(Calendar.DAY_OF_MONTH);System.out.println(Calendar.DAY_OF_WEEK);19