一切都是对象
Posted fyln
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一切都是对象相关的知识,希望对你有一定的参考价值。
如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。
解读:不同的语言是从不同的角度描述世界的。
Java:是一种纯粹的面向对象的语言,几乎一切都是对象。
用引用操纵对象:操纵内存中的元素(数据类型,直接操纵(引用),间接操纵(指针))。
Java:类型 标识符;String s;定义一个引用reference;可以将对象赋值给引用,使其操纵该对象。
本质:引用存放于执行栈中,由执行栈的指针查找并获取他的值;对象存放于堆内存中,由引用的值查找并获取对象的数据。至于是怎么查找及获取的原理:我想就是一套定位机制。
必须由你创建所有对象:new String();
存储位置:
寄存器:计算机中最快的存储区,位于处理器内部。
堆栈:位于RAM随机访问存储器中,通过堆栈指针可以从处理器哪里获得直接支持。仅次于寄存器。指针只能上下移动来控制内存的分配和释放,故内存中的数据必须是有确切的生命周期的。
本质:内存分配,栈空间(可以想象成连续的内存空间)每分配一个内存,指针向下移动一步,数据被放入分配的空间中。每释放一个内存,指针向上移动一步。那么怎么使用已经存放好的数据呢?这就需要通过控制指针的移动步骤了。
堆:一种通用内存池(也位于RAM区),用于存放java对象。内存分配和清理是由于不知道内存数据的生命周期,而变得更为缓慢,不过也更为灵活。
本质:堆空间(不连续的内存空间),分配时,随机查找到一块未用内存存放,返回地址数据,释放时需判断其地址是否有引用持有来释放。
常量存储:常量值通常放入代码内部,或者放在ROM只读存储器中。
非RAM存储:硬盘等位置。
特例:基本类型。特点:占用空间小且不随机器硬件的改变而改变(保证移植不变),表示简单。
对于此类对象,可以放入栈中,提高效率。
Boolean,char(16bit,范围Unicode0到Unicode2^16-1),byte(8bit),short(16bit),int(32bit),long(64bit),float(32bit),double(64bit),void。
1 byte = 8 bit,1字节=8位,每位只能存储二进制数据(0或1)
Java中的数值都有符号,由最高位表示。
故byte的范围计算为:-2^7到+2^7-1;一共可表示的数2^8=256。+0和-0所以要减1.
高精度数字:BigInteger和BigDecimal。为一个类库中的类,其范围任意,所能做的计算有其本身的方法实现。
数组:为特殊的抽象数据类型,在java中其规则有,初始化内存全部清零,访问范围将被检查,不能超出范围。
永远不需要销毁对象:
变量的作用域:变量的生命周期(c语言可以由花括号包裹的范围决定,java不行),java是由方法(方法中的变量只能在方法中可以使用,称为局部变量),对象决定的(能在对象的各个方法中使用,称为成员变量)。
对象的作用域:java中对象可以一直存在,除非其没有引用指向后才可能被释放(不过其引用变量是有作用域的,可以将引用变量赋值给更大的作用域变量);c中对象作用域类似变量的作用域。
创建新的数据类型:类。Class name{变量,方法 }
变量:类型 变量名;int i; String s;都会有默认初始化值。
方法:返回值类型 方法名(参数列表){代码};
细节:返回值类型(任何数据类型,特殊数据类型void(表示返回值为空)),参数列表(将调用请求时可能会需要传递一些信息,信息为各类型的值,不同类型的值在参数列表中需要明确指定其类型和代表值的名称,如add(5), void add(int i){}。调用时5是int类型)
类的名字:区分不同类,自定义时可能会和类库中的一样。那么类的实际名称为包名+类名。为了避免每次写包名+类名,可以用import 包名。
Static:静态的,用于某个变量希望他不依赖对象,也就是说没有new对象或者new了多个对象都是存在此变量且各对象中的此变量是同一个。其存放在类定义的代码区。
以上是关于一切都是对象的主要内容,如果未能解决你的问题,请参考以下文章