第三章 赋值

本文深入探讨了Java中的关键概念,包括栈和堆的区别、字面量与基本类型的强制转换规则、变量的作用域、基本赋值原则、数组的声明与初始化、初始化块的功能、包装器的使用方法、装箱机制、方法重载的高级应用以及垃圾回收机制的工作原理。
摘要由CSDN通过智能技术生成

.栈和堆

(1)     局部变量(方法变量)驻留在栈上

(2)     对象和它的实例变量驻留在堆上

2. 字面量和基本强制转换

(1)      整形字面值可以是十进制、八进制(如:013)或十六进制(如:0x3d)

(2)      Long字面量以Ll结尾

(3)      float字面量以Ff结尾,double字面量以数字、Dd结尾

(4)      boolean字面量为truefalse

(5)      char字面量是单引号内的单个字符,如:’d’

3. 作用域

(1)       作用域指变量的生存期

(2)       4种作用域:a.只要静态变量的类存在,静态变量就存在b.只要实例变量的对象存在,实例变量就存在c.只要局部变量的方法在栈上,局部变量就存在。但,如果它的方法调用了另一个方法,它就会临时变的不可用d.块变量(如:在forif块中的变量)会存在到块完成为止

4.基本赋值

(1)       字面整数隐含为int

(2)       整数表达式总是会导致一个int大小的结果,而永远不会导致更小的结果

(3)       浮点数隐含为double(64)

(4)       收缩基本类型会截去高阶位

(5)       组合赋值(如:+=)执行自动强制转换

(6)       引用变量保持用于引用对象的位

(7)       引用变量可以引用所声明类型的子类,但不能引用其父类

(8)       当创建一个新对象时(如:Button b = new Button();)会发生3件事情:A.建立一个名为bButton类型的引用变量B.创建一个新的Button对象C.Button对象赋予引用变量b

5.使用未初始化和未赋值的变量或数组元素

(1)       当实例化一个对象数组时,该数组内的对象不会被自动实例化,但所有引用都会得到默认值null

(2)       当实例化基本类型的数组时,元素会得到它们的默认值

(3)       实例变量总是用一个默认值进行初始化

(4)       局部/自动/方法变量从不会被赋予默认值。如果试图在初始化它之前使用,则将得到编译器错误。

6. 向方法传递变量

(1)       方法能够使用基本值和/或对象引用作为变元

(2)       方法变元总是一个副本

(3)       方法变元永远不是实际的对象(它们是对象的引用)

(4)       基本值变元是与原始基本值完全分离的副本

(5)       引用变元是指向原始对象的引用的另一个副本

(6)       当两个具有不同作用域的变量共享相同的名称时,就会出现隐藏。(Notice:考题多)

7. 数组声明、构建和初始化

(1)       数组能够保存基本类型或对象类型,但数组本身就是对象

(2)       当声明数组时,方括号可以位于数组名称的左边或右边

(3)       在声明中包含数组大小永远是不合法的

(4)       (使用new)构建数组时,必须包含其大小,除非是在创建匿名数组

(5)       对象数组中的元素不会被自动创建,尽管基本数组元素会被赋予一个默认值

(6)       若试图使用对象数组中的数组元素,而改元素没有引用一个真正的对象,则会得到NullPointerException异常

(7)       数组索引从0开始

(8)       如果使用了错误的索引值,则会得到ArrayIndexOutOfBoundsException异常

(9)       数组具有一个length变量,其值是数组中的元素的个数(int a[] = {1,2,3};int len = a.length;)

(10)   可以访问的最后一个索引值总是比其长度值小1

(11)   多维数组就是数组的数组

(12)   多维数组中的维数可以有不同的大小

(13)   基本数组可以接受能够被隐式提升为数组声明类型的任何值。如:byte变量能够放入一个int数组中

(14)   对象数组能够持有通过了该数组声明类型IS-A测试(或者instanceof测试)的任何对象。如:若Horse扩展Animal,那么Horse对象就能够放入Animal数组中

(15)   当将一个数组赋予以前声明的数组引用时,正在赋值的数组必须与被赋值的引用具有相同的维数

(16)   可以将一种类型的数组赋值给以前声明的其父类型的数组引用

8. 初始化块

(1)       首次加载类时,会运行一次静态初始化块

(2)       每当创建一个新的类实例时,都会运行实例初始化块。它们的运行发生在所有父构造函数之后,构造函数的代码运行之前

(3)       若一个类中存在多个初始化块,它们会遵循上述规则,且它们的运行顺序与它们在源文件中出现的顺序相同

9. 使用包装器

(1)       包装器类与基本类型相关

(2)       包装器具有两个主要功能:A.包装基本类型,使它们能够像对象一个被处理B.为基本类型提供实用工具方法(通常是转换)

(3)       3个最重要的方法种类是:A.xxxValue(),不带任何变元,返回基本类型B.parseXxx(),String变元,返回基本类型。若失败,会抛出NumberFormatException异常

(4)       valueOf(),String变元,返回包装的对象。若失败,会抛出NumberFormatException异常

(5)       除了Character只能带char变元外,包装器构造函数能够带String或基本类型的变元

(6)       如果指定基数,则通常表示10以为的基数,八进制的基数为8,十六进制的基数是16

10.装箱

(1)       JAVA5,装箱允许在基本类型和包装器间自动装换

(2)       结合使用==与包装器的装箱是有技巧性的,具有相同的较小值(通常小于127)的包装器将是==,具有较大值则不是== 

11. 高级重载

(1)       基本值的加宽使用可能的最小方法变元

(2)       当分别使用时,装箱与var-arg都与重载兼容

(3)       不能从一种包装类型加宽到另一种包装类型(IS-A测试失败)

(4)       不能先加宽,后装箱(int不能变成Long)

(5)       可以先装箱,后加宽(int可以通过Integer变成Object)

(6)       可以组合使用var-arg与加宽或装箱

12.垃圾收集

(1)       Java,垃圾收集(GC)提供自动内存管理

(2)       GC的目标是查找和删除不可到达的对象

(3)       只有JVM才能决定什么时候运行垃圾收集器,你只能建议它运行

(4)       无法确切知道GC算法

(5)       在对象能够进行垃圾收集之前,它必须是符合条件的

(6)       当没有任何活线程能够到达对象时,该对象就符合垃圾收集条件

(7)       要到达对象,必须有一个指向该对象的活的、可到达的引用

(8)       Java应用程序能够耗尽内存

(9)       隔离岛能够被垃圾收集,即使它们相互引也能如此

(10)   应使用System.gc()方法请求垃圾收集(只对SCJP6以前的版本才如此)

(11)   Object类具有finalize()方法

(12)   在垃圾收集器删除对象之前,可以保证finalize()方法运行一次,并且只运行一次

(13)   因为垃圾收集器不会做出任何保证,所以finalize()方法可能从不运行

(14)   finalize()方法内可以让对象不符合垃圾收集条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值