Java从入门到精通读书笔记(9.2类1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9.2类(1)

类与定义对象

既然已经清楚了类与对象的关系,那么下面就可以定义一个类并产生对象。

实际上之前的所有程序都是存在类的定义的,因为类要使用class来进行定义。

类的组成:属性、方法。

类的定义格式:

Class 类名{

//声明成员变量(属性)

数据类型属性;

..........

//定义方法内容

Public 返回值的数据类型方法名称(参数1,参数2...){

升序语句;

[return 表达式]

}

}

属性与之前的变量是一样的,数据类型上就是使用java的两种数据类型:基本数据类型、引用数据类型。

但是,此时在方法的定义上与之前直接使用祝方法调用的时候声明不一致的是,不在出现static关键字。

范例:按照此格式定义一个Person类

此时就已经定义了一个类,类中有两个属性:name、age,一个说话的方法:tell()类已经定义出来了,但是只有类是不恩那个直接使用的,还需要产生对象。

范例:产生一个对象

对象产生只有,就可以调用类中的一系列操作了。

操作分为两种情况:

访问属性:对象名称.属性名= 值

访问方法:对象名称.方法()

范例:为Person对象中的name和age属性赋值,并调用tell()方法

编译运行:

对象的产生:

对象的产生步骤实际上是分为两步完成的:

1.声明对象:类名对象名称= null;

2.实例化对象:对象名称= new 类名称();

如果对象在使用中只是声明的话,则无法直接使用,必须实例化之后才可以正确的使用。

编译运行后:

此时出现了错误,这个错误造成的根本原因,是由于对象未被实例化,所以出现的空间

指向异常。此异常是在大家的开发生涯中始终陪伴大家的。

实际上对于对象的产生,也是与数组一样,需要划分堆·栈空间的。

·对象实际上是保存在栈内存中的:Person oer = null;

·实例化之后对象会开辟对应的堆内存空间:per = new Person();

在堆内存中实际上存放的是对象的各种属性,因为对象中只能依靠属性的不同来区分。

问题:

已经知道类中的属性全部保存在堆内存中,那么全部的方法呢?

·全部的方法保存在全局代码区之中。

既然可以产生一个对象,那么就可以产生多个,多个对象之间会互相影响吗?

编译运行:

因为声明了两个对象,所以在栈内存中开辟两个空间,保存两个对象,之后两个对象分别实例化。只要一出现关键字new就表示要开辟新的内存空间。

那么这两个对象之间不会互相影响到。

在对象的操作中实际上是存在引用传递的。所谓的引用传递,就是将一个堆内存空间的使用权交给了其他的对象,就相当于为一个堆内存空间起了一个别名。

引用传递:

编译运行后:

内存分析图:

了解本程序之后,再看一下的程序:

内存分析图:

从本程序中应该得到总结:一个栈内存只能引用一个堆内存空间。但是一个堆内存中可以被多个栈内存同时指向。

在java中不用的内存空间就成为垃圾空间,垃圾空间要等待垃圾收集机制进行空间的释放,垃圾收集机制成为GC。

相关文档
最新文档