第一章 对象入门

1.1 抽象的进步
  五大基本特征
1.2 对象的接口
  Light it = new Light();it.on();
1.3 实现方案的隐藏
  为什么要进行方法隐藏:
  1.第一个原因是防止程序员接触他们不该接触的东西——通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。
  2.进行访问控制的第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。
1.4 方案的重复使用: 继承
1.5 继承:重新使用接口
1.5.1 改善基础类:改变基础类一个现有的行为
1.5.2 等价与类似关系: 制冷机--->制冷机出故障,改进,新型的冷热两用空调;也就是,要在衍生类的基础上增添新功能。
1.6 多形对象的互换使用:理解向上造型
  doStuff(Shape s)){ s.erase(); s.draw();}
  ...
  doStuff(new Circle()); doStuff(new Line());

1.6.1 动态绑定 ---http://blog.csdn.net/u010697982/article/details/46128317理解,对总结要熟练于心

1.6.2 抽象的基础类和接口
  明白抽象类的目的;什么是抽象类;
1.7 对象的创建和存在时间---对比,垃圾回收器的作用。自动回收与手动回收的区别。
  1.7.1 集合与继承器
  如果事先不知道需要多少个对象,或者它们的持续时间有多长,那么也不知道如何保存那些对象。---集合的出现
  采用push或者add进行添加元素。
  集合元素的获取-----迭代器的使用。(即这里的继承器)
  1.7.2 单根结构
  在面向对象的程序设计中,由于 C++的引入而显得尤为突出的一个问题是:所有类最终是否都应从单独一个基础类继承。在 Java 中(与其他几乎所有 OOP 语言一样),对这个问题的答案都是肯定的,而且这个终级基础类的名字很简单,就是一个“Object”。单根结构   中的所有对象(比如所有 Java 对象)都可以保证拥有一些特定的功能。比如Object的基本方法如wait,notify等。
1.7.3 集合库与方便使用集合
  1. 下溯造型与模板/通用性
  向下造型-> Shape s = new Shape(); Circle c = (Circle)s; 若s与c之间不能进行强转,则会报异常转换异常ClassCastException(运行时异常)
  我们能不能创建一个“智能”集合,令其知道自己容纳的类型呢?这样做可消除下溯造型的必要以及潜在的错误。答案是肯定的
  泛型的理解--https://www.cnblogs.com/justinli/p/generic.html有待进一步研究。(书上并未提及,但是,泛型是有这个作用的)
1.7.4 清除时的困境:由谁负责清除?
  垃圾收集器“知道”一个对象在什么时候不再使用,然后会自动释放那个对象占据的内存空间。
  但垃圾收集器是一种特殊的问题,因为我们永远不能确定它什么时候启动或者要花多长的时间。这意味着在 Java 程序执行期间,存在着一种不连贯的因素。所以在某些特殊的场合,我们必须避免用它——比如在一个程序的执行必须保持稳定、连 贯的时候。
1.8 违例控制:解决错误
  理解java异常机制。如果没有自己写一些代码来正确地控制违例,就会得到一条编译期出错提示。
  对异常机制的理解--http://blog.csdn.net/huhui_cs/article/details/38817791
  检查异常(非运行时异常):当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
  要掌握5种常见的运行时异常。
  异常向上抛出,若不捕获,最终会如何处理?
  程序员面试宝典,详细介绍了finally与return之间的联系。---待总结。
1.9 多线程
  有些时候,中断对那些实时性很强的任务来说是很有必要的。假如界面有两个按钮,一个耗时长,一个耗时一般。如果不多线程,那么就是顺序执行,则必须等待耗时长的按钮执行完后才能执行下一个任务。而使用多线程后,两个任务可以同时执行。
  多线程必须注意一个问题:共享资源!--举例:两个线程不能同时访问一台打印机。---解决方式:synchronized 关键字,用它代表一把锁,所有线程在访问那个资源时都必须检查这把锁。
1.10 永久性
  在程序结束运行时,对象的“生存期”也会宣告结束。尽管这一现象表面上非常合理,但深入追究就会发现,假如在程序停止运行以后,对象也能继续存在,并能保留它的全部信息,那么在某些情况下将是一件非常有价值的事情。--一种期待。
1.11 Java和因特网
1.11.1 什么是 Web?
  1. 客户机/服务器计算
  单个服务器需要同时向多个客户提供服务。性能的问题显得尤为重要:可能会有数百个客户同时向服务器发出请求。
2. Web 是一个巨大的服务器
  最开始的时候,这是一个简单的单向操作过程。我们向一个服务器发出请求,它向我们回传一个文件,由于本机的浏览器软件(亦即“客户”或“客户程序”)负责解释和格式化,并在我们面前的屏幕上正确地显示出来。但人们不久就不满足于只从一个服务器传递网页。
  Web 浏览器的发展终于迈出了重要的一步:某个信息可在任何类型的计算机上显示出来,毋需任何改动。
1.11.2 客户端编程
  原来的方法是我们按下网页上的提交按钮(Submit);数据回传给服务器;服务器启动一个 CGI 程序,检查用户输入是否有错;格式化一个 HTML 页,通知可能遇到的错误,并将这个页回传给我们;随后必须回到原先那个表单页,再输入一遍。这种方法不仅速度非常慢, 也显得非常繁琐。
  解决的办法就是客户端的程序设计。
  1. 插件
  利用插件,程序员可以方便地为浏览器添加新功能,用户只需下载一些代码,把它们“插入”浏览器的适当位置即可。这些代码的作用是告诉浏览器“从现在开始,你可以进行这些新活动了”(仅需下载这些插入一次)。
  2. 脚本编制语言-----为什么呢?有待june-----
  脚本语言真正面向的是特定类型问题的解决,其中主要涉及如何创建更丰富、更具有互动能力的图形用户界面(GUI)。
  3. Java
  4. ActiveX
  假如你的程序同它的工作环境正常连接,它就能进入 Web 页,并在支持 ActiveX 的浏览器中运行。
  5. 安全
  自动下载和通过因特网运行程序听起来就象是一个病毒制造者的梦想。
  目前解决的办法是“数字签名”,代码会得到权威机构的验证,显示出它的作者是谁。
  6. 因特网和内联网
  若一个信息网络局限于一家特定的公司,那么在将 Web 技术应用于它之后,即可称其为“内联网”。更大的安全级别。
  若程序是在因特网上运行,由于无从知晓它会在什么平台上运行,所以编程时要特别留意,防范可能出现的编程错误。
  若程序是在内联网上运行,一旦发现错误,就可以马上改正。
1.11.3 服务器端编程
  涉及到对那个数据库的修改。这类服务器请求必须通过服务器端的一些代码进行,我们称其为“服务器端的编程”。
1.11.4 一个独立的领域:应用程序
1.12 分析和设计
  1.12.1 不要迷失
  1.12.2 阶段0:拟出一个计划
  先思考,再动手编代码。
  1.12.3 阶段1:要制作什么?
  应尽可能总结出自己系统的一套完整的“使用条件”或者“应用场合”。
1.12.4 阶段2:如何构建?
  统一建模语言UML
1.12.5 阶段3:开始创建
1.12.6 阶段4:校订
1.12.7 计划的回报
  没有计划的 50%以上的项目都会失败!
1.13 JAVA还是C++?
  C++执行速度比Java效率高。

原文地址:https://www.cnblogs.com/sunnyDream/p/8000504.html