一切都是对象
Posted xxgbl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一切都是对象相关的知识,希望对你有一定的参考价值。
用引用操作对象
每一种编程语言都有自己的操作内存中数据的方式。在Java中用引用来操作对象。
必须由你创建所有对象
一旦创建了一个引用,就希望它能与一个对象相关联(即这个引用指向这个对象)。在Java中通常使用new关键字来创建对象。
String sr = new String("xxgbl");
存储到什么地方
那么问题就出现了,当你创建的对象时候,内存是怎么分配的?
有五个不同的地方可以存储数据
寄存器
这是最快的存储区,它位于处理器内部。但寄存器的数量极其有限,所以寄存器根据需求进行分配。
堆栈(栈)
位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器获得直接支持。堆栈指针向下移动,则分配新的内存;向上移动,则释放那些内存。这种存储方式速度仅次于寄存器。常用于存放对象引用和基本数据类型,而不用于存储对象。
堆
一种通用内存池(也位于RANM区),用于存放所有Java对象。其中存放的数据由JVM自动进行管理。编译器不需要知道存储的数据在堆里存活多长。当需要一个对象时,使用new写一行代码,当执行这行代码时,会自动在堆里进行存储分配。同时,因为以上原因,用堆进行数据的存储分配和清理,需要花费更多的时间。
常量存储
常量(字符串常量和基本数据类型常量)通常保存在程序代码内部(常量池)。常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式。
非RAM存储
如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。两个基本的例子:流对象和持久化对象。在流对象中,对象转化成字节流,通常被发送给另一台机器。在持久化对象中,对象存放于磁盘上。
我们谈论更多是堆和栈,下面总结一下它们的相同和不同之处。
相同之处:
都位于RAM区,jvm会自动的管理堆和栈,不去要人为去控制。
不同之处:
1.存储的数据类型。栈中存放局部变量,堆中存放对象。
2.存储速度。栈比堆快。
3.灵活性。堆的灵活性优于栈。
永远不要销毁对象
作用域
在面向过程的语言中都有作用域这个概念,作用域决定了变量的可见性和周期性。
对象的作用域
当用new创建一个对象,除非它不再被引用,否则它会一直存在于内存中。Java中有一个垃圾回收器,用来监视所有用new创建的对象。当它确定对象不再被引用的时候,就会销毁这个对象,释放内存。从而解决内存泄露的问题。
构建一个Java程序
名字可见性
如果在程序的某个模块里使用了一个名字,而其他人在程序中另一个模块里也使用了相同的名字,Java是如何防止二者发生冲突呢?
Java使用包这个机制,防止命名冲突。包名的命名格式:反过来使用程序员自己的Internet域名。例如:com.xxgbl.dao.
static关键字
通常来说都是用new来创建对象。执行new来创建对象时,才会分配存储空间,外界才能调用对象的方法。
但有两种情形是上述方法不能解决的。这也是为什么会有static的原因。
1.只想为某特定域分配单一的存储空间。而不去考虑究竟要创建多少对象,甚至根本不考虑创建对象。
2.希望类中某个方法不与其对象相关联。即没有创建对象,也能调用这个方法。
注释
Java中有两种注释风格
1.单行注释
//注释内容
2.整体注释
/*
*注释内容
*/
编码风格
Java中使用驼峰式命名规则,类名的首字母要大写,如果类由多个单词组成,那么把它们并在一起,其中每个单词的首字母大写。
例如:
class AllTheColorOfTheRainbow
{
}
以上是关于一切都是对象的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio - 在片段之间更改时底部导航崩溃