Java编程思想(前十章)

Java编程思想

  • 有C++编程基础的条件下, 前10章可以快速过一下,都是基本语法,不需要花太多时间. 着重中后段的一些章节,类型信息、泛型、容器、IO、并发等.
  • 中文翻译版
  • 阅读地址
  • 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步.
  • 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我.

对象入门

  • 类的继承一般使用‘统一标记法‘(UML图)来画继承的图.
  • 在面向对象的程序中, 通常要用到上溯造型(向上转型)的技术, 需要动态绑定.
    • Polymorphism(多态性). --- 通过动态绑定实现.
  • Java中使用abstract实现基类的抽象.
  • 复用的具体实现:
    • 组合(composition): 使用现有的类合成新的类. --- has-a的关系.
    • 聚合(aggregation): 动态发生的组合.
  • Java中动态绑定是默认行为, 不需要添加额外的关键字实现多态.
  • 单根继续保证所有对象都具备某些功能.
  • Java的容器库: List用于存储序列, Map关联数组, Set每种对象类型只持有一个.
  • Java中也支持泛型.
  • Java完全采用了动态内存分配方式, 通过new来构建一个对象. 垃圾回收机制可自动发现对象合适不再被使用, 并继而销毁它.
    • 垃圾回收机制提供了更高层的保障, 可以避免暗藏的内存泄漏问题.
    • Java的垃圾回收器被设计用来处理内存释放问题(不包括清理对象的其他方面).
  • Java的并发是内置于语言中的, 具有大量额外的库支持.
  • 超文本标记语言HTML(HyperText Markup Language).

一切都是对象

  • 尽管Java是基于C++的, 但是相比之下, Java是一种更纯粹的面向对象设计语言.

用引用操作对象

  • 一切都被视为对象, 操作的标识符实际上采用的是对象的一个引用(reference).
  • 创建一个引用的同时便进行初始化操作.
  • 通过new操作符(关键字)来实现一个新的对象的创建, 并把它和一个引用进行关联.
  • 五个不同的地方可以进行数据存储:
    • 寄存器: 最快的存储去, 处理器内部.
    • 堆栈: 位于通用RAM(随机访问存储器)中, 堆栈指针下移分配新的内存, 上移释放内存, Java中的对象引用一般都存在堆栈中.
    • 堆: 通用的内存池(也位于RAM区), 用于存放所有的Java对象. 编译器不需要直到堆中对象的生存期.
    • 常量存储: 直接存放在代码内部, 这样做它们永远不会被改变, (ROM)只读存储器.
    • 非RAM存储, 数据完全存活于程序之外, 将不受程序的任何控制, 流对象(将对象转化为字节流)和持久化对象(对象被放在磁盘上).
    • Java内部的基本类型(内置类型)一般不用new来创建, 而是创建一个自动变量, 这个变量直接存储其值, 并置于堆栈中, 这样使用更加高效.
  • Java程序中类型所占空间大小的不变性是它更具有可移植性的原因之一.
  • Java中自动包装功能可以将基本类型转换为包装器类型, 也可以方向转换.
  • Java提供了两个高进度计算的类: BigInterger(任意精度的整型)和BigDecimal(任意精度的浮点数).
  • Java确保数组会被初始化, 而且不能在它的范围之外被访问, 运行时会检查下标.
    • 数组引用被初始化为null, 数组所占内存被全部置零.

永远不需要销毁对象

  • 作用域, 作用域决定了在其内部定义的变量名的可见性和声明和生命周期.
  • Java是一种自由格式(freee-form)的语言, 空格, 制表符, 换行都不会影响程序的执行结果.
  • 方法, 参数和返回值: Java中的方法只能作为类的一部分来创建, 方法只有通过对象才能被调用.
  • 名字可见性. 运用其他构件import Java.util.*.
    • static关键字: 为某种特定域分配单一存储空间, 不考虑究竟要创建多少对象, 甚至根本不创建对象.

      • 希望某个方法不与包含它的类的任何对象关联在一起, 即使没有创建对象也可以使用这个方法.
  • Java的命名风格中, 类名的首字母要大写, 不用下划线分割, 驼峰代码风格, 标识符的第一个字母采用小写.

操作符

  • Java中更简单的打印语句: System.out.println("Rather a lot to type");.
  • 静态导入(static import)可以创建一个小类库来简化打印语句的编写.
  • 直接常量: 在后缀字符标志其类型, L(l)代表long, F(f)代表float, D(d)代表double. 指数记数法(1.39e-43f).
  • Java中类型转换是一种比较安全的操作, 截尾和舍入.

控制执行流程

  • if-else, while, do-while, for, return, break, switch.
  • Java并不支持goto语句.

