Java 初始化、final、清理
1 为什么需要无参构造器?
第一个是继承需要 super 调用父类的构造器(父类构造器必须存在且不为 private。可以是无参/默认构造器,也可以是有参构造器),特别的如果父类不包含无参构造器的话,子类继承须显示调用 super(param) 这样的方法进行初始化,如下示例;如果是无参构造器,子类继承后会在其每个构造器(包括有参/无参)内部自动调用 super() 方法。第二个是有些框架在生成对象时,默认调用无参构造器去生成对象。第三个是反射。
class SmallBrain {
// SmallBrain() {
// System.out.println(333);
// }
SmallBrain(int i) {
System.out.println(222);
}
}
class Dinosaur extends SmallBrain{
int i = 7;
static int j = 1;
Dinosaur(int i) {
super(i);
}
}
2 对数组/实例变量应用 final
static final 编译器常量,占据一段不你改变的存储空间,根据惯例使用大写字符表示。对于基础数据类型,他们是数值不可变的常量,对于引用/数组,表示一旦被初始化指向一个对象,就无法把它改为指向另一个对象
private static final int VALUE_TWO = 99;
3 禁止方法重写(单个方法 private final/ 所有方法 类 final)
所有 private 方法隐式制指定为 final,无法对其覆盖(重写)。这个问题可能会造成混淆,因为你试图覆盖一个 private 方法似乎是可行的,但是实际意义是添加一个新的同名方法(而不是重写)。
class WithFinals {
private final void f() { print("withfinals f"); }
private void g() { print("withfinals g"); }
}
class OverridingPrivate extends WithFinals {
private final void f() {
print("overridingprivate f");
}
}
可以给 class 加上 final 关键字(比如 String 类),禁止该类被继承,类中的所有方法都隐式指定为 final,成员变量/静态变量 不受影响(不是 final)。
class SmallBrain {
}
final class Dinosaur {
int i = 7;
static int j = 1;
SmallBrain x = new SmallBrain();
void f() {
}
}
class Hyrsaauc {
public static void main(String[] args) {
Dinosaur n = new Dinosaur();
n.f();
n.i++;
Dinosaur.j = 40;
}
}
4 继承与初始化过程
基类加载 —> 导出类加载 —> 执行导出类代码 ? 如果执行了创建实例方法 —> 基类成员变量初始化 —> 基类构造器初始化 —> 导出类成员变量初始化 —> 导出类构造器初始化
5 垃圾回收与清理动作
① 在垃圾回收时前调用
一旦垃圾回收器准备释放对象占用的存储空间,将首先调用其 finalize() 方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。因此可以重载它以便在垃圾回收时做一些重要的清理动作。
记住一点,在 Java 中对象并非总是被垃圾回收。因此无法确保 finalize 一定被调用。
② 由于本地方法分配存储空间,可能需要使用 finalize 中使用相应的本地方法明确地释放。
③ 检测是否该对象进行了垃圾回收(强行调用System.gc()只是建议jvm进行垃圾回收,但是是否马上进行垃圾回收jvm说了算。1.当触发了垃圾回收机制,才进行垃圾回收,例如新生代或者年老代内存空间不够;仍然存活的对象不会被回收,例如被引用)
Java 初始化、final、清理的更多相关文章
- 图解 & 深入浅出Java初始化与清理:构造器必知必会
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- Java 初始化和清理
初始化和清理是影响代码安全的两个重要因素. 一.初始化 1. 方法重载 构造器与类名相同,成为强制重载方法名的原因之一.重载规则:每个重载的方法必须拥有独一无二的参数类型列表.不能根据返回值来区分重载 ...
- java初始化与清理
初始化与清理 欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html 1.用构造器确保初始化 java中通过提供构造器,可以 ...
- [THINKING IN JAVA]初始化和清理
4.5初始化和清理 5.1 构造器初始化 无参:如果一个类没有构造器,那么会有一个默认的无参构造器,并且只能通过无参构造器初始化对象: 带参:传入参数初始化成员变量或者其它初始化操作需要的参数,如果类 ...
- Java 初始化与清理
用构造器确保初始化 如何自定义构造器(constructor)? 构造器方法的名称与类名相同,并且没有返回值. 需要注意,在定义构方法时,方法名前面不要添加任何的类型说明符,格式:类名(){},构造方 ...
- 浅谈Java中的初始化和清理
引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...
- Java编程思想——初始化与清理
PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化 虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...
- [转]java static final 初始化
http://tanbing1986411.blog.163.com/blog/static/7259798220103610224434/ java static final 初始化 1.stati ...
- Java的初始化与清理
大家都知道,Java是站在巨人的肩上成功的,它是在C&C++的基础上进一步的开发,投入面向对象开发的怀抱.Java吸取了很多以前的教训,加入自己很多独创的方式.在程序语言发展初期,许多C程序员 ...
- Java编程思想学习(五)----第5章:初始化与清理
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...
随机推荐
- 第十五节:HttpContext五大核心对象的使用(Request、Response、Application、Server、Session)
一. 基本认识 1. 简介:HttpContext用于保持单个用户.单个请求的数据,并且数据只在该请求期间保持: 也可以用于保持需要在不同的HttpModules和HttpHandlers之间传递的值 ...
- [物理学与PDEs]第4章习题2 反应力学方程组形式的化约 - 能量守恒方程
试证明: 利用连续性方程及动量方程, 能量守恒方程 (2. 15) 可化为 (2. 21) 的形式. 证明: 注意到 $$\beex \bea &\quad\cfrac{\p}{\p t}\s ...
- [物理学与PDEs]第1章习题15 媒介中电磁场的电磁动量密度向量与电磁动量流密度张量
对媒质中的电磁场, 推导其电磁动量密度向量及电磁动量流密度张量的表达式 (7. 47) 及 (7. 48). 解答: 由 $$\beex \bea \cfrac{\rd}{\rd t}\int_\Om ...
- DUMP102 企业级电商FE
101 完成 webpack 配置后,有一套类似 live-reload 自动刷新提供 REPL 环境. [配置 webpack.config.js 别名,方便 js 文件做require 支持路径别 ...
- 401 experience
AM: 块元素与内联元素 : div与span的区别 span只能设置水平的margin(左右内外边距) 在span里面加 display:block; 内联转块(相当于给span加了上下的边距)反 ...
- Windows2016的 IIS中配置PHP7运行环境
Windows2016的 IIS中配置PHP7运行环境 在Windows 的IIS(8.0)中搭建PHP运行环境: 一:安装IIS服务器 .进入控制面板>>程序和功能>>打开或 ...
- HTML5 图片下载
1. 概述 1.1 说明 在项目过程中,有时候需要下载某一展示图片,html5中定义了<a> download属性,download属性规定被下载的超链接目标,该属性可以设置一个值来规定下 ...
- thymeleaf的onclick标签传参异常
转自https://my.oschina.net/u/2312080/blog/2878183 异常 严重: Servlet.service() for servlet [DispatcherServ ...
- Java面试题复习笔记(框架)
1.什么是框架? 为解决一个开放性问题而设计的具有一定约束性的支撑结构,再次结构上可以根据具体问题扩展,安插更多的组成部分,从而更迅速和方便地构建完整解决问题的方案. 2.MVC模式? 用一种业务逻辑 ...
- pandas 中的模糊匹配