class 是类,它对应了一组数据结构,以及对应的操作数据的方法。
类是一套定义,我们通过 new 类名() 这样的语法生成类的对象。
同一个类的所有对象中所能够存储的数据格式都是一样的。
如果一个对象中能够存储一个整数值,那么另一个对象中也可以。
为了表述一个类的数据结构,我们在类中声明了属性( field )。
不同的属性需要表达的量不同,有可能是整数,有理数,无理数,字符
但是在计算机中,所有的数据都会变成各种形式的二进制数字进行存储
在数学计算中,我们不需要区分整数或者无理数
因为他们具有相同的运算规则
但是在计算机中
使用固定的内存空间存储数据
能够大大降低硬件的复杂性
提升运算的性能
所以计算机中倾向于固定数据所占用空间
但是存储空间和存储方法固定了,数据的取值范围就固定了
为了应对不同的取值范围
我们又对不同场景的数据做了细分
数据类型(type)就是对数据的取值范围和存储方法的声明
int 就按照整数的方式存储,最大存储 Integer.MAX_VALUE
double 就按照浮点数的方式存储,能够表示的数值和精度也是有限的
在此之上,为了更加适应人类的思维
人们为 类型 赋予了额外的意义
类型除了代表数据的存储方法和取值范围
还应该附带能够对数据施加的操作
本质上相同的数据
不同的类型可以表达不同的意义
整形的 1001000 表示数字 72
字符型的 1001000 表示字母 H
到这里,类型和类开始走到一起
大概这也就是为何中文如此翻译 class 和 type 两个字眼
回到类
我们 new 生成的每一个对象都会在内存中有自己的一块存储空间
在对象生成时,按照类的设计
规划好了哪一段内存对应哪一个属性的数据
在另一块特殊的内存中存储了类中所有方法的代码
他们为同一个类的所有对象所共享
当我们调用对象的某个方法时
java 虚拟机会查找这个方法的定义并施加到对应的那块存储空间
另一个对象调用同个方法时
java 虚拟机又会将同一段代码施加到新的存储空间