
一、Java语言初识
1、百度百科对Java的解释
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
2、Java语言业务方向上的分类
- JAVA SE (标准版)(桌面程序,控制台开发……)
- JAVA ME — Android (电子设备端)(手机,小家电……)
- JAVA EE (面向企业)(Web端,服务器开发……)
- 2006年Hadoop诞生,Java进军大数据领域
3、JDK、JRE 和 JVM
- JDK: 开发者工具包 (配置环境变量)
- JRE: Java运行环境
- JVM: Java虚拟机(JVM是Java跨平台的关键,包含在JRE中,实现了Write Once、Run Anywhere,一次编写,到处运行)

4、编译与运行
5、编译型语言与解释型语言
-
编译型语言
- 编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)
- 程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了
- 程序执行效率高,依赖编译器,跨平台性差些,如C、C++、Delphi等
-
解释型语言
- 源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行
- 程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次,因此效率比较低
- Python/JavaScript / Perl /Shell等都是解释型语言,跨平台性较好
-
编译型与解释型,两者各有利弊
- 编译型语言由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言
- 而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释型语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等
6、Java集成开发环境(IDE)
- Eclipse 免费而经典的JavaIDE,具有强大的插件支持能力
- NetBeans 开源软件开发集成环境,是一个开放框架,可扩展的开发平台
- IntelliJ IDEA 相比之下更加人性化,在业界被公认为最好的java开发工具,社区版免费,但完整版收费(在校师生可利用学校邮箱“xxx.edu.cn”申请免费订阅)
二、基础语法
1、注释
1.1行内注释
//xxxx…
1.2多行注释
/* xxxx…
xxxx…
*/
1.3文档注释( javadoc生成帮助文档)
/**
*xxxx…
*/
2、Java标识符(关键字)
2.1 总览

