`
student_lp
  • 浏览: 429164 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java核心:访问权限控制、static和final的作用

阅读更多

 一、类的访问控制
不能将类设置成private(那样会使除了类之外的其他东西都不能访问他),也不能设置成protected()。类的访问只有两个选择:“有好的(default)”和public,其中对于“友好的(default)”类仅能在包内使用。若不愿其他任何人访问那个类,可将所有的构造器设置为private,这样一来,在类的一个static成员内部,除自己之外的其他所有人都无法创建属于那个类的一个对象。
二、成员变量和方法的访问控制
 1、private访问控制:如果一个成员方法或成员变量名前使用了private访问控制符,那么这个成员只能在这个类的内部使用。
 2、缺省访问控制:果一个成员方法或成员变量名前没有使用任何访问控制符,我们就称这个成员是缺省的(default),或是友元的(friendly),或是包类型的(package)。对于缺省访问控制成员,可以被这个包中的其他类访问,如果一个子类与父类位于不同的包中,子类也不能访问父类中的缺省访问控制成员。
 3、protected访问控制:如果一个成员方法或成员变量名前使用了protected访问控制符,那么这个成员即可以被同一个包中的其他类访问,也可以被不同包中的子类访问。
 4、public访问控制:如果一个成员方法或成员变量名前使用了public访问控制符,那么这个成员即可以被所有的类访问,不管访问类与被访问类是否在同一个包中。最后,我们用一张图来总结上述访问控制符的权限。

访问控制符  同类  同包子类  同包其它类  不同包子类  不同包其它类 
  public            √            √                 √                    √                    √ 
  protected      √            √                 √                    √                    × 
  默认               √            √                 √                    ×                    × 

  private           √             ×                 ×                    ×                   ×   
三、几个特殊关键字
1、static:表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。

①static变量
        按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
 对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 
 ②
静态方法

          静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
        因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract
 
③static代码块
 
         static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

2、final:
       
final类不能被继承,没有子类,final类中的方法默认是final的。
        
final方法不能被子类的方法覆盖,但可以被继承。
        
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
        
final不能用于修饰构造方法。
        
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
       当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
 
      注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。 final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化(声明final变量的时候就赋初值,初始化块--j静态或非静态、构造函数)。

3、static和final一块用表示什么
        static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
        对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
        对于方法,表示不可覆盖,并且可以通过类名直接访问。
        特别要注意一个问题: 对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象,这一点在编程中用到很多。 

4、abstract:不能创建abstract 类的实例。一般被继承,实现抽象方法。类只要有一个abstract方法,类就必须定义为abstract,但abstract类不一定非要保护abstract方法不可。
 图片

分享到:
评论

相关推荐

    Java 基础核心总结 +经典算法大全.rar

    访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch ...

    java基础核心总结归纳---参考手册--心得手册-学习资料-总结经验

    访问控制权限 16 继承 17 多态 17 代理 17 Static 17 Final 17 接⼝和抽象类 18 接⼝ 18 抽象类 18 异常 18 认识 Exception 18 什么是 Throwable 18 常⻅的 Exception 19 与 Exception 有关的 Java 关键字 19 什么是...

    java 核心语法串讲PPT部分

    继承中的构造方法 继承中的类型转换 方法重载、重写 多态 static、final、abstract 接口 访问权限

    java 常用设计模式chm

    Forum是Jive的核心接口,在Forum中陈列了有关论坛操作的主要行为,如论坛名称 论坛描述的获取和修改,帖子发表删除编辑等. 在ForumPermissions中定义了各种级别权限的用户: public class ForumPermissions implements...

    Java开发详解.zip

    020802_【第8章:包及访问控制权限】_访问控制权限及命名规范笔记.pdf 030901_【第9章:多线程】_认识多线程笔记.pdf 030902_【第9章:多线程】_线程常用操作方法笔记.pdf 030903_〖第9章:多线程〗_线程操作范例...

    最全java考试简答题

    在访问控制方面,`protected` 介于 `public` 和 `private` 之间。在编程中,`protected` 可以用于限制某些成员变量或方法的访问权限,以确 保数据的安全性和一致性。 final`: `final` 也是 Java 中的一个关键字,它...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象通过向其他对象发送消息与其他对象进行交互作用和通信。 消息是以参数的形式传递给某方法的。一个消息通常由三部分组成: 1. 消息传送到对象的名称。 2. 要执行的方法的名称。 3. 方法需要的任意参数。 2.2.4 ...

    Java基础知识点.html

    Date类 自动拆箱和自动装箱 Arrays 类和接口的关系 内部类 成员内部类 局部内部类 匿名内部类 抽象类 接口 多态 封装 类和对象 方法 StringBuilder类 String类 static for循环 final 权限修饰符 跳转控制语句 while...

    Java期末复习:面向对象程序设计部分

    Java面向对象程序设计||封装、继承、多态||String、this、static、super、final、instanceof||抽象类与接口、模式设计||Object类、包装类 异常的捕获及处理 包及访问控制权限

    Java入门教程(微学苑)-part1

    4.15 Java final关键字:阻止继承和多态 76 4.16 类与类之间的关系 78 4.17 依赖(uses-a) 78 4.18 聚合(has-a) 78 4.19 继承 79 4.20 Java Object类 79 4.21 equals() 方法 79 4.22 hashCode() 方法 80 4.23 ...

    java 面试题 总结

    内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...

    JAVA面试题最全集

    9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...

    Java面向对象程序设计(“方法”相关文档)共57张.pptx

    transient: 表示一个临时变量 修饰符: 表示变量的访问权限(缺省访问、public、 protected和private) 作用域:整个类。同一类中的所有方法都可以对其访问。并可简单地通过名字来引用。(在方法体内定义的变量是...

    java经典面试2010集锦100题(不看你后悔)

    普通类也可以定义上面四种访问权限,但是通常我们只应用public和default两种访问权限。 题目16:c 程序如下:  abstract class MineBase {  abstract void amethod();  static int i;  } public class Mine ...

    Java2实用教程.rar

    4 7访问权限 4 7 1私有变量和私有方法 4 7 2共有变量和共有方法 4 7 3友好变量和友好方法 4 7 4受保护的成员变量和方法 4 7 5public类与友好类 4 8类的继承 4 8 1子类 4 8 2子类的继承性 4 8 3成员变量的隐藏和方法...

    openapi-demo-java:钉钉企业应用接入-JSAPI权限验证-Java Demo

    软件依赖 java version "1.7" maven3 Getting Started 将工程clone到本地:git clone https://github.com/open-dingtalk/openapi-demo-java.git ... public static final String APP_KEY = "your APP_K

    JAVA复习资料

    10、基类的公有成员在派生类中的访问权限由_基类___决定。 11、用static修饰的方法,称为静态方法。它们不是对象的方法,而是整个类的方法。静态方法只能处理用关键字_static___修饰的数据。 12、在Java中有...

    oss上传-java

    public static final String accessKeyId = "xxxxxxxxxxx"; public static final String accessKeySecret = "xxxxxxx"; //传一个文件过来,返回uuid+日期+秒 public String up(MultipartFile mFile) throws ...

Global site tag (gtag.js) - Google Analytics