java编程思想读书笔记2
六:访问权限控制
1.java中的4种访问制权限: 
(1).public:最大访问控制权限,对所有的类都可见。
(2).protect:同一包可见,不在同一个包的所有子类也可见。 
(3).default:包访问权限,即同一个包中的类可以可见。默认不显式指定访问控制权限时就是default包访问控制权限。 
(4).private:最严格俄访问控制权限,仅该类本身可见,对外一切类都不可以访问(反射机制可以访问)。
七:复用类
1:用super关键字表示超类。
2:子类会在构造器中自动调用基类的构造器来执行初始化。构建过程是从基类向外扩散的。
3:final:
final数据:一个永不改变的编译时常量。一个在运行时被初始化的值,而你不希望他被改变。
final参数:java容许在参数列表中以声明的方式将参数指明为final。
final方法:保持方法不被修改。所有的private的方法都隐式的指定为final的。
final类:没有子类。组合和继承之间的选择
- 对final关键字的误解 当final修饰的是基本数据类型时,它指的是数值恒定不变(就是编译期常量,如果是static final修饰,则强调只有一份),而对对象引用而不是基本类型运用final时,其含义会有一点令人迷惑,因为用于对象引用时,final使引用恒定不变,一旦引用被初始化指向一个对象,就无法再把它指向另一个对象。然而,对象其自身却是可以被修改的,Java并未提供使任何对象恒定不变的途径(但可以自己编写类以取得使对象恒定不变的效果),这一限制同样适用数组,它也是对象。
 - 使用final方法真的可以提高程序效率吗? 将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。只要编译器发现一个final方法调用,就会(根据它自己的判断)忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理)。相反,它会用方法主体内实际代码的一个副本来替换方法调用。这样做可避免方法调用时的系统开销。当然,若方法体积太大,那么程序也会变得雍肿,可能受到到不到嵌入代码所带来的任何性能提升。因为任何提升都被花在方法内部的时间抵消了。
 
在最近的Java版本中,虚拟机(特别是hotspot技术)能自动侦测这些情况,并颇为“明智”地决定是否嵌入一个final 方法。然而,最好还是不要完全相信编译器能正确地作出所有判断。通常,只有在方法的代码量非常少,或者想明确禁止方法被覆盖的时候,才应考虑将一个方法设为final。
类内所有private 方法都自动成为final。由于我们不能访问一个private 方法,所以它绝对不会被其他方法覆盖(若强行这样做,编译器会给出错误提示)。可为一个private方法添加final指示符,但却不能为那个方法提供任何额外的含义。
4:继承与组合
- 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做。
 - 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形。即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口。为取得此效果,需要在新类中嵌入一个现有类的private对象。但有时,允许类的用户直接访问新类中的组合成分是极具意义的,即将成员对象声明为public。如果成员对象自身都隐藏了具体实现,那么这种做法是安全的。当用户能够了解到你正在组装一组部件时,会使得端口更加易于理解。比如Car对象可由public的Engine对象、Wheel对象、Window对象和Door对象组合。但务必要记得这仅仅是一个特例,一般情况下应该使域成为private。
 - 在继承的时候,使用某个现有类,并开发一个它的特殊版本。通常,这意味着你在使用一个通用类,并为了某种特殊需要而将其特殊化。稍微思考一下就会发现,用一个“交通工具”对象来构成一部“车子”是毫无意义的,因为“车子”并不包含“交通工具”,它仅是一种交通工具(is-a关系)。
 - “is-a”(是一个)的关系是用继承来表达的,而“has-a”(有一个)的关系则是用组合来表达的。
 - 到底是该用组合还是继承,一个最清晰的判断方法就是问一问自己是否需要从新类向基类进行向上转型,需要的话就用继承,不需要的话就用组合方式。
 
