类与对象

Posted bingt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类与对象相关的知识,希望对你有一定的参考价值。

知识点

1、清楚类与对象的关系

2、掌握类与对象的定义结构

3、掌握对象的内存分配

 

具体内容

认识类与对象

类与对象是整个面向对象之中最为基础的组成单元,如果需要给出划分定义的话,类就是共性的集合,而对象是某一个性的产物。

所有的类实际上都是用来描述出对象的结构,例如:每一个人的姓名、年龄、身高、长相、等等一系列的因素。某一类的共性的集合对象,除了具备以上的特征(属性)之外,实际上还包括许多的行为(功能)。所有根据此类产生出的对象都具有相同的行为。对象所能操作的行为都是由类来决定的,超过类定义范畴的操作是不能够使用的。

类实际上是对象操作的模版,但是类不能够直接使用,必须通过实际对象使用。

 技术图片

类是不能够直接使用的,对象是可以直接使用的,对象是通过类产生的。

 技术图片

类与对象的基本定义

如果要在程序之中定义类可以使用“class类名称{}”的语法结构完成,而k类之中的组成主要有两点:

      Field(属性、成员、变量),就是一堆变量的集合;

      Method(方法、行为),之前见到的方法,但是此时的方法是由对象调用的。

范例:定义类

 技术图片

那么在这个类里面定义来两个属性和一个方法,当然如果有需要也可以定义更多的属性和方法。

类现在虽然已经产生了,但是如果要想使用类必须要有对象,那么对象的定义格式有如下两种:

      声明并实例化对象:类名称 对象名称 = new 类名称();

      分布完成:

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

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

引用数据类型与基本数据类型最大的区别在于需要内存的开辟及使用,所以关键字new的主要功能就是开辟内存空间,即:只要是引用数据类型想使用,那么就是必须使用关键字new来开辟空间。

当一个对象实例化之后那么就可以按照如下的方式利用对象来操作类的结构:

      对象.属性:表示要操作类中的属性内容

      对象.方法():表示要调用类中的方法

 

范例:使用类 —— 在主类主类中使用Book类

 技术图片

输出结果为:

 技术图片

如果要想对以上的程序进行内存分析,可以首先给出两块内存空间的概念:

      堆内存:保持每一个对象的属性内容,堆内存需要用关键字new才可以开辟

      栈内存:保存的是一块堆内存的地址,但是为了分析方便,可以简单的理解栈内存保存的是对象名字

 技术图片

对象除了可以利用一行语句定义之外,也可以分步完成。

范例:分步的方式实例化对象

技术图片

现在结果上和之前没有任何的区别,但是通过内存图来进行分析

任何情况下只要看见来关键字new,都表示要开辟新的堆内存空间,一旦堆内存空间开辟了,里面就一定会有所有类中定义的属性,当然所有的属性内容都是其对应数据类型的默认值。

 技术图片

以上的代码是分为两步的方式实现了对象的实例化(开辟了堆内存的对象称为实例化对象),那么如果说现在使用了没有实例化的对象。

技术图片

此时由于使用了没有实例化的Book类对象,所以程序在运行的时候出现了“NullPointerException”(空指向异常),此类异常只要是引用数据类型都是可能出现。

引用数据的初步分析

引用是整个java开发中的核心精髓所在,即:只有掌握了引用这一基础概念之后才可以继续向后面的课程进行深入学习。引用类似于C++中的指针所在,但是要比指针的概念更加简单。
在引用分析的关键在于关键字“new”,一定要注意的是,每一次使用关键字new都一定会开辟新的堆内存空间,所以如果你的代码里面声明两个对象,并且使用了关键字new为两个对象分别进行对象的实例化操作,那么一定是各自占有各自的堆内存空间,并且不会互相影响。

范例:声明两个对象

技术图片

技术图片

这时候给出的代码,是声明并实例化对象,用一行语句完成的,那么下面来观察引用类型的使用。
范例:对象引用传递

 技术图片

输出结果为:

 技术图片

严格来讲booka和bookb里面保存的是对象地址信息,以上的引用过程就是将booka的地址给了bookb。

 

booa和bookb指向是同一块内存地址,所以任何一个对象修改了堆内存地址中的数据后,另一个也将改变。在引用操作的过程之中,一块堆内存可以同时被多个栈内存所引用,反过来,一块栈内存只能够保存一块内存空间的地址。

 技术图片

输出结果为:

 技术图片

在通过内存分析后发现,在引用数据类型里面,一块没有任何栈指向的堆内存空间将成为垃圾,会不定期的被垃圾回收器(GC)进行回收,回收之后释放所占空间。虽然java支持垃圾的收集处理,但是代码中应回避垃圾。

 

 

总结

1、类描述的是公共特征,类必须通过对象才可以使用;

2、声明对象指的是未开辟堆内存的对象,如果直接使用此对象会出现“NullPointException”空指向异常,有了堆内存引用的对象才称为实例化对象;

3、堆内存保存的是对象中所有属性的内容,而栈内存保存的是堆内存地址数值(为了简单说明才称为栈保存的是对象名称);

4、垃圾空间指的是没有任何栈指向的堆内存空间,会被垃圾回收器收集。

以上是关于类与对象的主要内容,如果未能解决你的问题,请参考以下文章

类与对象

Java-类与对象-多态

Python初识类与对象

Python初识类与对象

OOP封装:类与对象

类与对象