




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java权限修饰符作用及用法本材料由武汉理工大学 软件工程1004班 刘礼钊 编写,鉴于接触这些知识点尚且不是很久,故该文档可能存在少数疑点,欢迎大家指正。本人QQ:11151509841、 private:私有权限。在类中定义方法或对象之前加上private修饰符之后,该方法(对象)将成为类的私有成员。于是该方法(对象)只能被当前包的当前类中的成员方法调用,而异包和同包的任何不同类(不论是否是当前类的子类)则都不能对其进行调用,该类被继承后其private方法(对象)在子类中不可访问。如:public class testint in;private int privt;protected int protect;public int publc;test(int i,int pr,int pro,int pl)in=i;privt=pr;protect=pro;publc=pl;public void show()System.out.print(in=+in+nprivt=+privt+nprotect=+protect+npublc=+publc+n);public class mainprogrampublic static void main(String args)test tst;tst=new test(23,34,45,56);tst.show();System.out.println();tst.in=12;/可修改tst.show();System.out.println();/tst.privt=9;/添加进来则会编译时报错!tect=10;/可修改tst.show();System.out.println();tst.publc=11;/可修改tst.show();结果截图:2、 protected:保护权限。在定义类方法或成员对象时加上protceted修饰符后,该方法(对象)将成为受保护成员。受保护方法(对象)可以被当前包中的任何类访问,也可以被它的任何包中的子类访问。3、 public:公开权限。在定义类方法或成员对象时加上public修饰符后,该方法(对象)将成为公开成员。公开方法(对象)将会允许任何包中的任何类对其进行访问。注意:private、protected、public权限修饰符在继承时都是完全继承的,只是由于权限的限制,部分成员对象和方法不能被调用,故而有些材料上有不继承之类的说法。4、 static:静态标识符。定义方法或变量时加上static后将成为静态成员。如果一个成员被声明为 static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。方法和变量都可以被声明为 static,static 成员的最常见的例子是main()。因为在程序开始执行时必须调用main(),所以它被声明为static。另外,System.out.println()函数中的out也是被声明为static的,所以调用时我们不必创建相应的对象就可以直接访问。申明为static的变量实际上就是一个全局变量,无论创建多少个对象,相应的static变量只有一个,这个变量时共享的,当一个对象对这个static变量进行了修改,那么其他对象获取这个变量的值时得到的就是修改后的值。声明为static的方法有以下几条限制: 它们仅能调用其他的 static 方法。它们只能访问 static 数据。 它们不能以任何方式引用 this 或 super。例:package com.birdme; public class UseStatic /* * param args */ private static int s; public UseStatic() System.out.println(Create new Class); static System.out.println(static block initialized); public int getStatic() return s; public void setStatic(int i) s=i; public static void main(String args) / TODO Auto-generated method stub UseStatic classA= new UseStatic(); UseStatic classB= new UseStatic(); System.out.println(classA.s=+classA.getStatic()+;classB.s= +classB.getStatic();classA.setStatic(10); System.out.println(classA.s=+classA.getStatic()+;classB.s= +classB.getStatic();classB.setStatic(classB.getStatic()+10); System.out.println(classA.s=+classA.getStatic()+;classB.s= +classB.getStatic(); 下面是该程序的输出: 从结果可以看出类中 static 块程序是在类被装载的时候开始执行。 而不是在创建对象 的时候执行。5、 super:超类,即当前类的父类。在构造一个子类的实例时,首先得调用父类的构造函数。这时就可以在子类构造函数的第一行添加上一句super()语句。当然,如果父类的构造函数需要传递参数你也可以根据需要改写成super(param1,param2,)的形式。另外,当子类中对父类的方法进行了覆盖,而你又想调用父类的那个方法,你就可以通过super.function()的方法实现调用。例:class Personpublic int c;private String name;private int age;protected void setName(String name)=name;protected void setAge(int age)this.age=age;protected void print()System.out.println(Name=+name+ Age=+age);public class DemoSuper extends Personpublic void print()System.out.println(DemoSuper:);super.print();public static void main(String args)DemoSuper ds=new DemoSuper();ds.setName(kevin);ds.setAge(22);ds.print();运行结构截图:6、 this:对当前类的引用。其实this主要有三种用法: (a)表示对当前对象的引用;(b)表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名时进行区分!其实这是第一种用法的特例,比较常用,所以拿出来强调一下;(c)用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始。还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!例1:package test; public class ThisTest private int i=0; /第一个构造器:有一个int型形参 ThisTest(int i) this.i=i+1;/此时this表示引用成员变量,而非函数参数 System.out.println(Int constructor ithis.i: +i+this.i);System.out.println(i-1:+(i-1)+this.i+1:+(this.i+1); /从两个输出结果充分证明了i和this.i是不一样的! / 第二个构造器:有一个String型形参ThisTest(String s) System.out.println(String constructor: +s); / 第三个构造器:有一个int型形参和一个String型形参 ThisTest(int i,String s) this(s);/this调用第二个构造器/this(i); /*此处不能用,因为其他任何方法都不能调用构造器,只有构造方法能调用他。 但是必须注意:就算是构造方法调用构造器,也必须为于其第一行,构造方法也只能调 用一个且仅一次构造器!*/ this.i=i+;/this以引用该类的成员变量System.out.println(Int constructor: +i+n+String constructor: +s); public ThisTest increment() this.i+;return this;/返回的是当前的对象,该对象属于(ThisTest) public static void main(String args) ThisTest tt0=new ThisTest(10); ThisTest tt1=new ThisTest(ok); ThisTest tt2=new ThisTest(20,ok again!); System.out.println(tt0.increment().increment().increment().i); /tt0.increment()返回一个在tt0基础上+的ThisTest对象,接着又返回在上面返回的对象基础上i+的ThisTest对象!运行结果截图:例2:public class DemoThisprivate String name;private int age;DemoThis(String name,int age)setName(name);/您可以加上this来调用方法,像这样:/this.setName(name);但这并不是必须的setAge(age);this.print();public void setName(String name)=name;/此处必须指明您要引用成员变量public void setAge(int age)this.age=age;public void print()System.out.println(Name=+name+Age=+age);/在此行中并不需要用this,因为没有回导致混淆的东西public static void main(String args)DemoThis dt=new DemoThis(Kevin,22);运行结果截图:7、 final:final即最终的意思。(a)如果将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。另外有一种被称为inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。(b)当你将final用于类的定义时,你就需要仔细考虑,因为一个final类是无法被任何类继承的,于是有人戏称被final了的类为“断子绝孙类”。那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。例:final class Finalfinal String str=final Data;public String str1=non final data;final public void print()System.out.println(final method.);public void what()System.out.println(str+n+str1);public class FinalDemo/extends final 无法继承public static void main(String args)Final f=new Final();f.what();f.print();结果截图:(c)当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,儿对于变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给了另外的值。例:import java.util.List;import java.util.ArrayList;import java.util.LinkedList;public class Batfinal PI=3.14;/在定义时便给之值final int i;/因为要在狗仔函数中进行初始化,所以此处不可给值final List list;/此变量也与上面的一样Bat()i=100;list=new LinkedList();Bat(int ii,List l)i=ii;list=l;public static void main(String args)Bat b=new Bat();b.list.add(new Bat();/b.i=25;/b.list=new ArrayList();System.out.println(I=+b.i+ListType:+b.list.getClass();b=new Bat(23,new AarrayList();b.list.add(new Bat();System.out.println(I=+b.i+ListType:+b.list.getClass();另外方法中的内部类在用到方法中的参变量时,此变量也必须声明为final才可使用,如下代码所示:public class INClassvoid innerClass(final String str)class IClassIClass()System.out.println(str);IClass ic=new IClass();public static void main(String args)INClass inc=new INClass();inc.innerClass(Hello);8、 abstract: 抽象。abstract 修饰的CLASS是抽象类。抽象类(abstract class)可以有抽象方法,也可以有具体是方法,抽象类只能支持单继承。抽象类主要需要记住以下几项要点:(1)抽象类不能被实例化. (2)抽象类有构造器,且他的构造在他的子类被实例化时被调用的顺序和普通类调用的顺序是一样的(先父后子). (3)抽象类内部的方法可以不是抽象方法,也就是说抽象类内部可以有具体的方法. (4)抽象类的抽象方法属于一种不完整的方法,只含有声明和定义,没有方法主体. (5)如果抽象的某个子类是普通类(非abstract类型的类)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单项选择题评分标准
- 2025年拉萨货运从业资格证考题
- 廉洁文化教育受众对象
- 联环药业制度和人文安全环境800字
- 粒子水凝胶的形态
- 比较级的详细用法
- 做账实操-企业付款方式解读(私对私、公对私、公对公哪种更合规)
- 名宿装修合同范本
- 广东省2024-2025学年高二下学期第一次学情联合检测地理学试卷(有答案)
- 肺结核门诊诊疗规范
- 《湖南省房屋建筑和市政工程消防质量控制技术标准》
- 充电桩安全巡查记录表
- 《公路工程现浇泡沫聚合土应用技术规程》
- 2025届云南省民族大学附属中学高三(最后冲刺)数学试卷含解析
- 墨菲定律知识介绍墨菲定律启示课件
- 品管圈PDCA获奖案例-新生儿科运用PDCA循环缩短早产儿完全经口喂养过渡时间成果汇报
- 河流沿岸护栏安装工程协议
- 工程四新培训
- T∕CACM 1021.19-2018 中药材商品规格等级 白芷
- 2024电力安全工器具及小型施工机具预防性试验规程
- 呼吸内科护理新技术
评论
0/150
提交评论