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()一般只用于清理那些使用“本地方法”的地方。

 

转载于:https://www.cnblogs.com/tongye/p/6596127.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33766805/article/details/94754756

智能推荐

ProxySQL--基础--2.1--部署--单机RPM安装_proxysql 离线安装-程序员宅基地

文章浏览阅读43次。启动后会监听以下两个默认端口。_proxysql 离线安装

低功耗设计方法(1)——————功耗构成和类型_根据电路图调制功耗-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏18次。1.功耗的构成——按类型分  低功耗按照类型分类呢,其构成主要有动态功耗、静态功耗、浪涌功耗这三种。1)动态功耗  动态功耗包括:开关功耗或者称为翻转功耗、短路功耗或者称为内部功耗。①开关功耗  在数字CMOS电路中,对负载电容进行充放电时消耗的功耗,比如对于下面的CMOS非门中当Vin = 0时,上面的PMOS导通,下面的NMOS截止;VDD对负载电容Cload进行充电,充电完成后,Vout的电平为高电平。当Vin = 1时,上面的PMOS截止,下面的NMOS导通,负载电容_根据电路图调制功耗

timing issue有哪些-程序员宅基地

文章浏览阅读275次。timing issue

嵌入式WEB服务器BOA的移植方法-程序员宅基地

文章浏览阅读2.3k次。作者:李驹光、郑耿本文摘自作者《嵌入式Linux系_嵌入式web服务器boa的移植

vscode server源码解析(二)- 架构分析_code-server 原理-程序员宅基地

文章浏览阅读935次,点赞21次,收藏21次。code server架构分析_code-server 原理

JVM内存简介_jvm内存是什么-程序员宅基地

文章浏览阅读2.4k次。JVM运行时内存主要分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区五个部分,如下图所示。1.程序计数器用来记录当前线程执行到代码的具体某一行,此时若线程被挂起时,程序计数器用来记录代码已经执行的位置,当线程恢复执行后继续从记录位置开始执行。常见的异常处理、分支操作等都是通过通过程序计数器来完成的。计数器记录的是正在执行的虚拟机字节码指令的地址,随着线程的创建而创建,随着线程的销毁而销毁2.本地方法栈本地方法栈与虚拟机栈基本相同,主要用来管理nattive方法,如在Android中使用JN_jvm内存是什么

随便推点

ubuntu18.04部署node-red,emqx,influxdb_ubuntu安装node-red-程序员宅基地

文章浏览阅读1k次。ubuntu18.04部署node-red,emqx,influxdb_ubuntu安装node-red

MYSQL--基础--8.2--my.cnf--调优_mysql 8.2 不支持 binlog_format=mixed-程序员宅基地

文章浏览阅读257次。【代码】MYSQL--基础--8.2--my.cnf--调优。_mysql 8.2 不支持 binlog_format=mixed

Doris--基础--13.4--SQl函数--字符串函数_doris 字符串函数-程序员宅基地

文章浏览阅读2.6k次。如果’str’字符串非空并且末尾不包含’trailing_char’字符,则将’trailing_char’字符附加到末尾。trailing_char只包含一个字符,如果包含多个字符,将返回NULL。_doris 字符串函数

7年测试经验分享 —— 我在 Z 厂的6个月工作总结,送给迷茫中的你_测试分享交流应该分享些什么东西-程序员宅基地

文章浏览阅读2.5k次。▌背景不知不觉去 Z 厂已经半年了,恰逢前几天成转正述职,趁着这个机会,做个阶段性总结。▌工作职能变化Z 厂前: 在一家 K12 教育公司 (简称 S 厂),定位是测试开发岗位,主要负责效能工具研发、自动化、服务端压测、测试环境治理,带 5 人小团队.S 厂的测试和测开分发的,测开不负责业务,所以到最后会感觉到脱离业务比较多,S 厂离职后面试很吃亏,比如: 美团、阿里、便利峰,技术能力没啥问题,主要是简历中无法体现所负责的业务价值。Z 厂: 目前负责某个业务线,10 人团队左右。Z 厂目.._测试分享交流应该分享些什么东西

Spring data mongodb (mongoTemplate)_spring.data.mongodb.database-程序员宅基地

文章浏览阅读911次。1.依赖管理org.springframework.bootspring-boot-starter-parent2.3.2.RELEASEorg.springframework.bootspring-boot-starter-data-mongodb底层是mongoDriver2.application.ymlspring.data.mongodb.hostspring.data.mongodb.portspring.data.mongodb.databasesp_spring.data.mongodb.database

点击导航滚动到指定位置 (滑动到指定位置对应导航自动选中)Vue3+js_vue3滚动到指定位置-程序员宅基地

文章浏览阅读2.5k次。注:部分组件使用的naive-Ui。_vue3滚动到指定位置

推荐文章

热门文章

相关标签