欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《访问控制属性》PPT课件.ppt

    • 资源ID:5605532       资源大小:322.99KB        全文页数:44页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《访问控制属性》PPT课件.ppt

    包是一组类的集合一个包可以包含若干个类文件,还可包含若干个包包的作用将相关的源代码文件组织在一起类名的空间管理,利用包来划分名字空间,便可以避免类名冲突提供包一级的封装及存取权限,类的组织包的概念,包的命名每个包的名称必须是“独一无二”的Java中包名使用小写字母表示命名方式建议将机构的Internet域名反序,作为包名的前导若包名中有任何不可用于标识符的字符,用下划线替代若包名中的任何部分与关键字冲突,后缀下划线若包名中的任何部分以数字或其他不能用作标识符起始的字符开头,前缀下划线,编译单元与类空间一个Java源代码文件称为一个编译单元,由三部分组成所属包的声明(省略,则属于默认包)Import(引入)包的声明,用于导入外部的类类和接口的声明一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产一个class文件利用包来划分名字空间,便可以避免类名冲突,包的声明命名的包(Named Packages)例如:package Mypackage;默认包(未命名的包)不含有包声明的编译单元是默认包的一部分,包与目录Java使用文件系统来存储包和类包名就是文件夹名,即目录名目录名并不一定是包名用javac编译源程序时,如遇到当前目录(包)中没有声明的类,就会以环境变量classpath为相对查找路径,按照包名的结构来查找。因此,要指定搜寻包的路径,需设置环境变量classpath,引入包 为了使用其它包中所提供的类,需要使用import语句引入所需要的类Java编译器为所有程序自动引入包java.langimport语句的格式 import package1.package2.(classname|*);其中package1.package2表明包的层次,它对应于文件目录classname则指明所要引入的类名如果要引入一个包中的所有类,则可以使用星号(*)来代替类名,访问属性,我们定义的每一个类,以及其中的每一个成员属性和成员方法都存在是否可以被他人访问的访问属性。不同的访问属性,标识着不同的可访问性。所谓可访问性是一种在编译时确定的静态特性。在Java语言中,也正是利用访问属性机制实现数据隐藏,限制用户对类及类中成员的访问权限。,类成员的访问权限控制,Java推出了“访问控制修饰符”的概念,允许类创建者声明哪些东西是类使用者可以使用的,哪些是不可以使用的。这些访问控制的级别在“最大访问”到“最小访问”范围之间,分别包括:public、defaut(无修饰符)、protected、private。,为类、类中的成员属性和成员方法指定访问属性的格式为:public class ClassName;public|private|protected memberVariableName;public|private|protected emberMethodName(parameterList);由于除默认访问属性外,指定其他三种访问属性需要写在定义之前,所以,又将它们称为修饰符,默认访问属性又称为friendly(友好)。,公共访问控制修饰符public,为Java中的类加入访问控制修饰符只能是public,即公共类。一个类被声明为公共类,表明它可以被所有的其它类访问和引用,这里的访问和引用是指这个类作为整体是可见的和可使用的,程序的其它部分可以创建这个类的对象、访问这个类内部可见的成员属性和成员方法。,一个类作为整体对于程序的其它部分可见,并不能代表类内的所有属性和方法也同时对程序的其它部分可见,前者是后者的必要条件,类内属性和方法能否被访问,还要看这些属性和方法自己的访问控制修饰符。另外,将实例属性的访问控制修饰应用public是一种糟糕的设计!破坏了封装性,缺省访问控制修饰符,假如没有为类添加访问控制修饰符,说明它具有缺省的访问特性。这种缺省的访问控制权规定,该类只能被同一个包中的类访问和引用,而不可以被其它包中的类使用,这种访问特性称为包访问性。通过声明类的访问控制权限,可以使整个程序结构清晰、严谨、减少可能产生的类间干扰和错误。,数据隐藏是面向对象的程序设计倡导的设计思想。将数据与其操作封装在一起,并将数据的组织隐藏起来,利用成员方法作为对外的操作接口,这样不但可以提高程序的安全性、可靠性,还有益于日后的维护、扩展和重用。将类中的数据成员设置为private访问属性是实现数据隐藏机制的最佳方式。private访问属性可以应用于类中的成员,包括成员属性、成员方法和内部类或内部接口。,私有访问控制修饰符,私有访问控制修饰符,用private修饰的属性和方法,只能被该类自身访问和修改,而不能被任何其它类,包括该类的子类,获取或引用。1、对私有数据访问的方法例如有二个实例字段,它们被声明在student类中:private String nane;private int age;private关键字用来确保这些实例属性只能被本类中的方法使用。2、私有方法的访问考虑到封装性,一般类中的属性都是私有。对于方法又是怎样的?虽然类中大多数方法都是公开的,但是私有方法也是经常使用的。在下面的情况下可以考虑使用私有方法:与类的使用者无关的那些方法。如果类的实现改变了,不容易维护的那些方法。,package test1;public class Student private String name;public Student(String n)name=n;public String getName()return name;,package test2;import test.Student;public class test public static void main(String args)Student stu=new Student(zhang san);/System.out.println(stu.name);System.out.println(stu.getName();,例1 不同包之间的类访问,如果将一个成员属性或成员方法定义为public类型,则在同一类、子类、同一包中的类、不同的包中的类均可以访问该成员变量或成员方法。/Demopub1.javapackage pub1;public class Demopub1/public修饰是必需的。/公共类型的成员变量 public int a;/公共类型的成员方法public void method()();,/Demopub2.javapackage pub2;import pub1.*;class Demopub2public static void main(String args)/实例化aDemo1Demopub1 aDemo1=new Demopub1();/访问aDemo1中的公共成员方法aDemo1.method();/访问aDemo1中的公共成员变量aDemo1.a=10;int a=aDemo1.a;System.out.println(aDemo1中的公共成员变量a的值:+a);Demo1中的公共成员变量a的值:10 上面定义的两个类Demopub1和Demopub2处于不同包内,因此,Demopub1必须修饰为public类,否则在Demopub2中是不能访问的。按照公共类型的成员属性的访问条件,位于不同包中的类仍然可以访问公共类型的成员属性。,例2 私有类型属性的访问,如果一个成员属性或成员方法声明为私有类型,则该属性或方法只能在同一类中被访问。/DemoPrivate.javapublic class DemoPrivatepublic int a;/公共类型的成员变量 private int b;/私有类型的成员变量 public int getA()/公共类型的成员方法return a;private int getB()/私有类型的成员方法 return b;public DemoPrivate(int a,int b)/构造方法this.a=a;this.b=b;,public static void main(String args)DemoPrivate aDemoPrivate=new DemoPrivate(1,2);/访问公共类型的成员方法int a=aDemoPrivate.getA();(变量a的值:+a);/访问私有类型的成员方法 int b=aDemoPrivate.getB();(变量b的值:+b);上面程序的输出结果为:变量a的值:1 变量b的值:2 由上面的程序可以看出,尽管成员属性和成员方法定义为私有类型。但由于处于同一类中,仍然能够对成员属性和成员方法进行访问。如果在另一类中,则访问受到限制(请同学们自己实验)。,保护访问控制修饰符,用protected修饰的成员变量可以被三种类所引用:该类自身、与它在同一个包中的其它类、在其它包中的该类的子类。使用protected修饰符的主要作用是允许其它包中的该类的子类来访问父类中的特定属性。,protected关键字为我们引入了一种名为“继承”的概念,定义新类时,以现有的类为基础,并在其中加入新的成员,同时不会对现有的类产生影响我们将这种现有的类称为“基础类”或“基本类”(Base class),对于从现有类继承后而产生的新类,我们称其扩展了现有类。,例3:不同包中公共类中protected修饰的方法的访问,如果声明一个成员属性或成员方法的访问类型为protected,则该成员属性或成员方法只能够被该类内部、子类和相同包中的类访问./Demopro3.Javapackage pro3;public class Demopro3/公共类型的成员变量 public int a;/保护类型的成员方法protected void method()();,/Demopro4.Javapackage pro4;import pro3.*;public class Demopro4public static void main(String args)Demopro3 aDemo1=new Demopro3();/实例化Demo1/不能访问Demopro3中的保护类型成员方法/原因是该方法是protected类型/aDemo1.method();/可以访问Demopro3中的公共成员变量aDemo1.a=10;int a=aDemo1.a;System.out.println(Demopro3中的公共成员变量a的值:+a);如果上面的两个程序处在相同的包中,Demopro4.java中的aDem01.method()访问语句就会有效。如果两个程序位于不同的包中,则保护类型的成员变量或成员方法的访问受到限制。因此在Dempro4.java中的aDemo1.method()不能执行,因而被加以注释。,归纳上述4种不同的访问属性,可以将各种访问属性的可访问权限总结在表中:,内部类,Java中可以把一个类定义在某个类的内部,这样的类成为内部类。内部类所在的类成为外部类。根据内部类定义的位置,内部类一般分为:定义在方法体内的内部类和定义在方法体外面的内部类。定义在方法体内的内部类又分为有实例名称的内部类和无实例名称的内部类(成为匿名内部类)。使用内部类的原因:内部类对象能够访问其所在外部类的全部属性,包括私有属性。内部类能将自己隐藏起来,不被同一个包中的其他类所见。匿名内部类可以方便地定义运行时回调。内部类与外部类语义上有强组合关系。,public class InnerClassTestpublic static void main(String args)InnerClassTest classObj=new InnerClassTest();/innerClass innerObj=new InnerClassTest.innerClass();/innerObj.Print();classObj.Print();void Print()innerClass innObj=new innerClass();innObj.Print();class innerClasspublic void Print()System.out.println(Calling print()method of inner class!);定义在方法体外的成员内部类和其他类成员一样属于该类,其使用也是先创建一个外部类的实例,再通过该外部类的对象实例来创建内部类实例。对于静态内部类的引用,由于静态内部类是附属于外部类的,而不是属于外部类实例的,因此,直接通过外部类名就可以实现。New 外部类名。内部类构造方法();,public class InnerClassTest private String str=“world”;public InnerClassTest()showMessage();public void showMessage()System.out.println(“Now you are in method!”);class InnerClass public InnerClass()System.out.println(“Inner class”);public void showMessage()System.out.println(“Hello”+str+”!”);InnerClass i=new InnerClass();i.showMessage();System.out.println(“Method end”);public static void main(String args)new InnerClassTest();由于类属于方法体,所以只能在方法体中创建对象实例,并且创建的实例也只能在方法体中被使用。方法体执行完后,该对象随之消失。,类文件、class、对象,类文件与程序之间的关系:一个java程序由多个类文件组成,这些类文件是在运行期动态链接起来的。作为一个可以独立运行的java程序,至少要有一个含有静态main()方法的主类文件,而且以这个主类文件作为程序的起始类。当本地系统接收了java命令并启动虚拟机装载了运行环境之后,虚拟机便在环境变量classpath预设的路径中找到并装载指定的主类文件,然后自动执行其静态方法main()。在其后的运行中,如果发现需要其他类,再根据类的权限去寻找相应的类文件,并在装载之后把它连接到程序上继续运行。,起始类,Class B,Class C,装载、链接,装载、链接,深入理解类,一个类实质上就是一个程序段,只是没有main方法,所以类中的方法需要其他代码通过类名或对象名来调用。通过类名的调用就是过去的函数调用,只不过函数名前多了一个类名。通过类的实例来调用则复杂一些,需要先创建一个类的实例。,当系统需要调用类中静态方法f()时,系统通过类名(类指针)找到类的方法区,然后再通过方法名找到方法。,我们之所以设计类,其目的就是要以类对象的形式在系统中运行多个具有相同代码(同一个类)的程序,这些程序中的数据变量的具体数值不同,就是说,这些程序要共享执行代码,但要为不同的程序创建单独的数据区。在内存中布局:,内存布局,为了与类区别,一般把每个程序的数据区与共享方法区组合称为类的实例或对象。(数据区不含有静态数据),通常一个类的所有对象会用一个数组或链表存储,为了实现上述想法,虚拟机的内存空间被分为方法区和堆区两个部分,方法区主要用来存放类的公有信息(如静态数据)和执行代码,而堆区则用来存放属于对象的私有数据。为了把对象的数据区与共享的方法区相关联,对象列表中要含有指向所属类方法区的指针。,非静态数据成员声明,常量池,静态数据,方法(执行代码,对象1的数据区,对象2的数据区,对象n的数据区,指针,new,类变量的引用 由于类被加载后,就立即创建类变量,所以即使在该类没有创建一个对象的时候,类变量也已经存在。若在此时引用类变量,就只能用类名作为前缀。如果创建了该类的对象,则既可以通过类名引用类变量,也可以通过对象名引用类变量。类变量不能在构造方法中初始化。因为构造方法只有在创建对象时才被调用,而类变量在没有创建对象之前就已经存在,并可以被引用;另外每创建一个对象,构造方法就要被调用一次,而类变量应该只被初始化一次。,类变量的初始化器 又称为静态变量初始化器来实现初始化。类变量初始化器应该位于类定义中,其语法格式为:static./类变量初始化,构造方法与类变量初始化器(1)构造方法用来初始化对象的实例变量,而类变量初始化器用来初始化类变量;(2)构造方法在创建对象,即执行new运算时由系统自动地调用,而类变量初始化器是在加载类时被自动地执行;(3)构造方法是一种特殊的成员方法,而类变量初始化器不是方法。,类方法 类方法也属于类。在类方法中,只能对该方法中的局部变量或类变量进行操作,而不能引用实例变量或调用实例方法。如果希望将一个成员方法定义成类方法,就在访问属性修饰符之后,加上static修饰符即可。例如:public static int getMember()return staticMember;,this,this是对象自身的引用型系统变量。当在实例方法中引用本类的实例成员时,编译器会默认地在实例成员前加上this作为前缀。例如构造方法Employee(String n,double s)这样编写public Employee(String n,double s)name=n;salary=s;id=nextId;,this,但实际上,编译器会将它改为:public Employee(String n,double s)this.name=n;this.salary=s;this.id=nextId;通常情况下,对实例成员的引用,编译器都会自动地帮助你加上this前缀。若类的构造方法中的参数与类的实例变量命名为相同的名称,在成员方法中引用的变量名为局部变量,若想引用实例变量就需要显式地加上this。,This例子,public class thisTest int r=100,s=200,t=300;public static void main(String args)thisTest classObj=new thisTest();System.out.println(Values before calling method:);System.out.println(r=+classObj.r+s=+classObj.s+t=+classObj.t);classObj.changeValue(400,500);System.out.println(Values after calling method:);System.out.println(r=+classObj.r+s=+classObj.s+t=+classObj.t);public void changeValue(int a,int b)int r=120;int s=150;int t=180;this.r=a;this.s=b;System.out.println(Values in calling method:);System.out.println(r=+r+s=+s+t=+t);,null,null是一个直接量,表示引用型变量为空的状态,通常用来作为引用型变量的初始值。例如:Employee e=null 当希望一个对象型变量放弃它引用的对象时,也可以使用null实现。例如:Employee e=new Employee(“Wnag”,2000.0);若让e放弃它引用的对象,可以写成:e=null。系统会在适当的时候,自动地回收刚才e引用的对象所占据的存储空间。,对象拷贝,拷贝可以通过赋值语句来实现。对于基本数据类型的变量,赋值操作的含义是将赋值号右侧表达式的计算结果赋给赋值号左侧的变量。对于引用型变量,赋值操作实际上是引用的相互赋值。,引用变量的赋值Employee e1,e2;e1=new Employee(“Zhang”,3000);e2=e1;其执行过程如图:,对象本身内容的拷贝 Java语言中,提供了一种创建对象拷贝的机制,称为克隆(cloning),它主要有两种方式:浅拷贝和深拷贝。浅拷贝是指按照二进制位串进行对象拷贝,新创建的对象严格地复制原对象的值。深拷贝是指对象的完全复制。如果对象的某个成员变量是其他对象的引用,也对所指的子对象依次进行复制。,Cloneable接口 Cloneable接口用来支持浅拷贝和深拷贝方式的对象克隆。如果希望某个类对象具有克隆功能,就应该让这个类实现Cloneable接口,并对标准Object类的clone方法进行重载。随后就可以利用类似于下面的赋值语句进行对象克隆。e2=(Employee)e1.clone();,public class IntegerStack implements Cloneable private int buffer;private int top;public IntegerStack(int maxContents)buffer=new int maxContents;top=-1;public void push(int val)buffer+top=val;public int pop()return buffertop-;如果我们使用该类:IntegerStack first=new IntegerStack(2);first.push(2);first.push(9);IntegerStack second=(IntegerStack)first.clone();使用缺省的clone方法拷贝的两个对象:,如果调用:first.pop();first.push(17);second对象数据也变化了。,对于这个的情况只能改写clone方法:public Object clone()try IntegerStack nobj=(IntegerStack)super.clone();nobj.buffer=(int)buffer.clone();return nobj;catch(CloneNotSupportException e)throw new InternalError(e);另外,可以可虑为类添加专门用于拷贝的构造函数,用来负责完成复制工作。,

    注意事项

    本文(《访问控制属性》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开