Think in Java第5章 初始化与清理 (笔记)
2008-11-29 15:53
369 查看
很多C程序的错误是由于程序员忘记了初始化变量 。T_T<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
构造器 constructor 在船坚对象是被自动调用的特殊方法
5.1 构造器采用了与类名相同的名称 虽然其也是方法 但由于与类名完全相同 不用首字母小写
不接受任何参数的构建器叫做默认构建器 无参构造器
创建一个类 它包含一个未初始化的String饮用,论证该引用被Java初始化成了null
class StringRef
{String i;
System.out.print(i);
}
创建一个类 它包含一个在定义时就被初始化了的string域,以及另一个通过构造器初始化的String类
class StringRef
{
String i=new String (“NIHAO”);
StringRef(String s)
{
This.i=s;
}
System.out.print(i);
}
如果有了形参 除形参参数以外的所有形式不会被接受 比如 Tree (int i) 那么 Tree t = Tree()就不会接受别的形式了
5.2 方法重载
方法重载就是利用不同的形式参数形式,赋予方法不同的功能和结果。
方法调用的时候根据相应的参数形式调用对应的方法。 非常简单。
比如 print(i)如果i是int,则调用print(int i)如果i是String 则调用 print(String i) 如果是print(I,6) 则调用print(int i, int 6)
5.2.1 区分重载方法
同上
5.2.2
12d4f
设计基本类型的重载
如方法中参数是char且找不到相对应的方法与之对应,编译器就把char自动转成int型
如果输入的实际参数较大,就通过类型转换来进行窄化转换
恒等转换(相同容量的两个数据类型之间的赋值);
拓宽转换(小容量类型赋值给大容量类型);
窄化转换(大容量赋值给小容量类型).
5.2.3 以返回值区分重载方法
如果定义一个新的值套用方法 比如 int x=f( ) 那我们可以根据f( )的返回值来判定我们需要的是那种方法 {return 3;} 但如果没有这种条件 f( )还是不行的
5.3 默认构造器
当没有构造器的对象被调用时 编译器自动生成默认构造器
但已经有构造器的时候 编译器不会自动套用构造器
5.4 this 关键字
this指的是调用方法的那个对象
只有需要明确指出当前对象的引用的时候 才需要this, 否则可以自动调用
5.4.1 在构造器中调用构造器
this 只能调用一个构造器 不能同时构造两个 另外必须将构造器调用置于最起始处 否则会报错
5.4.2 static的含义
static 方法就是没有this的方法,在static的方法的内部不能调用非静态方法,反过来倒是可以的,并且可以在没有创建任何对象的情况下,仅仅通过类本身就可以调用static方法。
当置入static方法的时候便可以访问其他static方法或者域
static有点不面向对象的意思
5.5 清理:终结处理和垃圾回收
垃圾回收器只能负责回收由new获得的内存区域
如果用特别的方法获得一块特殊的内存区域 就需要用finalize( )来回收
finalize( )的工作原理是:
一旦准备好释放对象所占用的内存空间 将首先先调用其finalize( )方法,然后下次进行回收的时候,将其回收
1. 对象可能不被垃圾回收
2. 垃圾回收并不等于析构
3. 垃圾回收只与内存有关
总的来说 java的垃圾回收非常主动, 当内存不够的时候java才会回收finalize指定的资源,原因是垃圾回收也是消耗,没必要用的时候则不用来节约开支。
finalize一般来说是因为手动指定及分配了内存地址
5.5.2 你必须实施清理
c++中由于不清理内存会出现内存泄漏,对象留在内存中
java中不需要
5.5.3 终结条件
当一个对象打开了一个文件,然后对象被清除的时候,此文件就应该被关上,否则便成为隐患。system.gc( )可以强制关闭内存,利用自己定义的finalize( )发现缺陷。
个人理解好比system.gc( )是电灯开关, finalize( )是关灯须知。调用system.gc( )的时候要看看finalize( )关灯须知的条件是否都合理了才能关灯。
5.5.4 垃圾回收器如何工作
垃圾回收机制的原因在于:当内存中充满了各个对象的时候,就像一个传送带般,寻找一个对象需要遍历从头到需要的对象,这样需要时间,但如果把所有对象紧凑排列,遍历时间会大大缩短,去掉无用对象并压缩空间,遍历时间也会缩短。
好比一个大院, 院子里边好多用户, 每个人只认识自己的邻居, 你找人就要从头问 ,然后他邻居 ,然后他邻居的邻居, 最终找出人来。
要是大家住的紧凑, 就快多了,因为互相都认识。
清理机制有两种不同模式,一种是停止复活机制, Java就像个居委会大妈,没事了就遍历所有对象, 把活的记录在案 ,然后复制到另一个堆里边去 ,就像生活区里好多屋子没人住了 ,把住的人都抓起来送到另一个小点的生活区去, 然后没事再溜达 ,再送,送来送去就没多少人了。
问题在于, 送人的时候要两个院子。
可能人家没什么变换 ,你还要送来送去。
另外送人的时候 ,所有的人必须停下来被送 ,不能再干活了。
java还有种模式叫做标记清理, 就是找到所有的房子 ,有人住的留下, 没人住的清理掉。
要是清理的房子多了,房子之间都没人了。 就再用第一种模式把人们转移到另一个院子,这样又紧凑了。
还有个代数,就好比计数,张三天天有人找,就弄个大号,李四总没人找,就弄个小号,清理的时候,先清理小号的,因为没人认识。用处小。
附加技术 Just-in-time ,即时,什么时候用,什么时候拉人进来住。
lazy evaluation必要时才编译代码,不执行就不编译。执行次数越多越快。
5.6 成员初始化
方法的局部变量成员未被初始化就对其进行调用并运算会报错。
类的局部变量成员未被初始化时程序会给其默认值。
引用如果没有被初始化给指,就会得到null.
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />5.6.1 指定初始化
byte b=47; 没什么好说的
调用方法的参数可以是对象或者方法的返回值,但一定要是初始化过的。
5.7 构造器初始化
变量初始化和构造器初始化,变量初始化先运行。
5.7.2 静态数据的初始化
静态初始化旨在必要时刻才会进行(被调用)
先静态,然后非静态对象。
5.7.3 显式的静态初始化
5.7.4 非静态实力初始化
5.8 数组初始化 int[ ] a1; int[ ]={1,2,3}
Random.nextInt( 20) 返回0到20之间的一个int
Arrays.tostring(a) 返回数组a的所有值以下变得形式
[a1.a2.a3.a4] 基本类型会自动生成出示值 类的话不行 比如Integer不行。
5.8.1 可变参数列表
static void printArray(Object[ ] args) {
for(Object obj : args)
system.out.print(obj + “”);
system.out.println;
}
如果没有toString( )方法的话,会打印出其类的名字@地址。
static void printArray(Object… args){}
(Object[ ]) 将后边的数组变成Object数组。
args.getclass( ) 将会返回其class
当有重载发生的时候,不带参数的调用会发生问题,这时候可以用一个非可变参数来解决问题
5.9 枚举类型 enum
枚举类型就是给定一个取值范围,然后自己定义等于其中的一个值
enum.values( )返回所有值
enum.ordinal( )返回所有值的顺序
enum可以配合swith使用。
相关文章推荐
- Think in Java(二):初始化与清理
- Think IN JAVA-------初始化与清理
- 《Thinking In Java》学习笔记:第5章 初始化与清理
- think in java 第5章 完整的JAVA初始化规则
- Think in java学习笔记-第5章 隐藏实施过程
- 《Thinkinginjava》第5章-初始化与清理
- Think in Java(二):初始化与清理
- Think in java学习笔记-第4章 初始化和清除
- 【think in java 笔记1】java变量初始化顺序
- 《Java 编程思想》-第5章 初始化和清理 笔记
- 《Thinking in Java》笔记 - 第五章 - 初始化与清理
- [学习笔记][Java编程思想]第5章:初始化与清理
- day4 part1:《Thinking in Java》笔记第五章---初始化与清理
- [Think in Java 笔记] 静态数据(Static data)的初始化
- Think in Java 笔记_Chapter20_2_Annocation和Junit
- think_in_java笔记
- think in java中的初始化,final,static,继承
- Java编程思想:第5章 初始化与清理
- 阅读笔记[1] ——《Think In Java》 Chapter 13
- Think In Java 笔记6 Inner Classes