初学java从这里开始
很多新手学 Java,一上来就被"JDK、JVM、JRE、环境变量、面向对象、多态"这一堆词砸晕,不知道先抓哪头。这篇文章把 Java 入门必须过的 18 个知识点串成一条线:先让程序跑起来,再学语言基础,最后进到面向对象和高级特性。跟着这条线走,你会对 Java 有一个完整而不混乱的骨架。 说明:…
很多新手学 Java,一上来就被"JDK、JVM、JRE、环境变量、面向对象、多态"这一堆词砸晕,不知道先抓哪头。这篇文章把 Java 入门必须过的 18 个知识点串成一条线:先让程序跑起来,再学语言基础,最后进到面向对象和高级特性。跟着这条线走,你会对 Java 有一个完整而不混乱的骨架。 说明:…
线程是一个程序内部的顺序控制流:一个进程相当于一个任务,一条线程相当于这个任务里的一条执行路径。多进程是操作系统同时跑多个程序;多线程是同一个应用程序里有多条顺序流同时执行。Java 的线程通过 java.lang.Thread 实现。 JVM 启动时会有一个由 public static void…
继「多线程程序模型研究」之后,再给出一个更复杂、但功能比较完整、可以直接套用的线程池。实例改写自 Apache 项目源码(原文约 800 行,跑在 Tomcat 等服务器上),这里做了精简,只留核心,并配测试类。 学完可以直接模仿套用,不必自己从零再写一遍池。关键两块:线程池类 ThreadPool…
多线程是复杂程序里几乎躲不开的一块。为了把运行性能拉上来,把工作拆成多条线程是常见做法。下面用扫描主机端口的例子,把单线程、一端口一线程、以及两种线程池模型都走一遍。 阅读前提:有一定 Java 基础,对 Socket 不陌生。原文程序在 Java SDK 1.4.2 下编译运行通过。 一、单线程扫…
从学 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 抽象方法 可以有,…