上海龙凤1314 shlf

java编程思想读书笔记

学人智库 时间:2018-01-16 我要投稿
【gdyhdog.com - 学人智库】

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。大学网整理了JAVA的编程思想读书笔记,欢迎大家阅读。

java编程思想读书笔记

上海龙凤1314 shlf对象具有状态,行为,标识.对象的五个基本特性:

上海龙凤1314 shlf万物皆对象,抽取待求解问题的任何概念化构件,将其表示为程序中的对象

程序是对象的集合,他们通过发送消息来告知彼此所要做的

上海龙凤1314 shlf每个对象都有自己的由其他对象所构成的存储,创建包含所有对象的包的方式来创建新类型的对象

每个对象都拥有其类型

某一特定类型的所有对象都可以接收同样的消息

1。java还有个"缺省"的访问权限,如果你没用public、protected、private的话,那就是指它了。通常把它称为package访问权限。因为同属这个package的类可以访问这个package中其它类的"缺省"权限的成员,但是出了这个package,它们就都是private的了。

上海龙凤1314 shlf2。多态性,处理类系的时候,通常你不用把它当作某个具体的类型,只要把它当作基类对象就可以了,即把泛型的基类当作派生类来用。非oop的编译器的做法是前绑定,即编译器会产生那个名字的函数调用,而连接器负责将这个调用解析成须执行的代码的绝对地址。oop的编译器用了后绑定,即当你向某个对象送了一个消息后,不到运行时,系统不能确定到底调用哪段代码。java用存储在对象中的信息来计算方法的地址,因此每个对象的运行都会不同。后绑定是java的缺省行为,c++中必须用virtual声明。

3。abstract关键词声明类为抽象类,编译器会阻止任何人创建abstract类的对象,而只是把其派生类的对象上传给它。abstract也可以声明方法,表示这个类所派生的所有类都有这个方法,但是它的实现不在这里。abstract方法只能存在于abstract类中。

4。interface关键词是对abstract类的概念的深化,它不允许你实现任何方法,只作为接口使用.可以继承多个接口,java中无类多重继承。

5。c++支持的变量有自动、静态、寄存器和堆,java只支持堆变量,每次创建对象的时候都要用new来动态分配堆内存。

6。容器和迭代器:容器:c++标准模板类库stl = java标准类库的容器类,迭代器:将基于不同数据结构的容器抽象为一个简单线性序列的类。

上海龙凤1314 shlf7。java是单根继承体系,object作为最终基类使所有对象都具有某些基本操作。单根继承和系统通过reference操控对象,使垃圾回收器可以释放堆内存。

8。java容器只持有object对象,单根继承使它能持有任何对象上传只要把对象的reference直接放入即可,取对象时,必须知道它原有的类型,从容器中取出对象的reference然后强制转换为原因类型(下传:由基类到其派生类)。

9。参数化类型:能够根据需要由编译器自动指派类型的类,c++的模板template即参数化类型。java暂不支持

10。异常是一种能从错误发生的地方被抛出的对象,并被能解决这类问题的异常处理程序所捕获,异常肯定能得到处理,并且能够从错误状态下恢复。java的异常处理是从底层开始的,而且还不能不用,否则就不能编译通过。

上海龙凤1314 shlf11。java语音内置了多线程支持,线程被表示为对象,java还有一定的资源锁定功能,可以通过synchronized关键字锁定对象内存。

12。持久性:java可以通过对象的序列化或java数据对象来实现把对象从磁盘中存储和提取。

上海龙凤1314 shlf13。传统w/s:浏览器上送web服务器的数据由web服务器上的通用网关接口程序CGI处理,常用语言perl、python、C++等。

上海龙凤1314 shlf14。客户端编程:插件:可以为浏览器添加新的功能,甚至创造新的客户端编程语言。脚本语言:把客户端的源代码直接嵌入到html页面中,html页面显示的时候自动激活插件解释这些程序。常用脚本语言javascript、vbscript、tcl/tk等。java:可以通过applet和java web start进行客户端编,applet是一个只能运行在web浏览器里的小程序,applet是被编译过的代码,作为web页面的一部分自动下载,在被激活的时候开始运行。java web start分发在web浏览器外运行的独立程序。Activex操作上不受限制。

上海龙凤1314 shlf15。servlet和jsp是使人们转向使用java开发网站的主要原因。

java编程思想读书笔记

《Java编程思想》学习笔记

1——面向对象和JVM基础

上海龙凤1314 shlf1.java中的4种访问制权限:

(1).public:最大访问控制权限,对所有的类都可见。

(2).protect:同一包可见,不在同一个包的所有子类也可见。

(3).default:包访问权限,即同一个包中的类可以可见。默认不显式指定访问控制权限时就是default包访问控制权限。

