摘要:
多态多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。它不但能改善代码的组织结构和可读性,还能创建可扩展的程序。封装通过合并特征和行为来创建新的数据类型,‘实现隐藏’通过将细节私有化把接口和实现分离开来。多态的作用是消除类型之间的耦合关系。多态允许同一基类产生的不同子类之间根据方法的行为不同展现出差别(通过子类覆盖父类的方法实现),而这些方法的调用方式相同。 应用多态,我们所做的代码修改,不会对程序员中其他不应受到影响的部分产生破坏。它帮助我们将改变的事物和未变的事物分离开来。再论向上转型 把对某个对象的引用视为对其基类型的引用的做法称为向上转型(在继承树的画法中,基类放置在上方)。 阅读全文
摘要:
组合编译器并不是简单的为每一个引用都创建默认对象,这样可以减少很多不必要的负担。如果想初始化这些引用,可以在如下位置进行: 1 在定义对象的地方 2 在类的构造器中 3 在使用对象之前(惰性初始化) 4 使用实例初始化继承创建类时总是在继承,若未明确指出从其他类继承,则默认继承Object。其他包中的继承类只能访问父类的public成员和方法,一般将父类成员设为private,方法设为public.在继承类中可以调用父类的方法,方法名相同时,前面加super关键字进行调用。从外部看,导出类像是一个与基类具有相同接口的新类,或许还会有额外的方法和域,但继承并不只是复制基类的接口。当创建了一个导出 阅读全文
摘要:
目的把变动的事物和不变的事物区分开来,类库的消费者才能使用。包:库单元编写Java源代码文件时(编译单元:一个.java文件),每个编译单元只有一个public class,且名称与文件名相同,编译单元上的其他类主要为此public类服务,在包外部无法看到。权限取得对某成员的访问权的途径:1 设置改成员为public。各处都可以访问。2 不加权限修饰符,将其他类放入同一个包中,通过包访问权访问。3 继承的子类可以访问父类的public protected。4 提供get set方法。private public class Test { private Test(){} ... 阅读全文
摘要:
方法重载重载的原因:1)相同的方法名可包含不同的含义,不能要求具有细微差别的方法都具有不同的方法名。2)构造器名由类名决定,只能由一个构造器名,想用多种方式创建一个对象,必须实现重载。每个重载的方法必须有独一无二的参数类型列表。参数类型列表包括类名和方法的形参列表,不包含返回值类型。因为有时你并不关心方法的返回值,想要的只是方法调用的其他效果(为了副作用而调用),这时你可能会调用方法而忽略其返回值。如void f() {}; int f() {},当调用f()时则区分调用的是哪个方法。涉及基本类型的重载: 如果传入的数据类型小于方法中声明的形参类型,实际数据类型就会提升。char型不同,如果无 阅读全文
摘要:
逻辑 java不允许将一个数字作为布尔值使用。迭代while do-while的唯一区别是do-while中的语句至少会执行一次。for(;;)三个部分都可以为空,等同于while(true),java中唯一用到逗号操作符的就是for循环的控制表达式。任何返回一个数组的方法都可以使用foreach,foreach还可用于任何Iterable对象。语法为int f[]=new int[10]; ....... for(inti:f)跳转在任何迭代语句的主体部分,都可用break和continue控制循环的流程。可搭配标签使用实现goto的效果。label1: out-iteration{ in. 阅读全文
摘要:
1.1 抽象过程所有编程语言都提供抽象机制。人们能解决的问题的复杂性直接取决于抽象的类型和质量。 1 建立机器模型和实际待解问题的模型之间的关联:费力、难以编写 2 针对待解问题建模:针对特定问题是好方案、但局限性太强。 3 面向对象方式:程序可以通过添加新类型的对象使自身适用于某个特定问题。当阅读描述解决方案的代码时,也是在阅读问题的表述。面向对象的基本特性 1 万物皆为对象 2 程序是对象的集合,对象之间通过发送消息来通信。 3 每个对象中可包含其他对象,可构建复杂的体系。 4 每个对象都拥有其类型 5 某一特定类型的所有对象都可以接收同样的消息。1.2 每个对象都有一个接口可以创建某一类 阅读全文
摘要:
用引用操作对象 在Java中,一切都被视作对象,因此可采用单一固定的语法,但操纵的标识符实际上是对象的一个引用(reference)。 拥有一个引用,并不一定需要有一个对象和它关联,如 String s; 此处创建的只是引用,而不是对象。如果此时向s发送一个消息,就会返回一个运行时错误,因为s并未与任何事物关联。因此,创建一个引用的时候便进行初始化是更安全的做法。数据存储位置 1)寄存器最快,位于处理器内部,数量有限,不能直接控制。 2)堆栈位于通用RAM中,快速有效,堆栈指针向下移动,则分配新的内存,向上移动,则释放那些内存,因此必须知道存储在堆栈内所有项的生命周期,限制了灵活性。Java的 阅读全文
摘要:
java操作符 几乎所有的操作符都只能操作基本类型,但"=","==","!="可以操作所有对象。String类支持"+","+="。赋值 对对象进行操作时,操作的是对对象的引用。所以,将一个对象赋值给另一个对象,实际上是将引用从一个地方复制到另一个地方。如c=d,则c和d都指向原先d指向的对象。算术操作符 %求余数,/ 整数除法会直接去掉结果的小数位,而不是四舍五入(Math.round())自动递增和递减 ++i(前缀递增)和--i先执行计算,再生成值,i++和i--先生成值,再执行运算。关 阅读全文
摘要:
参考:java.io包详细解说decorator的结构如下:MyInterface|_______|_______||MyclassDecorator____|_____||DecoratorADecoratorBdecorator的目的是在不改变任何原有的类的基础下,添加新的功能(你可以理解为书上说的灵活性)。其中Myclass是你要扩展的类,DecoratorA跟DecoratorB封装了你要扩展的功能,并保存有一个MyInterface的引用。考虑以下代码:myInterface是myClass的接口,只声明了一个方法print(),myClass实现了该方法:public interf 阅读全文