thinking in java第二章笔记 引用和赋值的陷阱 静态引用 Java中的对象解释

thinking in java第二章笔记

thinking in java第二章笔记

#Java
概述: 本章讲到了

  • Java基于面向对象模式的思想
  • 对象存储区域类型的区别
  • 对象的生命周期
  • 基础类型和基础类型的自动包装
  • 静态类 静态字段和静态方法
本章前言

java是一种纯粹的面向对象程序设计语言,它假设我们只进行面向对象的程序设计,我们必须将思想转换到面向对象的世界中来。
java中(几乎)一切都是对象

用引用操纵对象

尽管一切都被视作对象,但我们实际操作对象全是通过引用来发送消息给对象所执行的
操作—>引用—>引用发出信息—>对象接受信息—>对象执行动作
引用不一定要与一个对象关联
String qaq;
这里所创建的只是一个引用,并不是对象。但此刻你并不能通过这个引用发出任何信息,否则会报出异常。
所以引用必须要与某一对象关联才能发出信息进行操作
所以安全的做法是创建引用时便同时进行初始化(与某一对象关联)
String s = "XiaTiao";
上述操作同样包含了另一种概念—>基本类型的自动包装

对象的存储机制

创建一个引用就意味着它将会与一个新对象进行关联,而最通常的操作便在于使用new操作符来实现
new的含义是“给我一个新对象”
基本类型同样能使用new来初始化
String a = new String("XiaTiao")
那么基本类型不使用new与使用的区别到底是什么呢?(基础类型存储于堆栈中,new创建的对象存储于堆中)这就涉及到了对象到底在哪里存储

我们声明的对象到底在哪里存储?
  • 寄存器
  • 堆栈
  • 常量存储
  • 非RAM存储
    寄存器
    速度:寄存器是速度最快的存储区
    位置:寄存器位于处理器的内部
    数量:极其有限
    寄存器是最快的存储区,但它的数量十分有限,在java中我们无法操作也无法感知到寄存器的存在
    堆栈
    速度:快速
    位置:通用RAM(随机访问存储器)
    堆栈通过堆栈指针来从处理器中获得支持,堆栈指针向上—>释放内存 堆栈指针向下—>分配新的内存
    在创建程序时,Java必须知道所有位于堆栈中对象的生命周期以便快速移动堆栈指针
    这限制了灵活性,所以堆栈中一般存储对象引用,对象并不存储于堆栈中

    速度:需要相较于其他更久的时间
    位置:RAM区
    堆用来存储所有的java对象
    与堆栈相反,java无须知道生命周期,只需new关键字就会自动在堆中分配一个空间创建对象
    这一方式十分灵活,但进行存储分配则需要更多的时间
    常量存储
    位置:通常位于程序代码内部,因为它们永远不会被改变
    在嵌入式系统中,常量会和其他部分分割,在这种情况下常量需要位于ROM(只读存储器)中
    非RAM存储
    数据完全存活于程序之外,脱离程序控制,就会属于非RAM存储
  • 持久化(对象存储于磁盘上)
  • 流对象(对象转为字节流常用于发送)
Java中的数组

Java确保数组会被初始化,并且不能在它的范围之外被访问(以少量的内存开销及运行时下标检查为代价)
创建一个数组对象时实则是创建了一个数组对象的引用
数组对象引用会自动初始化值为null
当数组中为基本类型时会自动被初始化值0

Java中的作用域

Java的作用域决定了在其内定义的变量名的可见性和生命周期
在作用域内定义的变量只可用于作用域结束之前
大作用域中创建的引用名在小作用域中不能重复创建(在c和c++中可行)
Java对象不具备和基本类型一样的生命周期,当使用new创建对象时,它可以存活于作用域之外,到达作用域终点时,死去的是引用对象还没有死去。

Java中的基本类型

new关键字会将对象存储在堆中,所以用new来创建一个对象—特别是小的简单的变量往往不是很有效。
对于基本类型,java不用new来创建,而是创建一个并非是引用的“自动”变量并置于堆栈中!因此这一做法对于基本类型来说十分高效。
Java确定了每种基本类型所占存储空间的大小,这一大小不随机器硬件架构变化而变化,这一特性带来了java的可移植性

基本成员默认值

当且仅当变量作为一个的成员存在时,java才会给定其默认值以确保基本类型的成员变量得到初始化。也就是说基本成员的默认初始化对于局部变量,也就是在方法内定义的变量并不适用。

Java中的对象

类(对象)拥有

  • 字段(状态)
  • 方法(行为)
Student xiaTiao = new Student(); 
String name = xiaTiao.name; 
xiaTiao.startStudy(); 

类的方法
方法包含

  • 方法名称
  • 返回类型
  • 参数列表
  • 返回值
  • 方法体
    方法名称和参数列表作为类中唯一存在的标识
    当方法名称相同但参数列表不同时视为对方法的重载
    返回值的类型须与位于方法名称前指定的返回类型相同
    当指定返回类型非void(意为空)时必须拥有一个相同类型的返回值
    return意为“已做完,离开”,return时其后可以携带返回的信息
static关键字

static用于希望某方法或某字段不创建任何实例也能被随意调用
static字段(全局变量)在所有实例对象的引用中所指向的是同一存储空间(内存地址)
相同的static类、方法、字段全都只有相同的一份存储空间
static方法可以创建或使用与其类型相同的被命名对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值