2.2 按其用途划分为如下几组
2.2.1 用于数据类型
用于数据类型的关键字有: boolean、byte、char、 double、 false、float、int、long、new、short、true、void、instanceof
2.2.2 用于语句
用于语句的关键字有: break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super
2.2.3 用于修饰
用于修饰的关键字有: abstract、final、native、private、 protected、public、static、synchronized、transient、 volatile
2.2.4 用于方法、类、接口、包和异常
用于方法、类、接口、包和异常的关键字有: class、 extends、 implements、interface、 package、import、throws
2.2.5 Java保留的没有意义的关键字
如 cat、 future、 generic、innerr、 operator、 outer、rest、var 等都是Java保留的没有意义的关键字
2.2.6 Java文字
Java还有3个保留字: true、false、null。它们不是关键字,而是文字。包含Java定义的值。和关键字一样,它们也不可以作为标识符使用。
2.2.7 学会面向百度编程
关键字的使用要学会去百度查看,所谓有问题先百度,经过思考后还不能解决的再去问其他人。
3、数据类型
3.1 基本数据类型
3.1.1 整数
类型 | 大小(字节) |
---|
byte | 1 |
short | 2 |
int(默认) | 4 |
long | 8 |
3.1.2 浮点数
类型 | 大小(字节) |
---|
float | 4 |
double(默认) | 8 |
BigDecimal | 可变 |
3.1.3 字符
类型 |
---|
char 2字节 |
ascii |
utf-8 |
Unicode |
‘\u0000’ |
3.1.4 布尔值
3.2 引用数据类型
3.3 类型转换
类型 | 转换方式 |
---|
自动类型转换 | 低转高 |
强制类型转换 | 高转低 (低)高 |
3.4 变量和常量
3.4.1 变量模版
3.4.2 作用域
3.4.3 常量
3.4.4 命名规范
1. 见名知意
2. 驼峰命名(变量,方法)
3. 类,首字母大写,驼峰命名
4. 常量 大写+下划线
5. 不要使用拼音
6. 良好的代码规范是一切的基础
3.5 运算符
类型 | 举例 |
---|
算数运算符 | + - * / % ++ - - |
赋值运算符 | = |
关系运算符 | > < >= <= == != instanceof |
逻辑运算符 | && || ! |
位运算符 | & | ^ ~ >> << >>> |
条件运算符 | ? : |
扩展运算符 | += -= *= /= |
3.6 包机制
几个注意点 |
---|
1、域名倒写 |
2、放置命名冲突 |
3、package |
4、import |
3.7 javaDoc
3.7.1 JDK帮助文档
https://docs.oracle.com/javase/8/docs/api/
3.7.2 Javadoc
javadoc |
---|
@auther |
@Version |
@Since |
@param |
@return |
@throws |
三、流程控制
1、Scanner
2、顺序结构
3、选择结构
3.1 if单选择结构
3.2 if-else双选择结构
3.3 if – else if – else多选择结构
3.4 switch结构
3.4.1 变量模版
几点注意 |
---|
jdk支持了String类型 |
case穿透现象 |
break |
default |
4、循环结构
4.1 while循环
4.2 do…while循环
4.3 for循环
4.4 增强for循环
for(ElementType element: arrayName){}; |
---|
5、break & continue
类型 | 用途 |
---|
break | 跳出循环 |
continue | 终止当次循环 |
标签continue | 类似C/C++中的goto |
return | 结束方法的运行 |
四、方法
1、方法的定义
修饰符 返回值 方法名 (参数名) {return 返回值}; |
---|
2、方法的调用
3、方法重载
4、命令行传参
5、可变长参数
6、递归
五、数组
1、数组的定义
1.1 定义的语法
(1) type arrayName[]; |
---|
(2) type[] arrayName; |
2、数组的初始化
2.1 静态初始化
int intArray[] = {1,2,3,4}; |
---|
2.2 动态初始化
必须是同一类型
float floatArray[] = new float[3];
floatArray[0] = 1.0f;
floatArray[1] = 132.63f;
floatArray[2] = 100F;
3、数组的使用
(1)通过下标拿到值 |
---|
(2)增强for循环遍历 |
ArrayIndexoutofBoundsException(数组越界异常) |
4、二维、多维数组
5、Arrays工具类
6、排序算法
六、面向对象
1、类与对象
2、构造方法
构造的重载 |
---|
(1) 默认的无参构造 |
(2) 如果手动定义了有参构造就必须手动再加一个无参构造 |
(3) 单例模式,需要构造器私有 (保证一个类仅有一个实例,并提供一个访问它的全局访问点,二十四种设计模式之一) |
3、new 对象
4、封装
5、继承
几点注意 |
---|
(1)继承关键词 extends |
(2)最上层类 Object |
(3)子类拥有父类的全部特性 |
(4)方法覆盖(重写) |
(5)this关键字 |
(6)super关键字 |
(7)java是单继承,只能继承一个父类 |
6、多态
父类的引用指向子类的对象 Father father = new Son(); |
---|
instanceof关键字,用来测试一个对象是否为一个类的实例 |
7、接口
几点注意 |
---|
(1) 接口关键词 interface |
(2) 约束 只能定义方法名,不能写实现 |
(3) 类实现接口必须重写其中的方法,否则类要加上abstract关键字成为抽象类 |
(4) 只有一个方法的接口叫做函数式接口,可用lambda表达式简化 |
(5) 接口比抽象类更抽象 |
(6) 一个类可以实现多个接口 |
8、内部类
七、异常
1、Throwable
1.1 Exception
运行时异常 |
---|
(1) ArithmeticException 算数异常 如:1/0 |
(2) ClassNotFoundException 找不到对应的类 |
(3) NullPointException 空指针异常 |
(4) UnknownTypeException 遇到未知类型 |
(5) ArrayIndexoutofBoundsException 下标越界异常 |
(6) … |
1.2 Error
1.2.1 AWT错误
1.2.2 JVM错误
StackOverFlow 栈溢出 |
---|
OutOfMemory 内存溢出 |
2、五个关键字
五个关键字 |
---|
try{} |
catch(){} 异常应设置先小后大 |
finally{} 无论有没有异常都执行,一般用来关闭通道 |
throw 手动抛出异常 |
throws 方法抛出异常 |
3、自定义异常
七、常用类
1、Object类
常用方法 |
---|
hashcode() |
toString() |
clone() |
getClass() |
notify() |
wait() |
equals() |
2、Math类
3、Random类
生成随机数 如:UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。 |
---|
4、File类
5、包装类
6、Date类
功能 |
---|
Date |
SimpleDateFormat yyyy-MM-dd HH:mm:ss |
Calender (建议使用) |
7、String类
8、StringBuffer
可变长 append() 多线程数据量较大 效率低,但安全 |
---|
9、StringBuilder
可变长 append() 单线程数据量较大 效率高,但不安全 |
---|
八、集合框架
1、Collection
1.1 List(有序可重复)
1.1.1 ArrayList(常用)
常用方法 |
---|
add |
remove |
contains |
size |
1.1.2 LinkList(常用)
常用方法 |
---|
getFirst() |
getLast() |
removeFirst() |
addFirst() |
1.1.3 Vector
1.1.4 Stack
1.2 Set(无序不可重复)
1.2.1 HashSet(常用)
1.2.2 TreeSet
2、Map
2.1 HashMap(重点)
JDK1.7 : 数组+链表
JDK1.8 : hash表 = 数组+链表+红黑树
2.2 TreeMap
3、Collections 工具类
4、泛型
九、IO流
1、字节流
输出: OutputStream |
---|
输入: InputStream |
2、字符流
3、节点流
类型 |
---|
CharArrayReader, Writer, inputstream, outputstream |
StringReader, Writer |
pipe(管道流) PipeOutputStream |
File( , , , ) |
4、处理流
4.1 buffer
类型 |
---|
bufferInputStream |
bufferOutputStream |
bufferReader |
bufferWriter |
4.2 序列化/反序列化
Serializable transient(透明的) |
---|
4.3 Data
类型 |
---|
DataInputStream |
DataOutputStream |
4.4 object流
4.5 转换流
类型 |
---|
InputStreamReader |
OutputStreamWriter |
4.6 Filter
4.7 print
十、多线程
1、进程和线程
2、线程创建的方式
方式 | 注意 |
---|
Thread | start(),本地方法:java无权调用,交给底层的C处理 |
Runnable | 函数式接口 注意lambda表达式的使用 |
Callable | 可以有返回值 |
3、静态代理
new Thread (Runnable).start(); |
---|
4、Lambda表达式
函数式编程,避免内部类定义过多 |
---|
new Thread(()->{…}).start(); |
5、线程的状态
6、常用方法
方法名称 |
---|
sleep |
join |
yield |
isLive |
start |
setPriority |
interrupt |
7、线程同步
7.1 同步描述
几点描述 |
---|
多个对象操作同一资源,并发 |
队列+锁 |
第一个线程进来拿到锁,后面就要排队了,直到这个人释放锁,后面拿到锁才能进去 |
7.2 Synchronized
7.2.1 同步方法
7.2.2 同步代码块(常用)
7.2.3 死锁
四个条件破坏其中一个即可 |
---|
互斥 |
请求与保持 |
不剥夺条件 |
循环等待条件 |
7.3 Lock(优先级高)
ReentrantLock |
---|
lock |
trylock |
unlock |
7.4 同步巧记
多线程的锁机制,可以用厕所门口排队来形容,不加锁或者乱加锁(加到门外边儿或者死锁),厕所门就失守或者锁死了,大家就都难受了

8、线程通信
几点注意 |
---|
缓冲区:消息队列 |
标识位:红绿灯模型 |
wait(); |
notifyAll(); |
9、线程池(Pool)
十一、网络编程
1、IP
IP是整个TCP/IP协议族的核心,也是构成互联网的基础 |
---|
2、端口
3、Socket编程
4、TCP
5、UDP
6、URL
在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL |
---|
7、Tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器 |
---|
十二、GUI
1、AWT
1.1 Frame
1.2 监听事件
2、Swing
需要掌握的几点 |
---|
文本框 |
标签 |
按钮 |
文本域 |
面板 |
布局方式 |
关闭窗口 |
列表 |
3、小游戏
十三、注解和反射
1、注解
2、反射
2.1 Class
2.2 类加载机制
2.3 Method
invoke(user,“xxx”); | 存在重载,也需要写参数的类型 |
---|
2.4 Field
2.5 Construct
newInstance(); | 获取的时候需要,传递参数的class类型 |
---|
2.6 破坏私有关键字
2.7 反射获得注解,泛型
2.8 性能分析