八:多态
在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特性。 多态通过分离“做什么”和“怎么做”,从另一角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性,还能够创建“可扩展的”程序,即无论在项目最初创建时,还是在需要添加新功能时,都可以进行扩充。 “封装”通过合并特征和行为来创建新的数据类型,“实现隐藏”则通过细节“私有化(private)”将接口和实现分离开来,而多态的作用则是消除类型之间的耦合关系。继承允许将对象视为自己本身的类型或它的基类型进行处理,这种能力极为重要,因为它可以使多种类型(从同一基类导出而来的)被视为同一类型进行处理,而同一份代码也就可以毫无差别地运行在这些不同类型之上了。多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要它们都是从同一基类导出而来的。这种区别是根据方法行为的不同来而表示出来的,虽然这些方法都可以通过同一个基类来调用。
》Java中除了static方法与final方法,其他所有的方法都是后期绑定。
》只有非private方法才可以被覆盖。
》静态方法是与类,而并非与单个对象相关联的。
》构造器不具有多态性(他们实际上static方法,只不过static声明是隐式的)。
》对象调用构造器的顺序:
●调用基类构造器,这个步骤会不断的反复递归下去 。
●按声明顺序调用成员的初始化方法。
●调用导出类构造器的主体。
九:接口
》接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
》如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。
》接口是实现多重继承的途径。
》总结
1、java提供了实现抽象类的方法,包含仅有声明而没有方法主体的函数的类称之为抽象类,其函数声明如:abstract void f().
2、interface产生的则是完全抽象类。接口的声明形式为:
interface xx
{
//.................
}
接口中的方法默认都为public
3、Java实现多重继承,可以通过对于多个接口的实现达到这种效果。其实现如:
class A implements B,C,D
{
}
4、经验,优先选择类而不是接口,从类开始,如果接口的必须行变得非常明确,那么就进行重构。接口是一种重要的工具,但是他们容易被滥用。
5、使用接口的两点原因:
a、为了能够向上转型为多个基类,带来灵活性。
b、防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。
6、接口之间也可以互相继承,从而扩展接口方法的种类。
7、在将不同的接口相互组合时,要尽量避免使用相同的方法名,因为这样会导致可读性混乱,以及编译错误。
十:内部类
》可以将一个类的定义放在另一个类的定义内部。这就是内部类(内部类与组合是完全不同的)。
》
java编程思想读书笔记2的更多相关文章
- JAVA编程思想读书笔记(五)--多线程
		
接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...
 - JAVA编程思想读书笔记(四)--对象的克隆
		
接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...
 - JAVA编程思想读书笔记(三)--RTTI
		
接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...
 - JAVA编程思想读书笔记(二)--容器
		
接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2 ...
 - Java编程思想读书笔记之内部类
		
现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始 ...
 - Java编程思想读书笔记(一)【对象导论】
		
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
 - <Java编程思想>读书笔记(1)-对象导论、一切都是对象
		
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...
 - Java编程思想读书笔记(二)【一切都是对象】
		
begin 2018年1月9日17:06:47 第二章 一切都是对象 Java语言假设我们只进行面向对象的程序设计. 2.1 用引用操纵对象 每种编程语言都有自己的操纵内存元素的方式 操纵内存元素的方 ...
 - Java编程思想读书笔记
		
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
 - Java编程思想读书笔记--第14章类型信息
		
7.动态代理 代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象.这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色. 什么是代理模式? ...
 
随机推荐
- Java学习心得之 Linux下搭建JavaWeb环境
			
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建JavaWeb环境 1. 前言2. Java安装3. t ...
 - 如何在Infraworks中创建多树种组成的森林
			
在Infraworks 2014中,你可以有shp文件导入生成树木和森林,也可以直接在模型中规划一片区域作为森林.美中不足的就是,这些充其量叫树林不能叫森林,因为他们的样式都是一个树种,而真正的森林肯 ...
 - [转]MOSS通过此命令注册模板,web应用程序可以根据stp模块生成网站集
			
注:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin stsadm –o add ...
 - .framework使用注意、静态库配置及构架合成
			
使用注意: 1.项目中使用的framework中包含了资源文件时,需要手动添加该framework中的资源文件 2.由于动态库(framework默认生成为动态库)不能上架,我们在生成的时候需要修改为 ...
 - Android 沉浸式状态栏 实现方式二 ( 更简单 )
			
以前写过一个沉浸式状态栏 的实现方式 Android 沉浸式状态栏 实现方式一 现在有个更为简单的实现方式 . 相关链接 http://www.apkbus.com/forum.php?mod=vie ...
 - iOS 滑动隐藏导航栏-三种方式
			
/** 1隐藏导航栏-简单- */ self.navigationController.hidesBarsOnSwipe = YES; /** 2隐藏导航栏-不随tableView滑动消失效果 ...
 - iOS 学习 - 12.NSMutableAttributedString 计算高度
			
计算 NSMutableAttributedString 高度,必须要有两个属性 -(void)test{ UILabel *label = [[UILabel alloc]initWithFrame ...
 - 委托  C#
			
这些就是自己的理解. 委托的用处就是把方法传递给其他方法. 1委托的使用更类差不多,也 是需要先定义再实例化. 2Action<T>和Func<T>委托 3多播委托 4.匿名方 ...
 - ThinkPHP  空方法 显示
			
TP如果 一个控制器 没有一个方法 ,只要有一个模版,URL会对应显示模版名称. 例子 http://localhost/yiyunmap/map/test map控制器 并没有 test方法 但是 ...
 - MPlayerX——MAC OS 最好用的播放器
			
MPlayerX真是一个不错的软件,它真的可以称得上在MAC OS里最好用的播放器,它功能强大,可以播放你所知道的任何格式的视频和音频文件.他的选项非常丰富,可以自定义设置的东西很多,但又不失简洁的风 ...