【内存访问】【基础】【基本类型】对象、引用、指针、句柄、值、值对象、量

量: 

  人们在实践活动中,为了从量的方面研究事物运动、变化的规律性,或者事物之间的数量关系,必须舍弃事物的具体内容,而从事物的量的规律性中抽象出数的概念。这种抽象最初是通过把握事物运动的联系的静态过程所达到的,这种考察事物的方式反映在数学上就产生常量的概念。

  数与量:数是值,量是量度,数量是某种抽象纬度作为量度的时候,某个时刻的值是多少。

  常量和变量:数学中表征事物量的一对概念。在事物的特定运动过程中,某量若保持不变,则称之为常量;反之,则称之为变量。变量也分为自变量和因变量。

  编程:在编程中,量会存在于对象中,也会存在于函数中。

对象:

  编程:对象是指一块能存储数据并具有某种类型的内存空间 一个对象a,它有值和地址&a。

  对象和基本类型:对象具有类型,有基本类型和自定义的类型,自定义类型由基本类型构成。

  自定义类型的对象:因为自定义类型的对象存在值的部分,而且值基本由编程语言的基本类型组成,让这些基本类型的值来描述抽象对象的某个维度的量度,所以对象的成员中会有常量(const)和变量之分,常量是对象中不能改变的值,变量是对象中可以改变的值。

  封装基本类型:在编程中,如果因为基本类型赋予了意义,所以可以单独封装基本类型,达到可以赋予方法、封装逻辑的效果。

指针:

  指针本身是一个对象(一种基本类型对象),它的特殊功能是赋予了如访问地址等各种方法,它同样有地址&p和存储的值p,&p的位置可以在堆中,也可以在栈中。

  指针本身占用了一小块内存空间(它本身不是地址,地址就是一串数字),而这块内存空间是用来写入一个地址数据的。从对象角度看以下两点:

  指针的值:内存地址

  指针的类型:指向int的类型,指向char的类型。如下:

int* p;
char* p;

 

  如果我们要以p中存储的数据为地址,来访问对象的值,则要在p前加解引用操作符"*",即*p(这是指针对象的特殊能力),因为指针是对象,具有一个量度,所以这个量度看,就有指针常量和指针变量,指针常量是指指针内的地址p不能被修改,反之指针变量是可以改变的。而常量指针(指向常量的指针)是指,p指向的对象a是常量,a不能被修改的。

  常量指针:pointer to const,指向常量的指针;

  指针常量:const point,指针值是常量;在C++中,引用就是指针常量,所以引入是不能变的

  指针变量:var point,可以改变的常量;

引用:

  指针常量,在Java中也是如此,所以只能值复制,值传递。而Java中的 a==null,是指引用还不存在。引用一旦存在,即不为空。

句柄:

  句柄属于对象定位技术之一,句柄也是一种特殊的对象,通常放在句柄池中。

  一个句柄包含的内容有:

  • 指向对象实例指针数据
  • 指向对象类型的指针数据

  所以句柄的好处是,对象被移动(例如GC)后只需要修改一次句柄中的地址,但如果reference直接引用对象,那么就需要修改多个reference。句柄坏处就是需要两次寻址。

值:

  值一般是常量,也是很多语言中的基本数据类型,通常值不理解为对象。所以理解int i = 10,其中的i是值,所以栈中要访问对象中的int i,则需要做值传递,把堆中的值复制到栈中,然后做计算,并把计算出来的新值复制到堆中。

值对象:

  一个属于常量的对象,DDD中常提及,特指改对象不可变,但一般要应用实现这种限制,也有例外,如Java有一种特殊的值对象,就是String,是JVM层面的限制。

类文件:

  我们通常在类文件中定义一个成员变量,类文件其实是在描述实例化的对象。

  变量名:方便给人阅读的,机器不阅读,Java角度看,不管这个命名多长,都只会放在方法区中,存在常量池中。这个声明变量在编译实例化之后只是一个类型信息,结构信息。

  类对象:如果把编译后的类文件也抽象为一个对象,就是类对象。类对象可以有状态,基本是静态成员变量的状态。

 

posted @ 2022-04-23 18:07  饭小胖  阅读(87)  评论(0编辑  收藏  举报