访问权限控制

修饰符 范围
public 范围最大,共有的,不管是谁都可以用
protectd 范围次之,受保护的,只能是我的子孙后代可以用
包权限 范围在次之,只能在同一个包内,才可以用
private 范围最小,我的就是我的,谁都不给

一些使用Tips:

  • 子类可以放大父类的访问权限。列如,父类的方法是protected修饰的,在子类可以把修饰符改成public。就是说,儿子从老子那里接过来的传家宝,儿子觉得这什么都不是,当什么传家宝,就公开给狐朋好友调用了。但是子类不能缩小父类的访问权限。列如:父类的方法是public修饰的,子类不能改成protected。就是说,老子已经公开了,儿子不能去抢回来当传家宝了。
  • 除内部类,类的修饰符只能有public和包权限。接口申明的方法只能是public的,抽象类的抽象方法不能是private

final关键字

根据语义表达的就是“这是无法改变的”。不想改变就两个理由:设计、效率。分下面三种情况:数据,方法,和类

  • final数据,用来告诉编译器一块数据是恒定不变的。主要两个作用:

    1. 一个永不改变的编译时常量
    2. 一个在运行是被初始化的值,不希望程序把它改变

    对于编译期常量,编译器在编译的时候,可以将该常量值带入任何可能用到它的计算式中。当final修饰的对象引用的时候,则表示对此对应引用保持恒定不变。但是这个对象本身是可以变动的。一个被final和static同时修饰的变量则表示这是一块固有的、不能改变的。

  • final 方法

    1. 锁定方法,不让子类重写
    2. 效率问题,但是在Java SE5版本之后已经将这部分工作转到编译器和JVM优化中。

    类中所有的private方法都隐式的指定为final的。所以private方法不存在是不是final类型的方法的问题

  • final类
    final修饰类的时候则表示这个类不可以被继承。

类初始化顺序

我们来通过一个例子进行理解

/*** 注释里面的四位数字代表这个语句执行的位置*/
class Child {private int i = 9;protected int j;//4444private int m = printInit("Child m initialized");Child() {//5555System.out.println("i = " + i + ", j = " + j + ", m= " + m);j = 39;}//1111private static int x1 = printInit("static Child.x1 initialized");public static int printInit(String msg) {System.out.println(msg);return 47;}
}class Parent extends Child {//6666private int k = printInit("Parent k initialized");public Parent() {//7777System.out.println("k = " + k);System.out.println("j = " + j);}//2222private static int x2 = printInit("static Parent.x2 initialized");public static void main(String[] args) {//3333System.out.println("Parent constructor");Parent classOrder = new Parent();}
}

我在上面的代码标注了输出的顺序,是不是有点蒙。我们一步一步来。
1. 程序需要执行,需要加载类,所以我们需要加载Parent和Child的类。加载class的时候就会把static对象加载。然后Parent继承与Child,所以Child会先一步加载,Parent会后一步加载。当然我们也可以知道如果Child还继承与别的Class的话,别的Class肯定是先于Child类加载的。所以到现在输出了上面1111,和2222语句对应内容
2. 调用Parent的构造函数,这个没得说。3333得以输出
3. 在实例化对象的时候,会调用构造函数这没得说。那为什么不是先输出6666对应的语句,反而是4444对应的语句呢。是因为子类在构造函数的第一句执行的是调用的父类的构造函数,所以Child的构造函数会被先调用。然后4444是在成员变量块,5555是在构造函数中。所以4444,5555输出出来了。然后才轮到Parent他自己初始化。所以6666,7777语句得以输出

Java编程思想(六)相关推荐

  1. 【Java编程思想】读书笔记(二)第六章---第十章

    Java编程思想(第四版)学习笔记 第六章---第十章 第六章:访问权限控制 6.2Java访问权限修饰词 第七章:复用类 7.1 组合语法 7.2 继承语法(extends) 7.4.2名称屏蔽(重 ...

  2. Java编程思想 (1~10)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象 2.程序就是对象的集合 3.每个对象都是由其它对象所 ...

  3. 《JAVA编程思想》学习笔记:第8章(多态)

    目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...

  4. 《JAVA编程思想》学习笔记:第16章(数组)

    目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...

  5. Java编程思想读书笔记(七)

    点击蓝字 关注我们 今天是端午节,在这里祝大家端午节安康.过节的同时也不要忘记知识储备,今天我 为大家带来了Java编程思想第七节多形性读书笔记.请大家一起品鉴,如果发现里面有啥写的不对的地方,请大家 ...

  6. 《JAVA编程思想》学习笔记:第1-4章(Java概述)

    全书目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章 ...

  7. 《JAVA编程思想》中暗藏的设计模式

    文章目录 前言 一.状态模式 1. 使用场景 2. 代码引入 3. 代码解析 二.策略模式 1. 使用场景 2. 代码引入 3. 代码解析 三.工厂模式 1. 使用场景 2. 代码引入 3. 代码解析 ...

  8. 《JAVA编程思想》学习笔记:第21章(并发)

    目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...

  9. 《Java编程思想》读书笔记一

    很早之前就买了<Java编程思想>这本书,初学时看这本书看的云里雾里的,实在费劲,就放在一边垫桌底了.感觉这本书是适合C/C++程序员转行到Java学习的一本书,并不适合零基础的初学者去看 ...

最新文章

  1. SQL Server 2016 查询存储性能优化小结
  2. ise仿真添加信号_西门子TIA+PLCSIM+MCD,构建自动化仿真系统
  3. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName(全路径名) 、getClass()、class...
  4. 《移动项目实践》实验报告——Android自定义控件
  5. 04737 c++ 自学考试2019版 第五章程序设计题 1
  6. dataframe转字典dict格式
  7. redis linux中的安装
  8. 管理感悟:当好主管的关键
  9. Java实现Map转List
  10. VSCode运行Java报错No delegateCommandHandler for vscode.java.resolveMainMethod
  11. javaSE (四十二)javaSE阶段性总结
  12. java醉汉_醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)
  13. python 拼音 英文识别_识别同音字词pypinyin, 分词 jieba
  14. tomcat启动成功但没有跳转到浏览器,已解决
  15. linux信号11sigtstp,Linux信号(signal)机制
  16. 数据结构与算法——数据结构知识归纳
  17. Hibernate学习之二-------搭建环境时应注意的地方
  18. 液晶屏背光源该如何检测?
  19. 想让微信公众号文章上“朋友圈热文”?看看这个
  20. Linux 下 网卡重启

热门文章

  1. 编写微信聊天机器人3《聊天精灵WeChatGenius》:使用Xposed来hook微信,找到微信进程。
  2. php股票公式,【图】请老师帮忙编写个选股公式_股票公式,选股公式,股票论坛,炒股软件,股票指标_指标编写互助答疑论坛_理想论坛 - 股票论坛...
  3. uc 浏览器不能打开网页
  4. Spherical Harmonics Lighting代码实现(续)
  5. 苹果3D物体捕捉Object Capture功能实现教程
  6. canvas实现打字输入效果
  7. xiunobbs装插件
  8. 通信工程/电子信息工程 保研夏令营/预推免流程分析
  9. 判断任一给定整数N是否满足条件: 它是完全平方数,又至少有两位数字相同,如144、676等。
  10. 机器学习常用性能度量中的Accuracy、Precision、Recall、ROC、F score等都是些什么东西?...