Java一切皆对象

一、对象的创建

一、万物皆对象

在Java中一切都可视为对象,但操作的标识符实际上是对象的一个应用,弱想操作一个词或一个句子,可以创建一个引用,而创建引用时便进行初始化操作。否则单一的引用,运行时引用实际上是没有任何事物关联的。运行会报错。

二、对象存储在什么地方?

1、寄存器

这是是最快的存储区,它位于处理器内部,但其存储的数量是有限的,需要根据需求内容进行分配。同时也不同直接控制它,且在程序中感觉不到它存在的迹象。

2、堆栈

这个位于通用RAM(随机访问存储器)中,但是通过堆栈的指针可以进行操作,若指针向下移动,测分配新的内存,若指针向上移动,测试释放内存。创建程序时,必须知道所有储存项的生命周期,这是为了方便指针的移动。因此限制了程序的灵活性,所以某些Java数据存储在在堆栈中——例如对象的引用。但是Java对象并不在其中。

3、堆

堆是用于存放所有的Java对象1的,这是一种通用的内存池,也是位于RAM(随机访问存储器)中。存储在其中的数据不需要知道生命周期,因为灵活性较高,当new一个对象的代码被执行时,就会在堆中分配一块内存。但在进行分配存储和清理时可能会比用堆栈的存储用对的时间会更多。

4、常量存储

常量值通常会直接存储在程序代码内部,这样的安全性更高,若在嵌入系统时,常量本身会和其他部分隔开,这样样可选择存放的ROM(只读存储器中)中,如字符串池,所有字面常量字符串和具有字符串值的常量表达式都自动限定内存的,并且会置于特使的静态存储区中。

5、非RAM存储

数据完全存活于程序之外,不受程序的任何控制,且在没有运行时也能存储。技巧是:讲对象转化成可以存放在其他媒介的事物,在需要时被恢复成常规的,基于RAM(随机访问存储器)的对象。如流对象和持久化对象,在流对象中,对象转化为字节流,被发送给另一台机器。而持久化对象中,是将对象存储在磁盘上,程序停止仍可以保持状态。JDBC和MyBatis提供了大量的持久化操作。

三、数据类型

1、基本类型

在Java中要确定每种基本所占存储空间的大小,因为不能随着机器硬件的架构变化而变化,而这种存储空间大小的不变性让程序更具有可移植性。
在这里插入图片描述
对于八大基本数据类型来说,不用new来创建变量,而是创建一个并非引用的“自动”变量,这个变量直接存储“值”并置于堆栈中,因此效率更高,同时因为每种类型的所占的存储空间大小不变,让程序更具有可移植性。

2、高精度数字

BigInteger和BigDecimal属于包装类,没有对应的基本类型,但是提供操作的方法与基本类型所能执行对的操作相似。不过必须以方法调用方式取代运算符方式来实现。
BigInteger支持任意精度的整数,在运算中,可以准确的表示任何大小的整数值而不会丢失任何信息。
BigDecimal支持任何精度的定点数。

3、Java的数组

在Java的目标之一是安全性,所有Java确保了数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价的。

  • 在创建数组对象时,实际就是一个引用数组,每个元素会被初始化为null。
  • 基本数据类型的数组,编译器会将这种数组所占的内存全部置为零。
  • 在Java语言中,当检查到发生数组越界时会抛出java.lang.ArrayIndexOutOfBoundsException异常。
  • 若出现null时,说明引用还没指向某个对象,会进行报错,所有在使用任何引用前必须为其指定一个对象。

四、永远不需要销毁对象

1、作用域

作用域决定了在其内部定义的变量名的可见性和生命周期,作用域由花括号的位置决定。而对象的作用域是由new创建对象,只要需要,就一直存在。

2、对象的作用域

Java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,它可以存活于作用域之外,引用在作用域终点会消失了。然而,指向的 基本数据类型的对象仍继续占据内存空间。
若对象一直存在且不用,就会导致内存空间被不断填满。让程序被阻塞。但是Java的垃圾回收机制,用来监视new创建的对象。辨别哪些对象是不会再被引用的。然后释放这些内存,防止内存泄漏。

五、创建新的数据类型:类

  • class关键字是定义一个类的标志,后跟一个名称标识创建一个新的类型名称。
  • 在新定义的类中包含两种元素:字段(数据成员)和方法(成员函数)。
  • 若类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保有一个默认值
  • 方法是由名称、差数列表、返回值和方法体组成。且方法只能是通过对象来调用,且这个对象必须能执行这个方法调用。
  • 方法名或参数列表不同,该方法也不同,
  • 返回值的返回类型为void时,return作用是退出该方法。若返回值类型是其他,return返回的数据类型必须与返回值类型一致。
  • import关键字指示编译器导入一个包,也就是一个类库,且特定类 java.lang 会被自动导入到每一个Java文件中。

六、static关键字

  • 只想为某一特定域分配单一存储空间,而不去考虑空间要创建多少对象,甚至根本就不创建任何对象。
  • 希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。
  • 被static修饰的成员变量属于类,不属于某个对象(也就是说:多个对象访问或修改static修饰的成员变量时,其中一个对象将static成员变量进行了修改,其它的对象的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
  • 被static修饰的成员,可以通过类名直接访问。
  • 在静态上下文中,不能访问非静态的内容,不能使用this/super。
  • static方法就是没有this的方法。关于static方法内部是否能调用非静态方法:因为没有this,就没有对象,所以不能直接调用非静态方法,但可以传递一个对象引用到静态方法里,然后通过这个引用(和this效果相同)来调用非静态方法和访问非静态数据成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值