编写程序时,常会由于变量没有初始化而产生各种错误;用完一个元素,如果不将其占用的内存资源释放,则会导致资源耗尽,这也很严重,为此,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. JOB SERVER 负载均衡

    JOB SERVER 负载均衡 一.体系结构 1.job server group job server group 是由一个或者多个job server 组成的,做为一个整体对外提供服务,在内部实现 ...

  2. iOS 中系统与 SDK 版本检测

    一.编译时检测 1. 判断 SDK 是否是某个版本或更高版本 ifdef __IPHONE_11_0 2.判断当前需要支持的最低版本 __IPHONE_OS_VERSION_MIN_REQUIRED ...

  3. JS变量、作用域、内存

    写到这个题目<JS变量.作用域,内存>,我就不由自主想起了黄金三嫖客.可能是名字有点像,嗯,一定是这样子的! JS接触下来,应该是要比Java简单不少的,所以,要学好啊.立个flag半年后 ...

  4. 001_02-python基础习题答案

    python 基础习题 执行 Python 脚本的两种方式 如:脚本/python/test.py 第一种方式:python /python/test.py 第二中方式:在test.py中声明:/us ...

  5. Python 正则:前后界定和前后非界定

    在用正则去匹配识别手机号.QQ.微信号的时候,往往由于输入的文本可能非常的另类,比如,没有标点和隔断,这时`^`和`$`就用不上了. 不用其实也可以识别的,但是有个问题,手机后是11位数字,QQ是5~ ...

  6. PHP 判断密码强度

                 $score = 0;            if(preg_match("/[0-9]+/",$str))            {           ...

  7. yii学习笔记(2),创建控制器

    将网站根目录配置到项目的web目录 打开网站访问的是web/index.php这时打开默认页面 访问一下其他页面,发现浏览器地址的url携带了一个参数 http://www.test.com/inde ...

  8. 大数据学习--day15(常用类:Date--DateFormat--SimpleDateFormat--File--包装类)

    常用类:Date--DateFormat--SimpleDateFormat--File--包装类 这些常用类就不像字符串挖那么深了,只列列用法. 时间处理: /** * 时间处理类 * DateFo ...

  9. XAMPP之Mysql启动失败

    启动XAMPP中的Mysql出现如下: 可能的原因是本地有多个MySQL,所以要在注册表编辑器中将imagePath改成XAMPP中的mysql的地址.(打开注册表编辑器:win+R,输入regedi ...

  10. Linux入门第五天——shell脚本入门(下)基础语法之调试debug

    一.如何debug 1.通过sh命令的参数: sh [-nvx] scripts.sh 选项与参数: -n :不要执行 script,仅查询语法的问题: -v :再执行 sccript 前,先将 sc ...