您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 第五章、访问权限控制
第五章、访问权限控制进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开。理学院信息与计算科学教研室毛勇华256由来库的创建者必须能自由地进行修改与改进,同时保证客户程序员代码不会受到那些变动的影响。为达到这个目的,Java推出了“访问指示符”的概念Public,private为将组件绑定到单独一个统一的库单元里,Java采用package(打包),访问指示符要受到类在相同的包还是在不同的包里的影响理学院信息与计算科学教研室毛勇华3565.1包:库单元由于存在名字潜在的冲突,必须对Java中的命名空间进行完整的控制,且需要创建一个完全独一无二的名字包内包含一组类,它们在单一的名字空间之下被组织在一起。Java一个源码文件通常叫作一个“编辑单元”→.java一个编译单元,至多一个公共(public)类,必须与文件相同的名字非公共类包外不可见,仅为公有类提供支持编译一个.java文件,文件中的每个类,都生成一个.class扩展名文件。理学院信息与计算科学教研室毛勇华456package从少量的.java文件里有可能获得数量众多的.class文件一个有效的java程序就是一系列.class文件,它们可以封装和压缩到一个JAR文件里。Java解释器负责对这些文件的寻找、装载和解释。类“库”也由一系列类文件构成。每个文件都有一个public类和若干个非public类,java采用package将不同文件中的类打包到一起。package语句必须作为文件的第一个非注释语句出现。该语句的作用是指出这个编译单元属于名为mypackage的一个库的一部分。编译单元内的public类名位于mypackage这个名字的下面使用类,则需指出完整的名字,或使用import关键字。与mypackage联合。理学院信息与计算科学教研室毛勇华5565.1.1创建独一无二的包名一个包永远不会真的“封装”到单独一个文件里面,它可由多个.class文件构成。java将某个特定包使用的所有.class文件都置入单个目录里,以避免出现混乱。创建独一无二的包名以及找出那些可能深藏于目录结构某处的类需要将.class文件的位置路径编码到package的名字里。编译器强迫package名的第一部分是类创建者的因特网域名。第二部分是将package名解析成自己机器上的一个目录理学院信息与计算科学教研室毛勇华656Java解释器的工作程序找到环境变量CLASSPATHCLASSPATH包含了一个或多个目录它们作为一种特殊的“根”使用,从这里展开对.class文件的搜索。从根开始,解释器会寻找包名,并将每个点号替换成一个斜杠,从而生成从CLASSPATH根开始的一个路径名packagefoo.bar.baz会变成foo\bar\baz将它们连接到一起,成为CLASSPATH内的各个条目再次搜索.class文件时,就可从这些地方开始查找与准备创建的类名对应的名字。包名:文件所在目录全称理学院信息与计算科学教研室毛勇华756Java环境变量设置确认Java安装路径:C:\ProgramFiles\Java\jdk1.6.0_23电脑-属性-高级-环境变量-系统变量中添加以下环境变量变量名CLASSPATH变量值.;C:\Programfiles\Java\jdk1.6.0_23\lib\tool.jar;C:\ProgramFiles\Java\jdk1.6.0_23\lib\dt.jar;C:\ProgramFiles\Java\jdk1.6.0_23\bin双击打开path变量,在其值后加C:\ProgramFiles\Java\jdk1.6.0_23\bin;JAVA_HOME=C:\ProgramFiles\Java\jdk1.6.0_23理学院信息与计算科学教研室毛勇华856示例一个个的编译Javac–d.Vector.javaJavac–d.List.java自动创建game目录理学院信息与计算科学教研室毛勇华956自动编译为导入的类首次创建一个对象时,编译器会在适当的目录里寻找同名的.class文件(如X.class)。若只发现X.class,它就是必须使用的那一个类。若它在相同的目录中还发现了一个X.java,编译器就会比较两个文件的日期标记。自动编译较新的X.java,生成一个最新的X.class。理学院信息与计算科学教研室毛勇华1056冲突若通过*导入了两个库,而且它们包括相同的名字,则易造成冲突。有时并不真的发生Vectorv=newVector();//冲突,报错java.util.Vectorv=newjava.util.Vector();//直接写全称理学院信息与计算科学教研室毛勇华1156CLASSPATH的陷阱CLASSPATH包含的类路径中类,可能会有与import导入包中的类同名。在matlab中是按优先级处理Workspace→当前目录→系统路径→setpath指定java编译器搜索自己类路径的任何地方,发现类名后使用,若出错,会停止搜索。也就是说,java要求程序员自己解决理学院信息与计算科学教研室毛勇华12565.2Java访问权限指示符当一个类可以被访问时,对类内的成员变量和成员方法而言,其应用范围可以通过施以一定的访问权限来限定。同一个类中同一个包中不同包中的子类不同包中的非子类(任意类)private★default★★protected★★★public★★★★理学院信息与计算科学教研室毛勇华13565.2.1default:包访问权限→友好默认访问权限没有任何关键字当前包内的其他所有类都对该成员有访问权限,而包外类则变为private包访问权限允许将相关的类都组合到一个包里,使它们彼此间可轻松的相互作用。包内可相互访问才使包有存在的意义允许default成员的相互访问,亦即让它们“交朋友”。亦称‘友好的’理学院信息与计算科学教研室毛勇华14565.2.2public:接口访问public后面的成员声明适用于所有人,特别是适用于使用库的客户程序员,对象可调用的成员可创建Cookie对象,构建器是public的,类也是public的不能访问foo(),只有在dessert包内才是“友好”的。理学院信息与计算科学教研室毛勇华1556默认包:同一目录位于相同的目录中,而且没有明确的包名Java把象这样的文件看作那个目录“默认包”的一部分所以它们对于目录内的其他文件来说是“友好”的理学院信息与计算科学教研室毛勇华16565.2.3private:不能接触!仅类自身的成员方法可以访问,包内其它类也不能访问Private成员相对隔离,这样允许自由地改变成员,同时毋需关心它是否会影响同一个包内的另一个类。公开给客户程序员自由调用的成员声明为public,其它可默认为包访问成员,包外不可调用,亦可相对隔离,似乎无需private多线程中private才很重要。理学院信息与计算科学教研室毛勇华1756示例有时可能想控制对象的创建方式,并防止有人直接访问一个特定的构建器因构建器为private,不可通过它创建一个Sundae对象;必须调用makeASundae()方法来实现理学院信息与计算科学教研室毛勇华18565.2.4protected:“友好的一种”以现有的类为基础,并在其中加入新的成员,同时不会对现有的类产生影响,亦可改变那个类现有成员的行为,得到一个扩展了的新类→继承classFooextendsBar{}新建一个包,并从另一个包内的某个类里继承,则唯一能够访问的成员就是原来那个包的public成员若在相同的包里进行继承,那么继承获得的包能够访问所有“友好”的成员。基础类的创建者喜欢提供一个特殊的成员,并允许访问衍生类→protectedProtected继承后变为友好可访问理学院信息与计算科学教研室毛勇华1956示例理学院信息与计算科学教研室毛勇华20565.3接口与实现将数据和方法封装到类内后,可生成一种数据类型,它具有自己的特征与行为。规定客户程序员哪些能够使用,哪些不能将接口同实施细节分离开用户除了将消息发给public接口之外,不能做其他任何事情。用户不能对类代码作任何修改维护类时,则可修改任何不属于public的所有东西为清楚起见,可考虑用特殊的样式创建一个类:将public成员置于最开头,后面跟随protected、友好以及private成员。理学院信息与计算科学教研室毛勇华21565.4类的访问权限客户程序员只能创建public类的对象。import导入库名下对应的类才能创建对象每个文件都只能有一个public类。公共接口的概念是由公共类表达出来的根据需要,它可有多个提供支撑的“友好”类public类的名字必须与文件的名字完全相同,且区分大小写一个文件可以没有公共类,尽量少用理学院信息与计算科学教研室毛勇华2256ThinkinginJavaThankyou!
本文标题:第五章、访问权限控制
链接地址:https://www.777doc.com/doc-3212183 .html