class 是类,它对应了一组数据结构,以及对应的操作数据的方法。

类是一套定义,我们通过 new 类名() 这样的语法生成类的对象。

同一个类的所有对象中所能够存储的数据格式都是一样的。

如果一个对象中能够存储一个整数值,那么另一个对象中也可以。

为了表述一个类的数据结构,我们在类中声明了属性( field )。

不同的属性需要表达的量不同,有可能是整数,有理数,无理数,字符

但是在计算机中,所有的数据都会变成各种形式的二进制数字进行存储

在数学计算中,我们不需要区分整数或者无理数

因为他们具有相同的运算规则

但是在计算机中

使用固定的内存空间存储数据

能够大大降低硬件的复杂性

提升运算的性能

所以计算机中倾向于固定数据所占用空间

但是存储空间和存储方法固定了,数据的取值范围就固定了

为了应对不同的取值范围

我们又对不同场景的数据做了细分

数据类型(type)就是对数据的取值范围和存储方法的声明

int 就按照整数的方式存储,最大存储 Integer.MAX_VALUE

double 就按照浮点数的方式存储,能够表示的数值和精度也是有限的

在此之上,为了更加适应人类的思维

人们为 类型 赋予了额外的意义

类型除了代表数据的存储方法和取值范围

还应该附带能够对数据施加的操作

本质上相同的数据

不同的类型可以表达不同的意义

整形的 1001000 表示数字 72

字符型的 1001000 表示字母 H

到这里,类型和类开始走到一起

大概这也就是为何中文如此翻译 class 和 type 两个字眼

回到类

我们 new 生成的每一个对象都会在内存中有自己的一块存储空间

在对象生成时,按照类的设计

规划好了哪一段内存对应哪一个属性的数据

在另一块特殊的内存中存储了类中所有方法的代码

他们为同一个类的所有对象所共享

当我们调用对象的某个方法时

java 虚拟机会查找这个方法的定义并施加到对应的那块存储空间

另一个对象调用同个方法时

java 虚拟机又会将同一段代码施加到新的存储空间