JAVA学习笔记--初始化与清理
编写程序时,常会由于变量没有初始化而产生各种错误;用完一个元素,如果不将其占用的内存资源释放,则会导致资源耗尽,这也很严重,为此,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学习笔记--初始化与清理的更多相关文章
- Java编程思想学习笔记——初始化与清理
初始化 构造器保证初始化 构造器采用与类相同的名称. 默认构造器(default constructor):不接受任何参数的构造器,也叫无参构造器. 构造器也能带有形式参数,就能在初始化对象时提供实际 ...
- Java编程思想学习笔记——初始化与清理(二)
成员初始化 Java尽力保证:所有变量在使用前都能得到适当的初始化. 方法的局部变量:未初始化,编译错误. void f(){ int i; // System.out.println(i);//编译 ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
随机推荐
- LINUX升级PHP版本至5.4.26
参考网址:http://www.itbulu.com/wdcp-php54.html文件:链接:http://pan.baidu.com/s/1slbbNxr 密码:s0yb 1.运行下载PHP版本文 ...
- DataGuard的三种保护模式
(一)三种保护模式介绍1.最大性能模式这种模式保证数据库主库性能最大化,主备库之间数据是异步传输的.即,主备日志归档以后才会传输到备库,在备库上使用归档日志文件做恢复操作.这种模式提供在不影响prim ...
- 【项目笔记】完成一个基于SSM框架的增删改查的模块后总结的问题
最近为了准备新工作重新摸出了SSM框架,同时从0学习了JQuery,终于用一周做完了一个包括增删改查的模块(主要是属性太多了,其中一个类50+,复制粘贴耗时). 从中特意记下了几个遇到的问题,总结一下 ...
- js动态获取浏览器或页面等容器的宽高
首先说一下js动态获取浏览器或页面等容器的宽高的方法大体有哪些: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHei ...
- day 32 管道,信号量,进程池,线程的创建
1.管道(了解) Pipe(): 在进程之间建立一条通道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象,强调一点:必须在产生Process对象之前产生管道. ...
- express-session deprecated undefined resave option; provide resave option app.js
nodejs使用express-session报错 代码如下 app.use(session({ secret: 'hubwiz app', //secret的值建议使用随机字符串 cookie: { ...
- 安装虚拟机及学习linux系统 20155222卢梓杰
安装虚拟机及学习linux系统 20155222卢梓杰 首先按照要求下载virtualbox,没有遇到问题. 接下来新建一个虚拟机,按照要求应当安装乌班图64,这里只有32位的.在网上搜寻了许久,终于 ...
- 20155310 2016-2017-2 《Java程序设计》第2周学习总结
20155310 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 •布尔:boolean类型可表示true和false. •浮点数:主要用来储存小数数值,细分 ...
- 20155316 2016-2017-2 《Java程序设计》第3周学习总结
教材学习内容总结 类:创建类.使用类 基本类类型与类类型 数组 封装的概念 重载 类语法 static成员 教材学习中的问题和解决过程 1.既然数组在JAVA中就是对象,那么int[] 是否是一个类呢 ...
- 20155323 2016-2017-2 《Java程序设计》第10周学习总结
20155323 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 狭义的网络编程范畴就是程序 ...