gjm_Java第7章(类与对象)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2010-4-71第7章郭建民类与对象2010-4-72通过本章的学习,主要掌握以下知识点:包java类的基本概念对象的创建与使用对象的使用成员的调用本章的重点:创建类本章的难点:类修饰符成员变量与成员方法修饰符2010-4-737.0包java中引如了包(package)的概念来管理类名空间。就像文件夹把各种文件组织在一起,使硬盘更清晰、有条理一样,Java中的包把各种类组织在一起,使得程序功能清楚、结构分明。2010-4-747.0.1包的概念包就是Java提供的一种区别类名空间的机制,是类的组织方式,包对应一个文件夹,包中还可以再有包,称为包等级。2010-4-757.0.2使用package语句创建包格式:package包名1[.包名2[.包名3]…];2010-4-767.0.3目录布局与包的关系包对应于文件系统中的目录,用于指定把编译生产的.class文件放入该目录。示例:如果c:\shipping\objects\Hello.java中指定了packageshipping.objects;C:\javaworkjavac-dc:\workc:\shipping\objects\Hello.java生成的Hello.class文件将放在c:\work\shipping\objects中。运行:c:\workjavashipping.objects.Hello或者:c:\java-classpathc:\workshipping.objects.Hello2010-4-777.0.4利用import语句引用Java定义的包如果要使用Java包中的类,必须在源程序中用import语句导入所需要的类。import语句格式:import包名1[.包名2[.包名3…]].类名|*其中import是关键字,包名1[.包名2[.包名3…]]表示包的层次,与package语句相同,它对应于文件夹。2010-4-787.1Java的类1.系统定义的类类库2.用户自定义类如何定义类3创建对象使用new操作符创建对象4.构造方法(构造函数)构造方法的定义与使用2010-4-797.1.1系统定义的类Java语言:语法规则+类库(API)JDK(SUN提供)不同版本把一组相关的类组织在一起放在一个包中java.lang语言包java.io输入/输出包java.util实用工具包java.awt用于构建图形用户界面的包……2010-4-7107.1.1系统定义的类如何在程序中使用类库中的类除java.lang包中的类可直接使用外其余包中的类使用时必须通过import语句引入包或类(将已经存在的包引入到程序中)importjava.io.*;//引入整个包importjava.util.Collection;//引入单个类使用类库中的类可以创建相应类的对象通过继承系统类定义新的子类2010-4-7117.1.2用户定义的类针对特定问题的特定逻辑定义自己的类抽象出类并对其命名设计类的属性和方法使用Java语言书写类的源代码类头类修饰符classClassName{类体…//变量&方法}例子:PhoneCardPointRectangleStack注:类名中每个单词首字母都大写2010-4-712定义类[类修饰符]class类名称{声明成员变量[修饰符]数据类型成员变量名称;……[修饰符]返回值的数据类型方法名(参数1,参数2,……){语句序列;return[表达式];}……}1.类的一般结构2010-4-7132010-4-714类的修饰符类的访问修饰符(1)public(2)friendly(不加访问说明符时)类的其它修饰符(1)final(2)abstract2010-4-715类修饰符的含义修饰符含义public将一个类声明为公共类,它可以被任何对象访问,一个程序的主类必须是公共类。abstract将一个类声明为抽象类,没有实现的方法,需要子类提供方法的实现。final将一个类声明为最终类即非继承类,表示它不能被其他类所继承。friendly友元类型,默认的修饰符,只有在相同包中的对象才能使用这样的类。2010-4-716类修饰符的访问规则abstract类不能直接产生属于这个类的对象final类不能被其他任何类所继承(安全的考虑)public类不但可以被同一程序包中的其它类使用,别的程序包中的类也可以使用.friendly(缺省)类只能被本包中的其它类使用2010-4-717类修饰符抽象类(abstract)vs具体类没有具体实例的类抽象类往往是对多个具体类抽象公共特征得到的抽象类(鸟)具体类(鸽子、燕子、天鹅)抽象类(PhoneCard)具体类(PhoneCard201)最终类(final)不能再有子类的类(类树中的叶结点)用于定义有固定作用,完成标准功能的类例如:StringInteger……2010-4-718类修饰符(续)//数字类Number是IntegerDouble等的父类publicabstractclassNumber{……}//32位整数类Integer是一个最终类publicfinalclassIntegerextendsNumber{……}abstract与final是互斥的abstract和final可以和其他类修饰符合用(如public)2010-4-7192.成员变量格式:[修饰符]变量类型变量名[=初值]2010-4-720成员变量修饰符的含义修饰符含义public公共访问控制符。指定该变量为公共的,它可以被任何对象的方法访问。private私有访问控制符。指定该变量只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此变量。protected保护访问控制符。指定该变量可以被它自己的类及其子类访问,在子类中可以覆盖此变量。friendly默认的友元访问控制符,在同一个包中的其他类可以访问此变量,而其他包中的类不能访问该变量。final最终修饰符。指定此变量的值不能改变。static静态修饰符。指定该变量被所有对象共享,即所有的实例都可使用该变量。transient过渡修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量。volatile易失修饰符。指定该变量可以同时被几个线程控制和修改。2010-4-7213.成员方法声明方法的语法格式:[修饰符]返回值的数据类型方法名(参数1,参数2,……){语句序列;return[表达式];}2010-4-722成员方法修饰符的含义修饰符含义public公共访问控制符。指定该方法为公共的,它可以被任何对象的方法访问。private私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此方法。protected保护访问控制符。指定该方法可以被它的类及其子类访问。friendly默认的友元访问控制符,在同一个包中的其他类可以访问此方法,而其他包中的类不能访问该方法。abstract抽象方法,指定该方法为抽象方法。final最终修饰符。指定该方法不能被重载。static静态修饰符。指定不需要实例化一个对象就可以激活的方法。synchronized同步修饰符。在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程访问,运行结束后解锁。native本地修饰符。指定此方法的方法体是用其他语言(如C)在程序外部编写的。2010-4-723访问控制符(成员)当其类可以被访问时,对类的成员变量和成员方法而言,其应用范围可以通过施以一定的访问权限来限定。类内包内子类任意公共的(public)★★★★保护的(protected)★★★包访问(缺省)★★私有的(private)★当子类中的变量名与父类的相同,父类的变量被屏蔽。2010-4-724public访问规则变量和方法的修饰字public、protected、privatepublic:任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据或使用方法。classABC{publicintpub_i=5;publicvoidshow(){System.out.println(pub_i=+pub_i);}}2010-4-725public访问规则classDemo{publicstaticvoidmain(Stringargs[]){ABCabc=newABC();System.out.println(abc.pub_i=+abc.pub_i);abc.pub_i=10;abc.show();}}abc.pub_i=5pub_i=10;2010-4-726protected访问规则protected变量和方法如果一个类中变量或方法有修饰字protected,同一类,同一包可以使用。不同包的类要使用,必须是该类的子类可以存取变量或调用publicclassBCD{protectedintpro_i=5;protectedvoidshow(){System.out.println(pro_i=+pro_i);}}2010-4-727protected访问规则不同包中的类不能使用classDEF{publicstaticvoidmain(Stringargs[]){BCDbcd=newBCD();System.out.println(bcd.pro_i=+bcd.pro_i);bcd.pro_i=10;bcd.show();}}2010-4-728importtestpro.BCD;classDEFSUBextendsBCD{publicstaticvoidmain(Stringagrs[]){DEFSUBdef=newDEFSUB();System.out.println(def.pro_i);def.pro_i=10;def.show();}}pro_i=5pro_i=10protected访问规则不同包但是是子类2010-4-729private访问规则private不允许任何其他类存取和调用(示例AAA和BBB)friendly(前边没有修饰字的情况)在同一程序包中出现的类才可以直接使用它的数据和方法.2010-4-730变量覆盖访问规则当子类中的变量名与父类的相同,原来的变量被遮盖.classA{staticintdata_a=3;}classBextendsA{staticintdata_a=5;}classCextendsB{voidprint_out(){System.out.println(“data_a=”+data_a);System.out.println(“A.data_a=”+A.data_a);System.out.println(“B.data_a=”+B.data_a);}}data_a=5A.data_a=3B.data_a=5classVarDemo{publicstaticvoidmain(Stringargs[]){Cc=newC();c.print_out();}}2010-4-731访问权限小结2010-4-7324.非访问控制修饰符2010-4-733变量非访问控制修饰符静态变量-static仅属于类的变量类变量staticlonginstanceCount;多个对象共享静态变量最终变量(常量)finalstaticfinaldoublePI=3.1415926;常量必须初始化且只能赋值一次常量有类型、通常定义为静态变量(类变量)易失变量volatile同时被多个线程访问的变量staticvolatilelongnextCardNumber;2010-4-734方法(非访问控制修饰符)抽象方法abstract只有方法头,没有方法体(方法未实现)用于抽象对象行为的外在表现,不考虑内部实现只能在抽象类中定义抽象方法具体子类中必

1 / 71
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功