前言

Java是基于C++的,但Java是一种更加纯粹的面向对象程序设计语言。

C++和Java都是混合/杂合型语言。杂合型语言允许多种编程风格。

用引用操纵对象

每种编程语言都有自己操纵内存中元素的方式。

  • 直接操纵元素
  • 用某种基于特殊语法的间接表示(C和C++里的指针)
  • 用引用操纵对象(Java)

在Java中,一切都被视为对象。操纵的标识符实际上是对象的一个引用

  • 类比为遥控器(引用)来操纵电视机(对象)
  • 只要把握这个遥控器,就能保持与电视机的连接
  • 改变频道或减小音量,实际操纵的是遥控器(引用),再由遥控器来调控电视机(对象)
  • 在房间四处走走,只要携带遥控器(引用)而不是电视机(对象)就能调控电视机
  • 即使没有电视机,遥控器也可以独立存在
        //创建的只是引用而不是对象
String s1;
//创建一个引用的同时便进行初始化
//Java语言的特性:字符串可以用带引号的文本初始化
String s2 = "abcd";
//更通用的初始化方法
//创建一个引用,并与一个新的对象相关联
String s3 = new String("abcd");

必须由我们创建所有对象

存储到什么地方

程序运行时,对象的放置安排,内存的分配都是我们必须了解的。

有五个不同的地方可以存储数据:

1.寄存器

2.堆栈

3.

4.常量存储

5.非RAM存储

寄存器:位于数量极其有限的寄存器,是最快的存储区,寄存器会根据需求进行分配,不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象

堆栈:位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器那里获得直接支持,堆栈指针向下移动,则分配新的内存,向上移动,则释放那些内存(这是一种快速有效的分配存储方法,仅次于寄存器)创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。--->限制了程序的灵活性,所以某些Java数据(如对象引用)存储在堆栈中,但是Java对象并不存储在堆栈中

:通用的内存池(位于RAM区)。用于存储所有java对象。编译器不需要知道存储的数据在堆中存活多长时间(灵活性,但分配和清理的时间较长)。

常量存储:存放在程序代码内部。

非RAM存储:数据完全存活于程序之外,不受程序的任何控制,在程序没有运行时也可以存在。如流对象持久化对象

特例:基本类型

new一个对象存储在堆里,因此用new创建一个对象——特别是小的,简单的变量往往不是很有效的。

对于这些类型,Java采取不用new来创建变量,而是创建一个并非是引用的自动变量(直接存储值,并且存储在堆栈中)。

Java语言对于每种基本类型所占存储空间大小是固定的,不像其他语言随机器硬件架构的变化而变化。(可移植性更高)

       /**
* 基本类型创建的不是引用,而是一个自动变量,直接存储值,并且存储在堆栈中。
* 基本类型都有相对应的包装器类,能在堆中创建一个非基本对象,用来表示相对应的基本类型。
*/
//基本类型
int i = 5;
//包装类型
Integer integer = new Integer(i);
//Java SE5自动包装
Integer integer1 = 4;
//反向转换
int i1 = integer1;

Java中的数组

Java确保数组被初始化,且不能在范围之外被访问(以少量的内存开销和运行时下标检查为代价)

  • 创建对象数组---->创建引用数组,自动初始化为null
  • 创建基本数据---->初始化为0(boolean为false)

永远不要销毁对象

作用域

作用域由花括号的位置决定。

对象的作用域

new 创建一个对象时,对象可以存活在在作用域之外。

{
String s = new String("abc");
}//作用域结束的地方

String引用s在作用域终点消失,s指向的String对象仍继续占据内存空间。

在Java中,由new创建的对象,只要你需要,就会一直保留下去。并且有一个垃圾回收器,

用来监视new创建的所有对象,并辨别出那些不会再被引用的对象。

随后释放这些对象的内存空间,给其他新的对象使用。

Java编程思想学习笔记——一切都是对象的更多相关文章

  1. [Java编程思想-学习笔记]第1章 对象导论

    1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...

  2. Java编程思想学习(一) 一切都是对象

    前言 Java是基于C++的,但Java是一种更加纯粹的面向对象程序设计语言. C++和Java都是混合/杂合型语言.杂合型语言允许多种编程风格. 用引用操纵对象 每种编程语言都有自己操纵内存中元素的 ...

  3. Java编程思想学习(二)----一切都是对象

    2.1用应用操作对象 String s; 这里所创建的只是引用,并不是对象.如果此时向s发送一个消息,就会返回一个运行时错误.这是因为此时s没有和任何事物关联.因此,一种安全的做法是:创建一个引用的同 ...

  4. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  5. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  6. [Java编程思想-学习笔记]第2章 一切都是对象

    2.1  创建新的数据类型:类 通过第一章掌握了面向对象的理论后,我们知道每个对象必定属于一个类型,那么Java如何创建新的数据类型?如下程序所示: class Circle { // 属性 // 方 ...

  7. Java编程思想学习笔记——类型信息

    前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定 ...

  8. Java编程思想 学习笔记7

    七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...

  9. Java编程思想 学习笔记5

    五.初始化与清理 1.用构造器确保初始化  在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造 ...

随机推荐

  1. 11月Android笔记

    不知不觉又过了两个月了,过的够呛.新收获:百度云,视频直播,sqlite加密,lucene,SlidingPaneLayout. 我发现只要你有心,你期望的事情会接踵而来(不包括爱情= =) 上个游戏 ...

  2. iis下php 500错误

      很不想用iis,然而客户不想增加机器,只好按客户的意思了.可是没想到发送短信以在本地 机器上是好的,在iis下直接500.   一开始以为是防火墙问题,后来检查了一下没有,再后来换了一个短信接口, ...

  3. RedHat 6 yum 使用网易源

    . . . . . 刚装好了 RedHat 6 系统,但是使用 yum 的时候总是提示 nothing to do,并且什么都做不了.后来经过一番搜索才知道,红帽的 yum 在线更新是收费的,而且必须 ...

  4. Fiddler设置抓取FireFox火狐的包

    参考 http://blog.csdn.net/zhoutaohenan/article/details/8477993 亲测有效 Fiddler使用教程 http://blog.csdn.net/o ...

  5. git学习(六):git stash

    对于更改操作的处理 使用git status命令可以看到当前工作区的状态: git status // 查看工作区的状态 // 对于已经git add工作区中文件 git reset HEAD < ...

  6. 让jQuery的ajaxFileUpload插件支持onchange事件

    ajaxFileUpload插件只能上传一次的BUG发现还不少人遇到,很不幸我也遇到的,使用后发现里面的坑还不少,在createUploadForm方法中有句 var newElement = jQu ...

  7. Java内存模型和JVM内存管理

    Java内存模型和JVM内存管理   一.Java内存模型: 1.主内存和工作内存(即是本地内存): Java内存模型的主要目标是定义程序中各个变量的访问规则,即在JVM中将变量存储到内存和从内存中取 ...

  8. 【jquery】图片前后对比效果——beforeAfter

    今天分享一款 jquery 插件——图片前后对比(beforeAfter),效果如下: 使用方法: <!DOCTYPE HTML> <html lang="en" ...

  9. CLR、内存分配和垃圾回收

    一.CLR CLR:即公共语言运行时(Common Language Runtime),是中间语言(IL)的运行时环境,负责将编译生成的MSIL编译成计算机可以识别的机器码,负责资源管理(内存分配和垃 ...

  10. SpringBoot2 JPA No Identifier specified for entity的解决办法

    No Identifier specified for entity的错误 此类注解都在 import javax.persistence.*;包下     @Id     @GeneratedVal ...