访问权限控制

  • 如何把变动的事物与保持不变的事物区分开来.
  • public, protected, 包访问权限(没有关键词)和private.
  • Java的标准发布中有一个工具库, 它被组织在java.util名字空间之下.

包:库单元

  • 当编译一个.java文件时, 在.java文件中的每个类都会有一个输出文件, 而该输出文件的名称与.java文件中每个类的名称相同, 只是多了一个后缀名.class.
  • Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR, 使用Java的jar文档生成器)的.class文件.
    • Java解释器负责这些文件的查找, 装载和解释.
  • 类库实际上是一组类文件. --- 每个文件都有一个public类, 以及任意数量的非public类.
    • 每个文件都有一个构建, 如果希望这些构件从属于同一个群组, 就可以使用关键字package.
    • 如果使用package语句, 它必须是文件中除注释以外的第一句程序代码.
  • package和import关键字允许你做的, 是将单一的全局名字空间分割开, 使得无论多少人使用Internet以及Java开始编写类, 都不会出现名称冲突问题.
  • 创建独一无二的包名: 一个包并没有把被打包的东西包装成一个单一的文件.
    • 将一个特定包的所有.class文件都置于一个目录下.
    • package名称的第一部分是类的创建者的反顺序的Internet域名.
  • Java解释器的运行过程:
    • 找出环境变量CLASSPATH.
    • 得到路径与CLASSPATH中的各个不同的项, 解释器就从这些目录中查找相关的.class文件(包括标准目录).
  • Java中没有条件编译功能, import能够切换开关并产生不同的行为.
  • 包的名称对应目录路径.
  • 包访问权限:
    • friendly: 表示当前的包中, 所有其他类对那个成员都有访问权限, 而对其他包的所有类都是private.
    • 同一个包中的类可以相互访问(public方法).
    • 提供访问器(accessor)和变异器(mutator)方法(也称作get/set方法).
  • ubuntu中添加路径的方法: java -cp path1:path2:.
    • javac -cp mindview.jar;. HelloWorld.javajavac -cp .:../../../net.mindview.jar *.java.
    • java -cp mindview.jar;. HelloWorldjava -cp .:../../../net.mindview.jar Assignment.
    • -cp(-classpath)一定要包含当前路径‘.‘.
    • 编译一个包的时候一定要加入一个-d .选项, 把所有的.java输出文件按照类的结构重新组织.
      • javac -cp .:../../../net.mindview.jar -d . *.java cookie2/Cookie.java dessert/Cookie.java mypackage/MyClass.java.
  • 访问权限的控制常被称为是具体实现的隐藏.
    • 每个单元都有单一的公共接口, 用public类来表现.
    • public类的名称必须完全与该编译单元的文件名相匹配, 包括大小写.
    • 编译单元完全不带public类也是可以的, 而且可以随意对文件命名.

复用类

  • 直接在自定义的类中声明其他类型.
  • 在派生类名称后紧跟关键字extends, 再接基类. --- 自动得到基类中所有的域和方法.
  • 用关键字super显示地编写调用街垒构造器的语句, 并配以适当的参数列表.
  • 将清理动作置于finally子句之中, 以防异常的出现.
    • final关键字: 数据, 方法, 和类.

      • final 数据:

        • 一个永不改变的编译时常量; --- 必须是基本数据.
        • 一个在运行时被初始化的值, 而不希望它被改变.
        • 空白final是指被声明为final但又未给定初值的域.
      • final 方法
        • 把方法锁定, 以防任何继承类修改它的含义.
        • 为了效率的考虑.
      • final 类:
        • 不打算继承该类. 也不允许别人这么做.
  • Java采用加载的一种方式来执行程序.
    • 类的代码在初始使用时才会被加载.

多态

  • 把某个对象的引用视为对其基类的引用的做法被称为向上转型.

接口

  • 接口和内部类提供了一种将接口与实现分离的更加结构化的方法.
  • 抽象类和抽象方法. --- interface关键字进行声明.
  • 完全解耦. --- 需要将所有的接口名都置于implements关键字之后. 并用逗号将它们一一隔开.
  • 通过继承来扩展接口.

内部类

  • 可以将一个类的定义放在另一个类的定义内部, 这就是内部类.
  • 连接到外部类.
  • 使用.this和.new.
  • 内部类与向上转型.
  • 在方法和作用与内的内部类.
  • 匿名的内部类.
  • 嵌套类.
  • 每个内部类都能独立地继承自一个接口的实现, 所以无论外围类是否已经继承了某个接口的实现, 对于内部类都没有影响.
  • 闭包是一个可调用的对象, 它记录了一些信息, 这些信息来自于创建它的作用域.
  • 编译的时候用$符标识内部类.

