构造器

在我们初始化对象时,如果希望设置一些默认值,那么就可以使用构造器,在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中的构造器与垃圾回收的更多相关文章

  1. Java中内存泄露及垃圾回收机制

    转自:http://blog.sina.com.cn/s/blog_538b279a0100098d.html 写的相当不错滴...................... 摘  要 Java语言中,内 ...

  2. Java中的分代垃圾回收策略

    一.分代GC的理论基础 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大 ...

  3. Java虚拟机内存模型及垃圾回收监控调优

    Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...

  4. Java虚拟机学习笔记——JVM垃圾回收机制

    Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...

  5. [Java] 理解JVM之三:垃圾回收机制

    JVM内存中的各个区域都会回收吗? 首先我们知道 Java 栈和本地方法栈在方法执行完成后对应的栈帧就立刻出栈销毁,两者的回收率可以认为是100%:Java 堆中的对象在没有被引用后,即使用完成后会被 ...

  6. 简单聊聊java中如何判定一个对象可回收

    背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如 ...

  7. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  8. C#中IDisposable的用法-垃圾回收

    在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...

  9. Java中是构造器创建对象吗?

    首先,这里说明” Java中是构造器创建对象 “这句话是完全错误的. Java中构造器的作用主要是为了初始化变量的值...其实在执行构造器之前,Java对象所需要的内存空间,已经产生了... 一般可以 ...

随机推荐

  1. Java输入输出技术

    输入输出分类     输入流,相对计算机来说是输入的,例如鼠标键盘操作,设备给计算机的信息     输出流,相对计算机来说是输出的,例如屏幕显示,计算机给设备的信息.   具体分类     基本流,I ...

  2. NSString copy && strong

    http://www.cocoachina.com/ios/20150512/11805.html 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):stro ...

  3. Form表单中的action提交路径问题

    Form表单中的action提交路径问题 Form表单action属性和method属性的一些问题: 我遇到的是Form表单提交到servelet处理时遇到的问题:(1)<form name=& ...

  4. Dinic算法——重述

        赛前赛后算是第三次接触Dinic算法了,每一次接触都能有种很好的感觉,直男的我没法描述~~ 已经比较懂得DInic的基本算法思想了 首先是bfs进行进行分层处理,然后dfs寻找分层后的最大流, ...

  5. 软件测试思维导图[ZZ]

    原文链接 全图

  6. 用WPF写一个登录界面,我想在输入完密码后按回车就能够验证登陆,而不需要用鼠标单击登陆按钮

    在wpf中,将按钮的IsDefault设置为true ​​​​

  7. EF t4模板将实体与DBContext分离

    在用EF DBFirst时,实体类是从数据库自动生成的,与DBContext放在同一个项目中.这样其他项目想引用实体,就会将数据库操作类暴露出来.所以,我们需要将实体分离. 新建项目EFAccess, ...

  8. Entity Framework Core 生成跟踪列-阴影属性

    摘自:https://www.cnblogs.com/tdfblog/p/entity-framework-core-generate-tracking-columns.html Ef Core 官方 ...

  9. 一个docker容器中运行多个服务还是弄一堆docker容器运行?

    不建议直接在单个 Docker 容器中运行多个程序. 以 2017年 10 月18 日 Docker 官方支持 Kubernetes 为分水岭计算,Kubernetes 赢得容器编排之战的最终胜利已经 ...

  10. 识别同音字词pypinyin, 分词 jieba

    一.pypinyin 在处理语音输入指令时, 比如 请给圆圆发消息,那么转化为文字识别时, 无法确定转换的是圆圆还是园园或是源源, 为了解决这个问题, 就把指令转换为拼音来处理,这样就可以处理同音字了 ...