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.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
随机推荐
- JOB SERVER 负载均衡
JOB SERVER 负载均衡 一.体系结构 1.job server group job server group 是由一个或者多个job server 组成的,做为一个整体对外提供服务,在内部实现 ...
- iOS 中系统与 SDK 版本检测
一.编译时检测 1. 判断 SDK 是否是某个版本或更高版本 ifdef __IPHONE_11_0 2.判断当前需要支持的最低版本 __IPHONE_OS_VERSION_MIN_REQUIRED ...
- JS变量、作用域、内存
写到这个题目<JS变量.作用域,内存>,我就不由自主想起了黄金三嫖客.可能是名字有点像,嗯,一定是这样子的! JS接触下来,应该是要比Java简单不少的,所以,要学好啊.立个flag半年后 ...
- 001_02-python基础习题答案
python 基础习题 执行 Python 脚本的两种方式 如:脚本/python/test.py 第一种方式:python /python/test.py 第二中方式:在test.py中声明:/us ...
- Python 正则:前后界定和前后非界定
在用正则去匹配识别手机号.QQ.微信号的时候,往往由于输入的文本可能非常的另类,比如,没有标点和隔断,这时`^`和`$`就用不上了. 不用其实也可以识别的,但是有个问题,手机后是11位数字,QQ是5~ ...
- PHP 判断密码强度
$score = 0; if(preg_match("/[0-9]+/",$str)) { ...
- yii学习笔记(2),创建控制器
将网站根目录配置到项目的web目录 打开网站访问的是web/index.php这时打开默认页面 访问一下其他页面,发现浏览器地址的url携带了一个参数 http://www.test.com/inde ...
- 大数据学习--day15(常用类:Date--DateFormat--SimpleDateFormat--File--包装类)
常用类:Date--DateFormat--SimpleDateFormat--File--包装类 这些常用类就不像字符串挖那么深了,只列列用法. 时间处理: /** * 时间处理类 * DateFo ...
- XAMPP之Mysql启动失败
启动XAMPP中的Mysql出现如下: 可能的原因是本地有多个MySQL,所以要在注册表编辑器中将imagePath改成XAMPP中的mysql的地址.(打开注册表编辑器:win+R,输入regedi ...
- Linux入门第五天——shell脚本入门(下)基础语法之调试debug
一.如何debug 1.通过sh命令的参数: sh [-nvx] scripts.sh 选项与参数: -n :不要执行 script,仅查询语法的问题: -v :再执行 sccript 前,先将 sc ...