编写程序时,常会由于变量没有初始化而产生各种错误;用完一个元素,如果不将其占用的内存资源释放,则会导致资源耗尽,这也很严重,为此,C++引入了构造器的概念,这是一个在创建对象时被自动调用的特殊方法,以保证变量被初始化。JAVA中也采用了构造器用于强制程序员进行初始化工作,同时,JAVA还提供了“垃圾回收器”,来释放不用的内存,这里做一下简单的笔记。

一、构造器

  JAVA通过提供构造器保证每个对象都会被初始化,构造器采用与类完全相同的名称。一个类可以有多个构造器,这些构造器的名称都与类名一样,但是参数列表不同,即重载;每个构造器都有一个独一无二的参数列表。重载同样可以应用于其他方法。

  构造器是一种特殊类型的方法,因为它没有返回值。这与返回值为空(void)明显不同,对于空返回值,尽管方法本身不会自动返回什么,但仍可选择让它返回别的东西;构造器则不会返回任何东西。

  构造器可以带形参,也可以不带形参,这是区分不同构造器的最重要的一点。其中不接受任何参数的构造器叫做默认构造器或无参构造器。默认构造器没有形参,它的作用是创建一个“默认对象”。如果你写的类中没有构造器,则编译器会自动帮你创建一个默认构造器。但如果你已经定义了一个构造器(无论有参还是无参),编译器就不会帮你自动创建默认构造器。

如:

class Circle{}

public class Shape{

  public static void main(String[] args){

    Circle circle1 = new Circle();  // 编译器自动创建了一个默认构造器

  }

}

这样是可以编译成功的,因为编译器自动为你创建了一个Circle类的默认构造器。

class Circle{

  Circle(int i){}     // 创建一个带参的构造器

  Circle(int i,int j){}  

}

public class Shape{

  public static void main(String[] args){

    Circle circle1 = new Circle();  // 这句话是错误的,因为在Circle类中并没有定义这个构造器,而编译器此时并不会自动创建默认构造器,编译器报错

    Circle circle2 = new Circle(1);  // 调用带参构造器,并提供实参

    Circle circle3 = new Circle(1,2);

  }

}

  可以在一个构造器中调用另一个构造器,这需要用到 this 关键字。在构造器中,如果为 this 添加了参数列表,那么将产生对符合此参数列表的某个构造器的明确调用,这样即可实现在一个构造器中调用另一个构造器。另外,尽管可以用 this 调用一个构造器,但是却不能调用两个,此外,必须将构造器的调用放到构造器的最起始处,否则编译器会报错。

二、JAVA的垃圾回收机制

  JAVA提供垃圾回收器负责回收无用对象占据的内存资源,因此编写JAVA程序不必像C++那样担心内存泄漏;但是垃圾回收器不同于析构函数,是不可靠的,JAVA里的对象并非总是被垃圾回收,即:

1)对象可能不被垃圾回收

2)对象回收不等于析构

3)垃圾回收只与内存有关

  垃圾回收器只知道释放那些经由 new 分配的内存, 并不知道该如何释放那些并没有经由 new 分配的内存。对于这种情况,JAVA允许在类中定义 finalize() 方法来清理内存,但是,finalize()方法也是不可靠的,而且使用起来有危险;finalize()一般只用于清理那些使用“本地方法”的地方。

JAVA学习笔记--初始化与清理的更多相关文章

  1. Java编程思想学习笔记——初始化与清理

    初始化 构造器保证初始化 构造器采用与类相同的名称. 默认构造器(default constructor):不接受任何参数的构造器,也叫无参构造器. 构造器也能带有形式参数,就能在初始化对象时提供实际 ...

  2. Java编程思想学习笔记——初始化与清理(二)

    成员初始化 Java尽力保证:所有变量在使用前都能得到适当的初始化. 方法的局部变量:未初始化,编译错误. void f(){ int i; // System.out.println(i);//编译 ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  8. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  9. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

随机推荐

  1. 使用Docker发布.NET CORE API

    1.使用VS 2015 新建了一个Core API项目,然后把他的依赖升级到最新(我机器VS 2015默认的包都是rc版本),然后publish. 2.在publish目录的同级目录下,新建Docke ...

  2. docker 导出导入

    容器导出 docker export -o myname.tar 容器id 容器导人 docker import myname.tar httpd:v1

  3. ORACLE逐行累计求和方法(OVER函数)

    1.RANK ( ) OVER ( [QUERY_PARTITION_CLAUSE] ORDER_BY_CLAUSE ) DENSE_RANK ( ) OVER ( [QUERY_PARTITION_ ...

  4. 在正文部分操作accordion内容展开和闭合

    $('#accordionid').accordion("select",0);             //展开第一个title $('#accordionid').accord ...

  5. 查看所装jdk版本

    在D盘新建一个test.java文件 在文件里写如下代码: public class test { public static void main(String[] args) { String ar ...

  6. ztree案例笔记:用户不规范操作导致添加不了节点的问题

    我使用ztree开发了简码"万能助手",经过一段时间的观察,发现有个别用户不看教程就开始操作,总能给我折腾出一些让人哭笑不得的问题. 比如,把某个根栏目里的节点全删除,然后发现添加 ...

  7. windows10 通过命令行来查看wifi密码

    c:\Windows\System32>netsh netsh>wlan show profile 接口 WLAN 上的配置文件: 组策略配置文件(只读) ---------------- ...

  8. CSS3 过渡、变形和动画

    一.我们来给按钮增加一个悬停效果:#content a:hover {border: 1px solid #000000;color: #000000;text-shadow: 0px 1px whi ...

  9. 今天差点被断电搞死了,幸好IDE的备份救了我

    今天早上,刚好改了几个PAS的源代码,在按CTRL+SHIFT+S(保存全部) 时,突然断电.有电后,发现这些保存的文件都变成乱码了............. DFM,PAS都是这样,幸好DELPHI ...

  10. MySQL5.7.22版本的安装和调试

    1:安装前的准备工作 需要的软件: boost_1_59_0.tar.gz,cmake-3.6.1.tar.gz,mysql-5.7.22.tar.gz 开始安装MySQL 2.1 检查cmake [ ...