Java中的构造器与垃圾回收
构造器
在我们初始化对象时,如果希望设置一些默认值,那么就可以使用构造器,在Java中,构造器使用和类同名的名字且没有返回值,如下
class Test{
private String name;
Test(String n){
name = n;
}
public String getName(){
return name;
}
}
public class app {
public static void main(String[] args){
Test test = new Test("小王");
String n = test.getName();
System.out.println(n);
}
}
// 小王
并且可以发现这个构造器是在new的时候执行的。如果是继承至某个父类,那么我们可以在子类中调用super来手动执行父类中的构造器。
class Test{
private String name;
Test(String n){
name = n;
}
public String getName(){
return name;
}
}
class Test2 extends Test{
Test2(String n){
super(n);
}
}
public class app {
public static void main(String[] args){
Test2 test = new Test2("老王");
String n = test.getName();
System.out.println(n);
}
}
// 老王
前面之所以说是手动是因为,就算你不去调用父类的构造器,它还是会被执行,只是它执行的是没有参数的构造器。我们不妨来看看下面这段代码
class Test{
Test(){
System.out.println("Test");
}
}
class Test2 extends Test{
Test2(){
System.out.println("Test2");
}
}
public class app {
public static void main(String[] args){
Test2 test = new Test2();
}
}
// Test
// Test2
不竟程序自动调用了父类的构造器,而且还比子类构造器先执行,之所以父类的构造器先执行是有原因的,你想啊,子类往往需要用到父类中的一些变量或方法,如果不先初始化父类中的构造器,那么肯定就会出现一些问题。
垃圾回收
我们知道一个方法,可以无数次的被调用,因此如果没有一个合理的规范,那么每次执行都会加大内存的消耗,而且有些方法执行完毕以后就没有任何意义了,因此一些语言中加入了垃圾回收,对于一些没有用处的进行回收,当然垃圾回收不仅仅针对方法。
但是话说回来你也不能乱回收对吧,得有一个规范,而这个规范就是,如果一个对象没有被引用,或被设置成null,又或者当前对象被其他对象所覆盖,那么它就会变成垃圾,会被垃圾收集器所回收。
Java中的构造器与垃圾回收的更多相关文章
- Java中内存泄露及垃圾回收机制
转自:http://blog.sina.com.cn/s/blog_538b279a0100098d.html 写的相当不错滴...................... 摘 要 Java语言中,内 ...
- Java中的分代垃圾回收策略
一.分代GC的理论基础 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大 ...
- Java虚拟机内存模型及垃圾回收监控调优
Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...
- Java虚拟机学习笔记——JVM垃圾回收机制
Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...
- [Java] 理解JVM之三:垃圾回收机制
JVM内存中的各个区域都会回收吗? 首先我们知道 Java 栈和本地方法栈在方法执行完成后对应的栈帧就立刻出栈销毁,两者的回收率可以认为是100%:Java 堆中的对象在没有被引用后,即使用完成后会被 ...
- 简单聊聊java中如何判定一个对象可回收
背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如 ...
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.
- C#中IDisposable的用法-垃圾回收
在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...
- Java中是构造器创建对象吗?
首先,这里说明” Java中是构造器创建对象 “这句话是完全错误的. Java中构造器的作用主要是为了初始化变量的值...其实在执行构造器之前,Java对象所需要的内存空间,已经产生了... 一般可以 ...
随机推荐
- 2.3.5使用原子类进行i++操作
除了在i++操作时使用synchronized关键字实现同步外,还可以使用AtomicInteger原子类进行实现 原子操作时不可分割的整体,没有其他线程能够中断或检查正在原子操作的变量,一个原子类型 ...
- 前端- html 和css
html HTML 指超文本标签语言. HTML 是通向 WEB 技术世界的钥匙. html属性:所有标签的通用属性 html事件:On...html5加了很多事件 html视频/音频:处理音视频 h ...
- USTC《现代软件工程》春季学期——第一次个人作业:词频统计
截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...
- spring处理线程并发
http://www.open-open.com/bbs/view/1320130410702
- Maven中的配置文件
<span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...
- 关于国密算法 SM1,SM2,SM3,SM4 的笔记
国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位. SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时,需要通过加密芯片的接 ...
- centos救援模式实验笔记
1. 首先在BIOS中把启动选项设置成DVD光驱启动或者USB启动也是可以的 2. 从光盘启动之后再出现的选项中选择“Rescue installed system”然后按回车确认,具体图下图: ...
- 中美会计准则差异比较(PRC GAAP VS US GAAP)
http://bbs.chinaacc.com/forum-2-43/topic-2023118.html 一.中美会计准则的实质性差别 rule based vs principle base ...
- DataTable 快速导入数据库——百万条数据只需几秒
public void InsertTable(DataTable dt, string TabelName, DataColumnCollection dtColum) { string str = ...
- ASP.NET MVC5 高级编程-学习日记-第二章 控制器
2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...