上海龙凤1314 shlf(4).private:最严格俄访问控制权限,仅该类本身可见,对外一切类都不可以访问(反射机制可以访问)。

上海龙凤1314 shlf2.面向对象编程中两种对象组合方式——is-a 和 has-a:

(1).is-a组合:一个类继承具有相似功能的另一个类,根据需要在所继承的类基础上进行扩展。

上海龙凤1314 shlf优点:具有共同属性和方法的类可以将共享信息抽象到父类中,增强代码复用性,同时也是多态的基础。

缺点:子类中扩展的部分对父类不可见,另外如果共性比较少的时候使用继承会增加冗余代码。

上海龙凤1314 shlf(2).has-a组合:has-a组合是在一个类中引用另一个类作为其成员变量。 优点:可扩展性和灵活性高。在对象组合关系中应优先考虑has-a组合关系。 缺点:具有共性的类之间看不到派生关系。

3.多态:

在面向对象编程中,子类中拥有和父类相同方法签名的方法称为子类方法覆盖父类方法,当调用子类方法的某个操作时,不必明确知道子类的具体类型,只需要将子类类型看作是父类的引用调用其操作方法,在运行时,JVM会根据引用对象的具体子类类型而调用应该的方法,这就是多态。

多态的基础是java面向对象编程的晚绑定机制。编程中有如下两种绑定机制:

(1).早绑定:一般在非面向对象编程语言中使用,在程序编译时即计算出具体调用方法体的内存地址。

上海龙凤1314 shlf(2).晚绑定:面向对象编程语言中经常使用,在程序编译时无法计算出具体调用方法体的内存地址,只进行方法参数类型和返回值类型的校验,在运行时才能确定具体要调用方法体的内存地址。

上海龙凤1314 shlf4.java单继承的优点:

上海龙凤1314 shlf相比于C++的多继承,java只支持类的单继承,java中的所有类的共同基类是Object类,Object类java类树的唯一根节点,这种单继承有以下好处:

(1).单继承可以确保所有的对象拥有某种共同的特性,这样对于JVM虚拟机对所有的类进行系统级的操作将提供方便,所有的java对象可以方便地在内存堆栈中创建,传递参数也变的更加方便简单。

(2).java的单继承使得实现垃圾回收器功能更加容易,因为可以确保JVM知道所有对象的类型信息。

上海龙凤1314 shlf5.选择容器对象两个原则:

(1).容器所能提供不同的类型的接口和外部行为是否能够满足需求。

(2).不同容器针对不同的操作效率不同。

6.类型转换:

上海龙凤1314 shlfJava中有两种常见的类型转换:向上类型转换(upcast)和向下类型转换(downcast):

上海龙凤1314 shlf(1).向上类型转换(upcast):

向上类型转换是将子类对象强制类型转换为父类类型,经典用法是面向对象的多态特性。向上类型转换时,子类对象的特性将不可见,只有子类从父类继承的特性仍然保持可见,向上类型转换时编译器会自动检查是否类型兼容,通常是安全的。

(2).向下类型转换:

上海龙凤1314 shlf向下类型转换是将父类类型强制转换为子类类型,转换过后父类中不可见的子类特性又恢复可见性,向下类型转换时,编译器无法自动检测是否类型兼容,往往会产生类型转换错误的运行时异常,通常不安全。

上海龙凤1314 shlf7.java中5个存放数据的地方:

(1).寄存器(Registers):位于CPU内部,是速度最快的存储区,但是数量和容量有限。在java中不能直接操作寄存器。

(2).栈(Stack):栈位于通用随机访问存储器 (General random-access memory,RAM,内存) 中,通过处理器的栈指针访问,栈指针从栈顶向栈底分配内存,从栈底向栈顶释放内存。栈是仅次于寄存器的速度第二快的存储器,在java程序中,一般的8种 基本类型数据和对象的引用通常存放在栈内存中,不通过new关键字的字符串对象也是存放在栈的字符串池中。栈的优势是,存取速度比堆要快,仅次于寄存器, 栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

(3).堆(Heap):也是位于通用随机访问存储器 (General random-access memory,RAM,内存) 中的共享内存池。Java的堆是一个运行时数据区,类的对象从中分配空间,凡是通过new关键字创建的对象都存放在堆内存中,它们不需要程序代码来显式的 释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器 会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

(4).常量存储器(Constant storage):java中的常量是存放在系统内嵌的只读存储器中(read-only memory,ROM)的。

(5).非随机存储器(Non-RAM storage):对于流对象和持久化对象,通常存放在程序外的存储器,如硬盘。

上海龙凤1314 shlf8.javadoc只处理public和protected访问控制权限的文档注释,private和default权限的稳定注释将被忽略。

9.java中赋值运算:

基本类型赋值是直接复制值,赋值操作后,相互不影响。

