编程入门
-
冯·诺依曼体系结构
-
计算机包括硬件(hardware)和软件(software)两部分
-
硬件:CPU、内存、硬盘、通信设备、输入和输出设备
比特(bit) 和字节(byte):比特(bit),是计算机中最小的存储单位。但最基本的存储单元是字节。每个字节由8个比特构成。
-
软件:BOOT》操作系统》应用软件&其它
操作系统(Operating System)是计算机上的最重要的程序,可以管理和控制计算机的活动。
人机交互方式:图形化界面(GUI)、 命令行方式(CLI)
-
计算机语言:POP》OOP》高级编程
机器语言》汇编语言》高级语言:面向过程的语言》面向对象》Java
-
-
万维网Web《因特网Internet《互联网
面向过程编程
第1章_Java语言概述
- Java历史》Java 基础知识图解
- Java工作方式:运行机制及运行过程:编码》javac编译》java解释执行(跨平台)
- Java环境
-
JDK 、JRE 、JVM 关系
• JDK = JRE + 开发工具集(例如Javac编译工具等)
• JRE = JVM + Java SE标准类库
-
- Java的程序结构:HelloWorld》文档 注释》Java API文档
- 核心机制:
- JVM制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
- 垃圾回收
第2章_基本语法
变量
- 变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
- 自动类型转换:byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
- 强制类型转换:可能造成精度降低或溢出。
- 字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型
- 计算机底层都以 二进制形式存在,使用补码。但数据应用时一般用其它进制表示,易懂。
- 八进制(octal) :0-7 ,满8进1. 以数字0开头表示。其它进制间转化 以二进制为桥接。
运算符
流程控制
java VS. C/C++
第3章_数组
- 一维数组和二维数组的内存的简化结构
- 数据结构》算法》Arrays 工具类
面向对象编程
面向过程(POP) 与面向对象(OOP)
- 》例子:人把大象装进冰箱
- 程序员从面向过程的执行者转化成了面向对象的指挥者
面向对象
-
成员变量(属性)和局部变量的区别?
-
方法调用机制;参数的值传递机制
-
封装和隐藏:四种访问权限修饰符
-
继承》多态
父类的引用指向子类的对象>晚绑定
编译时:要查看引用变量所声明的类中是否有所调用的方法。
运行时:调用实际new的对象所属的类中的重写方法。
Java扩展
第7章 异常
- 异常体系结构 Error Exception:运行时异常+编译时异常
- 异常处理机制:try-catch-finally throws声明抛出异常
第7章 基础
4. Object 类:== 操作符与equals 》toString()
5. 包装类why:基本类型、包装类与String 类间的转换
6. 抽象类》Java 8接口改进》偏类
7. 类的成员之:代码块、内部类 。static、final
8. 枚举类
9. 字符串
String(JDK1.0):不可变字符序列
StringBuffer(JDK1.0):可变字符序列、效率低、线程安全
StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安
1.日期
- JDK8 之前日期时间API
- 新日期间 时间API :本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类、 瞬时Instant、DateTimeFormatter 类
1.其它
-
Java实现对象排序的方式有两种
自然排序(默认):java.lang.Comparable
定制排序:java.util.Comparator -
System类代表系统
-
Math类
-
BigInteger类
-
BigDecimal类
Java实战
第8章_多线程
-
程序、进程、线程(一个程序内部的一条执行路径)
-
线程 的生命周期、有关方法
-
创建线程的方式:继承Thread类的方式、实现Runnable接口的方式、实现Callable、使用线程池
Callable功能更强大:可以有返回值、方法可以抛出异常、支持泛型的返回值。需要借助FutureTask类
-
同步机制优先使用顺序:Lock 同步代码块 同步方法
-
Lock是显式锁(手动开启和关闭锁,别忘记关闭锁),synchronized是
隐式锁,出了作用域自动释放 -
Lock只有代码块锁,synchronized有代码块锁和方法锁
-
使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有
更好的扩展性(提供更多的子类) -
synchronized 的锁是什么 ?
任意对象都可以作为同步锁。所有对象都自动含有单一的锁(监视器)。
同步方法的锁:静态方法(类名.class)、非静态方法(this)
同步代码块:自己指定,很多时候也是指定为this或类名.class
-
-
线程的通信
wait() 方法
使当前线程进入等待(某对象)状态 ,直到另一线程对该对象发出 notify(或notifyAll) 为止。
调用方法的必要条件:当前线程必须具有对该对象的监控权(加锁)。调用此方法后,当前线程将释放对象监控权notify()/notifyAll()
功能:唤醒等待该对象监控权的一个/所有线程。
调用方法的必要条件:当前线程必须具有对该对象的监控权(加锁)- wait的两个方法都需要注意中断的问题,wait中断是从语句处中断并且释放锁,当再次获得锁时是从中断处继续向下执行。(从外部看起来就像锁一直都在一样)
- notify 和 notifyAll是延迟通的,必须等待当前线程体执行完所有的同步方法/代码块中的语句退出释放锁才通知wait线程(从等待队列转移到同步队列)。
-
经典例题:生产者/ 消费者问题
第11章_Java集合
- 数组在存储数据方面的弊端:长度就不可变、面向过程的产物
- 集合框架概述
- Collection
- List:ArrayList、LinkedList
- Set:HashSet》LinkedHashSet、TreeSet
- Map:HashMap》LinkedHashMap、TreeMap、Hashtable》Properties
- Iterator迭代器接口
- Collections容器工具类:算法+同步包装
- 对象排序接口Comparable、Comparator。用于Tree*
- 复写equals方法的时候一般都需要同时复写hashCode方法。相等的对象必须具有相等的散列码,用于Hash*
- Collection
第13章_IO流
- File 类
- IO流分类:输入流、输出流、字节流、字符流、节点流、处理流
- 缓冲流分为:BufferedInputStream 、 BufferedOutputStream、BufferedReader、BufferedWriter
- 两个转换流:
InputStreamReader :将InputStream 转换为Reader
OutputStreamWriter :将Writer 转换为OutputStream - 标准输入System.in、输出流System.out
- 打印流:PrintStream和PrintWriter
- 数据流有两个类:(用于读取和写出基本数据类型、String类的数据) DataInputStream 和 DataOutputStream
- 对象流:ObjectInputStream 和OjbectOutputSteam用于存储和读取 基本数据类型数据或 对象的处理流。
- 随机存取文件流RandomAccessFile
- Java NIO
- NIO.2 中Path 、Paths 、Files
第14章_网络编程
- 网络通信要素: IP和端口号、网络通信协议
- 基于Socket 的TCP 编程
- 基于 UDP 协议网络程序
- URL网络编程
- URL的基本结构由5部分组成:< 传输协议>://< 主机名>:< 端口号>/< 文件名># 片段名? 参数列表
Java高级
第10章_注解
在编译时进行格式查 检查(JDK 内置的三个基本注解)
- 自定义注解必须配上注解的信息处理流程才有意义。》反射
JDK 中的元注解:@Retention、@Target
第12章_泛型
- 泛型在继承上的体现
- 通配符》有限制的通配符 上限extends、下限super
第15章_Java反射机制
-
Java不是动态语言,可以“准动态语言”。利用反射机制、字节码操作获得类似动态语言的特性。
-
类的加载与ClassLoader
-
反射相关的主要API 》获取运行时类的完整结构》调用运行时类的指定结构
java.lang.Class: 代表一 个 类
java.lang.reflect.Method: 代表类 的 方法
java.lang.reflect.Field: 代表类的 成员 变量
java.lang.reflect.Constructor: 代表类 的 构造 -
动态代理相比于静态代理的优点 》 反射的应用:动态代理
-
动态代理步骤
1.创建一个实现接口InvocationHandler的类
2.创建被代理的类以及接口
3.通过Proxy的静态方法创建接口代理
4.通过代理调用方法
Java新特性
第16章_Java8的其它新特性
-
Lambda 表达式
- 本质:Lambda表达式就是一个函数式接口的实例
- 语法:参数->体
- Java 内置四大核心函数式接口:消费型、供给型、函数型、断定型
- 方法引用与构造器引用、三种主要使用情况:
对象:: 实例方法名
类:: 静态方法名
类:: 实例方法名 (参数列表的第一个参数调用实例方法)
-
Stream API
-
Stream 和 Collection 集合的区别:Collection 是一种静态的内存数据
结构,而 Stream 是有关计算的。注意:
①Stream 自己不会存储元素。
②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。 -
Stream 的操作三个步骤
1- 创建 Stream:一个数据源(如:集合、数组),获取一个流
2- 中间操作:一个中间操作链,对数据源的数据进行处理:1- 筛选与切片limit skip filter distinct、2-映射map flatMap、3-排序sort 3- 终止操作:1- 匹配与查找match find、统计min max count、迭代forEach 2- 归约 reduce 3- 收集collect
Collector 接口中方法的实现决定了如何对流执行收集的操作(如收集到 List、Set、Map)。
-
Optional 避免空指针异常
-
-
便于并行