原文地址:https://www.cnblogs.com/longjiang-uestc/p/10713777.html

时间: 2024-10-16 05:26:48

Java编程思想(前十章)的相关文章

看java编程思想 前两章 总结

重点词是: 对象. java 是一个面向对象编程的过程,在java中万物都是对象,为什么要这么设计呢? oop面向对象编程:对于管理人员 这是一个更快的更廉价的开发和维护的过程:对设计人员则是建模简单思路清晰,让我们思考对象的时候需要形象的思维去. 对象是一种抽象的描述,也可以说在java中一切都是对象.其实操作对象的仅仅是他的引用,用new不是创建对象,而是创建对象的引用,当在一个作用域里面用new创建对象,引用的作用区域就是那个花括号,但是引用指向的类型对象仍然存在内存空间中,但是java用

Java编程思想---第十章 内部类(下)

第十章 内部类(下) 10.9 内部类的继承 因为内部类的构造器必须连接到指向其外围类对象的引用,所以在继承内部类的时候事情会变得有些复杂,问题在于那个指向外围类对象的引用必须被初始化,而在导出类中不再存在可连接的默认对象,要解决这个问题,必须使用特殊的语法来明确说清他们之间的关联: class WithInner { class Inner {} } public class InheritInner extends WithInner.Inner { InheritInner(WithInn

Java编程思想---第十章 内部类(上)

第十章  内部类(上) 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,但内部类与组合是完全不同的概念. 10.1 创建内部类 创建内部类的方法就是,把类的定义置于外围类的里面: public class Parcel1 { class Contents { private int i = 11; public int value() { return i; } } class Destina

1.JAVA 编程思想——对象入门

对象入门 欢迎转载,转载请标明出处:    http://blog.csdn.net/notbaron/article/details/51040219 如果学JAVA,没有读透<JAVA 编程思想>这本书,实在不好意思和别人说自己学过JAVA.鉴于此,蛤蟆忙里偷闲,偷偷翻看这本传说中的牛书. 面向对象编程OOP具有多方面吸引力.实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.已于维护的设计方案. 这些描述看上去非常吸引人的,不过蛤蟆还是没啥印象(至少到

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla

39.JAVA编程思想之外篇——JAVA图形化设计精简大全一文覆盖

39.JAVA编程思想之外篇--JAVA图形化设计精简大全一文覆盖 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51204948 目录 Java图形化界面设计--容器(JFrame)...1 Java基本类(JFC)...1 l     AWTAbstract Window Toolkit(AWT)抽象窗口工具包... 2 l     Swing包... 2 l     AWT和Swing的区别... 6 Swing基本框

61.JAVA编程思想——共享有限资源

61.JAVA编程思想--共享有限资源 可将单线程程序想象成一种孤立的实体,它能遍历我们的问题空间,而且一次只能做一件事情.由于只有一个实体,所以永远不必担心会有两个实体同时试图使用相同的资源,就象两个人同时都想停到一个车位,同时都想通过一扇门,甚至同时发话. 进入多线程环境后,它们则再也不是孤立的.可能会有两个甚至更多的线程试图同时同一个有限的资源.必须对这种潜在资源冲突进行预防,否则就可能发生两个线程同时访问一个银行帐号,打印到同一台计算机,以及对同一个值进行调整等等. 1     资源访问

63.JAVA编程思想——死锁

63.JAVA编程思想--死锁 由于线程可能进入堵塞状态,而且由于对象可能拥有"同步"方法--除非同步锁定被解除,否则线程不能访问那个对象--所以一个线程完全可能等候另一个对象,而另一个对象又在等候下一个对象,以此类推. 这个"等候"链最可怕的情形就是进入封闭状态--最后那个对象等候的是第一个对象!此时,所有线程都会陷入无休止的相互等待状态,大家都动弹不得.我们将这种情况称为"死锁".尽管这种情况并非经常出现,但一旦碰到,程序的调试将变得异常艰难

62.JAVA编程思想——线程堵塞

62.JAVA编程思想--线程堵塞 一个线程可以有四种状态: (1) 新(New):线程对象已经创建,但尚未启动,所以不可运行. (2) 可运行(Runnable ):意味着一旦时间分片机制有空闲的CPU 周期提供给一个线程,那个线程便可立即开始运行.因此,线程可能在.也可能不在运行当中,但一旦条件许可,没有什么能阻止它的运行--它既没有"死"掉,也未被"堵塞". (3) 死(Dead):从自己的run()方法中返回后,一个线程便已"死"掉.亦可