上海龙凤1314 shlf引用类型赋值是复制引用值,相当于给对象取一个别名,赋值之后两个引用指向同一个引用对象,相互之间有影响。

在Java中,向方法传递引用类型参数会改变参数的值,不让参数受到影响的解决方法:在方法内首先先将引用克隆一份,然后操作克隆的对象。

10.移位运算:

左移运算符<<:将比特位左移指定位数,右边部分补0,左移一位相当于乘2。

右移运算符>>:将比特位右移指定位数,如果是正数,左边第一位(符号位)补0,其余位补0,如果是负数,左边第一位补1,其余位补0。右移一位相当于除2。

无符号右移运算符>>>:将比特位右移指定位数,不论是正数或者负数,左边移除位统统补0。

11.java中,比int类型小的原始类型(char、byte、short)进行数学运算或者位运算时,数据类型首先转换成int类型,然后进行相应的运算。

上海龙凤1314 shlf12.方法重载(overloading):方法同名,参数列表不同称为方法重载,注意方法的返回值类型不同不能作为方法重载。

13.java中的析构函数:

Java中没有像C/C++的析构函数,用来销毁不用的对象是否内存空间,只有以下三个方法用于通知垃圾回收器回收对象。

上海龙凤1314 shlf(1).finalize( )只是通知JVM的垃圾收集器当前的对象不再使用可以被回收了,但是垃圾回收器根据内存使用状况来决定是否回收。

finalize()最有用的地方是在JNI调用本地方法时(C/C++方法),调用本地方法的析构函数消耗对象释放函数。

上海龙凤1314 shlf(2). System.gc()是强制析构,显式通知垃圾回收器释放内存,但是垃圾回收器也不一定会立即执行,垃圾回收器根据当前内存使用状况和对象的生命周期自行决定是否回收。

上海龙凤1314 shlf(3).RunTime.getRunTime().gc()和System.gc()类似。

注意:这三个函数都不能保证垃圾回收器立即执行,推荐不要频繁使用。

上海龙凤1314 shlf14.垃圾回收器原理:

上海龙凤1314 shlf(1).引用计数(ReferenceCounting)垃圾回收算法:

一种简单但是速度较慢的垃圾回收算法,每个对象拥有一个引用计数器

(Reference Counter),当每次引用附加到这个对象时,对象的引用计数器加1。当每次引用超出作用范围或者被设置为null时,对象的引用计数器减1。垃圾回收 器遍历整个对象列表,当发现一个对象的引用计数器为0时,将该对象移出内存释放。

引用计数算法的缺点是,当对象环状相互引用时,对象的引用计数器总不为0,要想回收这些对象需要额外的处理。

上海龙凤1314 shlf引用计数算法只是用来解释垃圾回收器的工作原理,没有JVM使用它实现垃圾回收器。

上海龙凤1314 shlf引用计数的改进算法:

任何存活的对象必须被在静态存储区或者栈(Stack)中的引用所引用,因此当遍历全部静态存储区或栈中的引用时,即可以确定所有存活的对象。每当 遍历一个引用时,检查该引用所指向的对象,同时检查该对象上的所有引用,没有引用指向的对象和相互自引用的对象将被垃圾回收器回收。

上海龙凤1314 shlf(2).暂停复制(stop-and-copy)算法:

垃圾回收器的收集机制基于:任何一个存活的对象必须要被一个存储在栈或者静态存储区的引用所引用。

上海龙凤1314 shlf暂停复制的算法是:程序在运行过程中首先暂停执行,把每个存活的对象从一个堆复制到另一个堆中,已经不再被使用的对象被回收而不再复制。 暂停复制算法有两个问题:

a.必须要同时维护分离的两个堆,需要程序运行所需两倍的内存空间。JVM的解决办法是在内存块中分配堆空间,复制时简单地从一个内存块复制到另一个内存块。

上海龙凤1314 shlfb.第二个问题是复制过程的本身处理,当程序运行稳定以后,只会产生很少的垃圾对象需要回收,如果垃圾回收器还是频繁地复制存活对象是非常低性能的。

上海龙凤1314 shlfJVM的解决方法是使用一种新的垃圾回收算法——标记清除(mark-and-sweep)。 一般来说标记清除算法在正常的使用场景中速度比较慢,但是当程序只产生很少的垃圾对象需要回收时,该算法就非常的高效。

上海龙凤1314 shlf(3).标记清除(mark-and-sweep)算法:

上海龙凤1314 shlf和暂停复制的逻辑类似,标记清除算法从栈和静态存储区开始追踪所有引用寻找存活的对象,当每次找到一个存活的对象时,对象被设置一个标记并且不被回收,当标记过程完成后,清除不用的死对象,释放内存空间。

上海龙凤1314 shlf标记清除算法不需要复制对象,所有的标记和清除工作在一个内存堆中完成。

[java编程思想读书笔记]