[ Java学习基础 ] Java对象的创建和销毁
类实例化可生成对象,实例方法就是对象方法,实例变量就是对象属性。一个对象的生命周期包括三个阶段:创建、使用和销毁。
创建对象
创建对象包括两个步骤:声明和实例化。
1.声明
声明对象与声明普通变量没有区别,语法格式如下:
type objectName;
其中type是引用类型,即类、接口和数组。示例代码如下:
String name;
该语句声明了字符串类型对象name。可以声明并不为对象分配内存空间,而只是分配一个引用。
2.实例化
实例化过程分为两个阶段:为对象分配内存空间和初始化对象,首先使用new运算符为对象分配内存空间,然后再调用构造方法初始化对象。示例代码如下:
String name;
name = new String("Hello World");
代码中String("Hello World")表达式就是调用String的构造方法。初始化完成之后如下图所示:

空对象
一个引用变量没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。示例代码如下:
String name =null;
name ="Hello World";
引用变量默认值是null。当试图调用一个空对象的实例变量或实例方法时,会抛出空指针异常NullPointerException,如下代码所示:
String name =null;
//输出null字符串System.out.println(name);
//调用length()方法int len = name.length();①
但是代码运行到第①行时,系统会抛出异常。这是因为调用length()方法时,name是空对象。程序员应该避免调用空对象的成员变量和方法,代码如下:
//判断对象是否为null
if(name !=null){int len = name.length();}
提示 产生空对象有两种可能性:第一是程序员自己忘记了实例化,第二是空对象是别人传递过来的。程序员必须防止第一种情况的发生,应该仔细检查自己的代码,为自己创建的所有对象进行实例化并初始化。第二种情况需要通过判断对象非null进行避免。
避免创建不必要的对象
(1)注意String是有常量池的,它实际上是通过private final char[]来存放的,所以它是不可变的,只有第一次使用这个字符串组合的时候才进入常量池:new String("abc");实际上是有两个字符串对象,"abc"是编译期存在,它已经进入常量池了;
(2)对于Calendar这样的实例化代价较大的对象考虑尽量复用;
(3)使用自动装箱类型一定要特别小心,以免在循环中因为自动装箱而创建大量对象,能用基本类型就不要用装箱类型;
(4)小对象的创建和销毁代价是很小的,因此,使用对象池的时候一定要考虑是不是值得,使用对象池管理不当也可能造成内存泄漏。
对象销毁
对象不再使用时应该销毁。C++语言对象是通过delete语句手动释放,Java语言对象是由垃圾回收器(Garbage Collection)收集然后释放,程序员不用关心释放的细节。自动内存管理是现代计算机语言发展趋势,例如:C#语言的垃圾回收,Objective-C和Swift语言的ARC(内存自动引用计数管理)。
垃圾回收器(Garbage Collection)的工作原理是:当一个对象的引用不存在时,认为该对象不再需要,垃圾回收器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。

[ Java学习基础 ] Java对象的创建和销毁的更多相关文章
- [ Java学习基础 ] Java构造函数
构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...
- [ Java学习基础 ] Java的继承与多态
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
- [ Java学习基础 ] Java的抽象类与接口
一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...
- [ Java学习基础 ] Java的对象容器 -- 集合
当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入.使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找.在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这 ...
- [ Java学习基础 ] Java异常处理
一.异常概述 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Sys ...
- Java中引用类型、对象的创建与销毁
引用类型 在java中,除了基本数据类型之外的,就是引用数据类型了,引用指的是对象的一个引用,通过引用可以操作对象,控制对象,向对象发送消息. 简单来说,引用可以访问对象的属性,并调用对象的方法 创建 ...
- [ Java学习基础 ] Java的封装性与访问控制
Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表: 1.私有级别 私有级别的关键字是private,私有级别的成员变量和方 ...
- Java学习--基础
java学习 基础 Java三大版本 javase 标准版 占领桌面端(基础) javame 移动版 嵌入式开发.占领手机端 javaee 企业版 占领服务器端 Java的特性和优势 跨平台.可移植性 ...
- effective java读书小记(一)创建和销毁对象
序言 <effective java>可谓是java学习者心中的一本绝对不能不拜读的好书,她对于目标读者(有一点编程基础和开发经验)的人来说,由浅入深,言简意赅.每一章节都分为若干的条目, ...
随机推荐
- layui-row 布局因高度不一致错位问题
js框架为vue,通过vue去循环生成layui-col-md2;<div class="layui-row layui-col-space1"> <templa ...
- 使用Dockerfile创建一个tomcat镜像,并运行一个简单war包
docker已经看了有一段时间了,对镜像和容器也有了一个大致了解,参考书上的例子制作一个tomcat镜像,并简单运行一个HelloWorld.war 1.首先下载linux环境的tomcat和jdk, ...
- Beta 第五天
今天遇到的困难: 前端大部分代码由我们放逐的组员完成,这影响到了我们解决"Fragment碎片刷新时总产生的固定位置"的进程,很难找到源码对应 新加入的成员对界面代码不熟悉. 我们 ...
- 第六次作业:Alpha阶段综合报告(Java-Team)
团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://github.com/WHUSE201 ...
- 学号:201621123032 《Java程序设计》第7周学习总结
1:本周学习总结 1.1:思维导图:Java图形界面总结 2:书面作业 2.1: GUI中的事件处理 2.1.1: 写出事件处理模型中最重要的几个关键词 事件:如鼠标单击,滑动,输入汉字等. 事件源: ...
- 第201621123043 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 2 ...
- sqlserver之排序规则和ETL不支持sqlserverdatetime2的问题
sqlserver的排序规则大概分为Windows 排序规则和 SQL Server 排序规则.数据在安装的时候,默认不设置会默认为SQL_Latin1_General_CP1_CI_AI.数据库在创 ...
- Angular组件——组件生命周期(一)
组件声明周期以及angular的变化发现机制 红色方法只执行一次. 变更检测执行的绿色方法和和组件初始化阶段执行的绿色方法是一个方法. 总共9个方法. 每个钩子都是@angular/core库里定义的 ...
- python虚拟环境搭建大全(转)
Pipenv & 虚拟环境 本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地 ...
- ASP.NET Web API编程——路由
路由过程大致分为三个阶段: 1)请求URI匹配已存在路由模板 2)选择控制器 3)选择操作 1匹配已存在的路由模板 路由模板 在WebApiConfig.Register方法中定义路由,例如模板默认生 ...