当前位置:文档之家› java编程思想读书心得

java编程思想读书心得

竭诚为您提供优质文档/双击可除java编程思想读书心得篇一:Java编程思想第四版读书笔记Java编程思想第四版读书笔记一基础知识点1.面向对象程序设计(object-orientedprogrammingoop),umL(unitiedmodellingLanguage统一建模语言)。

将对象想像成“服务提供者”,它们看起来像什么?能够提供哪些服务?需要哪些对象?2.Java中动态绑定是默认行为。

Java采用动态内存分配方式,通过new操作在堆(heap)的内存池中动态创建对象。

Java存储结构类型:1)寄存器2)堆栈,主要存储对象引用3)堆,主要用于存放所有的Java对象4)常量存储,也就是程序代码区5)非RAm存储,如流对象和持久化对象。

基本类型不用new来创建变量,而且这个变量直接存储”值”,并置于堆栈中。

3.bigInteger和bigDecimal的使用。

当变量作为类的成员使用时当变量作为类的成员使用时,Java才确保给定其默认初当变量作为类的成员使用时始值,但是在方法中定义的变量,它有可能是任意值。

面向对象的程序设计可以归纳为“向对象发送消息”。

关键字static。

4.Javadoc只能为public和protected成员进行文档注释,但是也可以通过-private进行标记注释。

Javadoc常用方法:@see引用其他类,linkpackage.class#memberlabel},{@{@docRoot},{@inheritDoc},@version,@author,@since,@param,@return,@throws,@deprecated。

5.整数除法会直接去掉结果的小数位。

基本类型的对象如果直接对它们赋值,对象指向同一个常量存储区,但是如果通过对象来初始化则会指向不同的堆的存储区。

如:stringst1=newstring("A");stringst2=newstring("A");s t1==st2falsestringst1="A";stringst2="A";st1==st2tru e6.逻辑操作符:与(Leafincrement(){i++;returnthis;}}10.回答一个新技术的问题大概思路和步骤是:我们想干什么,怎么干,干的过程中遇到了什么问题,现在用什么方式来解决。

答题时,先答是什么,再答有什么作用和要注意什么(这部分最重要,展现自己的心得)。

11.finalize的使用:垃圾回收只与内存有关,当“垃圾回收”时,finalize()得到调用。

Java中的对象都能被垃圾回收器回收,但是在“本地方法”的情况下,有可能在分配内存时采用类似c语言的做法通过malloc()函数来分配存储空间时,这时只能通过free()函数来释放空间,而这些释放操作必须要放到finalize()方法中,垃圾回收器才能正确的释放内存。

“垃圾回收”都不保证一定会发生。

12.垃圾回收原理:引用记数引用记数是一种简单但速度很慢的垃圾回收技术。

每个对象都含有一个引用记数1引用记数器,当有引用连接至对象时,引用计数加1。

当引用离开作用域或被置为null时,引用计数减1。

垃圾回收器会在含有全部对象的列表上遍历,当发现某个对象的引用计数为0时,就立即释放其占用的空间。

定位交互自引用的对象组所需的工作量极大,所以并没有被应用于任何一种Java虚拟机中。

Java虚拟机采用一种自适应自适应的垃圾回收技术,Java虚拟机会自适应进行监视,如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记-清扫”方式;同样,Java虚拟机会跟踪“标记-清扫”的效果,要是堆空间出现很多碎片,就会切换回“停止-复制”方式。

“停止-复制”,先暂停程序的运行,然后将所有存活存活的对象从当前存活堆复制到另一个堆,没有被复制的全部都是垃圾。

“标记-清扫”,从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象,每当它找到一个存活对象,就会给对象设一个标记,这个过程中不会回收任何对象,只有全部标记工作完成的时候,清理动作才会开始。

在清理过程中,没有标记的对象将被释放,不会发生下任何复制动作。

13.初始化顺序:先静态对象,后“非静态”对象,先变量,再构造函数,然后是方法。

静态初始化只有在必要时刻才会进行,如果不引用其对象,那么该对象中的静态成员将不会被创建,而且它们只会在第一次被访问时进行初始化,其后不会再次被初始化。

14.对象的创建过程:1)当首次创建对象时,或类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位.class文件。

2)载入.class,有关静态初始化的所有动作都会执行。

3)当用new创建对象时,在堆上为对象分配存储空间,而且这块存储空间会被清零,也就是说它会自动地将对象中的所有基本类型数据都设置成默认值,而引用是被设置成null。

4)执行所有出现于字段定义处的初始化动作。

