面向对象的思维方法
从学 Java 才真正碰到 OOP。习惯用 C 的人,往往会嫌 Java 慢、代码长、一件小事要拆好多类。抵触很正常;真正别扭的,是不知道该怎么提炼类,一不小心又滑回过程式思路。 面向对象的精髓,是从现实世界的人类思维习惯出发:先谈业务要什么,再翻译成程序能懂的结构。封装的是业务逻辑,不是 sele…
从学 Java 才真正碰到 OOP。习惯用 C 的人,往往会嫌 Java 慢、代码长、一件小事要拆好多类。抵触很正常;真正别扭的,是不知道该怎么提炼类,一不小心又滑回过程式思路。 面向对象的精髓,是从现实世界的人类思维习惯出发:先谈业务要什么,再翻译成程序能懂的结构。封装的是业务逻辑,不是 sele…
输入输出(I/O)是程序与外部设备或其他计算机交互的操作:从键盘读、从本地或网络文件读、往外写。Java 把这些操作用流统一接口表示,程序设计更简单。 流(Stream)指输入输出时各部件之间的数据流动。按传输方向分成输入流与输出流。流里既可以是原始二进制,也可以是按某种格式编码后的数据。 一、输入…
Java 的 IO 可以按三个轴来记:方向(输入 / 输出)、数据单位(字节 / 字符)、功能(节点流 / 处理流)。四个抽象基类是 InputStream、OutputStream、Reader、Writer。 分类轴 一类 另一类 方向 输入流 输出流 数据单位 字节流 InputStream …
Java 程序靠控制语句调度程序流:语句可以是单独一条(如 c = a + b),也可以是花括号包起来的复合语句。语句块可以嵌套,层数不限。 定义类时类体必须用语句块;定义方法时方法体也必须用语句块。 类别 语句 要点 表达式 赋值、调用、new、声明、自增 表达式有返回值 分支 if / if-e…
Java 里的运算符和 C / C++ 几乎同一套:算术算出数值,关系 / 逻辑算出布尔值,位运算按二进制逐位处理,再加上三目条件运算符。先把类别记牢,再对照下面的表和图。 下表是总览,后面按类展开,并配上原文截图。 类别 结果类型 常见符号 算术 数值 + - * / % ++ -- 关系 / 逻…
类是对象的模板,抽象类和接口可以看成具体类的模板。接口从某种角度看是一种特殊的抽象类,相似处很多,选择时容易混。先看相同点,再看各自擅长什么。 使用引用变量时,尽量用类结构的抽象层,让方法的定义和实现分离,代码才能松散耦合。 对比 抽象类 接口 实例化 不能 new 不能 new 抽象方法 可以有,…
抽象类里可以有抽象方法,也可以有已经实现的方法;接口(interface)更“抽象”:传统上它规定一个类必须做什么,而不规定怎么做。 接口用 interface 声明,可以看成一种特殊的抽象类。Java 8 起接口也可以有 default / static 方法,Java 9 还可以有 privat…
自上而下的继承层次里,越靠上的类越通用,甚至更抽象。祖先类往往只包含最基本的成员,人们只把它当作派生其他类的基类,而不会拿它来 new 对象。方法也可以只给出定义、不写实现,交给子类按具体需求去完成。 这种只有定义、没有方法体(没有 {})的方法叫做抽象方法。含有一个或多个抽象方法的类必须声明为抽象…
Java 允许在一个类(或方法、语句块)内部再定义另一个类,称为内部类(Inner Class),有时也叫嵌套类(Nested Class)。 内部类和外层类存在逻辑上的所属关系,一般只用在定义它的类或语句块里,实现没有通用意义的功能。外部引用时必须给出完整名称。 使用内部类的主要原因:可以访问外部…
Java 是面向对象语言,但八种基本类型并不带对象特性:没有属性、也不能调方法。保留它们是为了符合习惯,并让常规数值运算更简单高效。 引用类型都继承了 Object,转成字符串只要调 toString();基本类型就麻烦得多。为此 Java 给每种基本类型配了一个类,叫做包装类(Wrapper Cl…