5)执行构造器。

15.数组:java.util.Arrays常用方法的使用。

binarysearch(),copyof(),asList(),copyofRange(),equa ls(),fill(),sort(),tostring(),hashcode()。

可变参数列表:voidf(floati,character?args)。

枚举类型:enum,它可以在switch语句内使用。

16.类的结构依次为:1)包的注释2)package的设置3)import导入设置4)类的注释5)类的编写。

17.Java的访问权限:类的访问权限只有public和默认包访问权限,成员和方法有public,protected,默认包访问权限和private。

使用类的客户端程序是无法访问包访问权限成员的。

包访问权限的类的对象可以由包内任何其他类来创建和使用,但是包外则不行。

18.为了继承,一般的规则是将所有的数据成员都指定为private,将所有的方法指定为public或protected。

Java 会自动在导出类的构造器中插入对基类构造器的调用。

调用基类的构造器必须是你在导出类构造器中要做的第一件事。

19.代理,它是继承与组合之间的中庸之道,因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。

20.清理方法的顺序:首先,执行类的所有特定的清理动作,其顺序同生成顺序相反;然后,调用基类的清理方法。

除了内存之外,不能依赖垃圾回收器去做任何事,如果需要进行清理,最好是编写自己的清理方法,但不要使用finalize()。

@override注解可以防止在你不想重载时而意外地进行了重载。

21.组合与继承之间的选择:组合技术通常用于想在新类中使用现有类的功能而非它的接口,也就是在新类的嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口,一般情况下会在新类中嵌入一个现有类的private对象。

而继承,它是指使用某个现有类,并开发一个它的特殊版本。

“is-a”(是一个)的关系是用继承来表达的,而“has-a”(有一个)的关系则是用组合来表达的。

22.final的用法:根据惯例,既是static又是final 的域将用大写表示,并使用下划线分隔各个单词。

类中所有的private方法都隐式的指定为是final的。

final类中所有的方法都隐式指定为是final的。

当前用hashmap替代了hashtable,用ArrayList替代了Vector。

23.Java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定。

接口中的属性都是publicstaticfinal的,方法都是public24.多态:只有普通的方法调用可以是多态的。

任何域访问操作都将由编译器解析,因此不是多态的。

如果某个方法是静态的,它的行为也不具有多态性。

25.初始化的实际过程:1)在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。

2)如前所述那样调用基类构造器,此时,调用被覆盖后的方法(要在调用子类构造器之前调用)。

3)按照声明的顺序调用成员的初始化方法。

4)调用导出类的构造器主体。

编写构造器时有一条有效的准则:“用尽可能简单的方法使对象进入正常状态;如果可以的话,避免调用其他方法”。

在构造器内唯一能够安全调用的那些方法是基类中的final方法(也适用于private 方法,它们自动属于final方法)。

这些方法不能被覆盖。

26.一条通用的准则是:“用继承表达行为间的差异,并用字段表达状态上的变化”。

27.一个内部类的对象能访问其外围对象的所有成员,还拥有其外围类的所有元素的访问权。

在内部类中,如果你需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this,(outerclassout=outerclass.this)。

有时你可能想要告知某些其他对象,去创建其某个内部类的对象,可以在new表达式中提供对其他外部类对象的引用,需要使用.new语法(outerclassout=newouterclass,outerclass.Innerclass inner=out.newInnerclass())。

在拥有外部类对象之前是不可能创建内部类对象的,但是,嵌套类(静态内部类)除外。

如果定义一个匿名内部类,并希望它使用一个在其外部定义的对象,那么其参数引用必须是final的。

匿名类的实例初始化的实际效果就是构造器,而且你不能重载实例初始化方法,它可以扩展类,也可以实现接口,但是实现接口,也只能实现一个接口。

28.嵌套类(静态内部类):1)要创建嵌套类的对象,并不需要其外围类的对象;2)不能从嵌套类的对象中访问非静态的外围类对象。

30.为什么需要内部类:1)每个内部类都能独立继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

2)内部类可以更好的实现“多重继承”。

3)内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。

4)在单个外围类中,可以让多个内部类以不同的方式实现同一个接口或继承同一个类。

5)创建内部类对象的时刻并不依赖于外围类对象的创建。

6)内部类并没有令人迷惑的“is-a”关系,它是一个独立的实体。

31.闭包:它是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。

通过内部类提供闭包的功能是优良的解决方案。

使用局部内部类而不使用匿名内部类的的理由是需要不止一个该内部类的对象,或者需要一个已命名的构造器。

相关主题