JavaSE
Java语言
-
注册博客(新手入门必不可少)
-
MarkDown语法学习(编写美观博客)
-
简单的Dos命令(linux统统使用窗口)
-
计算机语言发展:(更易更强)
- 机器语言:二进制
- 汇编语言:指令代替二进制,应用:机器人、逆向工程、病毒
- 第三代语言:C语言、C++、JAVA(服务器开发)、Python(大数据分析、人工智能)、PHP(快速构建网站)、JavaScript
-
Java诞生 -- 通过JVM替代C--,
- 1995年进攻了三个市场:
- Java SE:核心,基础
- Java ME:手机端,Android上运行的Java文件
- Java EE:企业级开发,例如:web端、服务端后台
- 2006年:Hadoop:大数据分析
- 1995年进攻了三个市场:
-
JDK:Java Development Kit 开发者工具包
- 配置环境变量:JAVAHOME、Path
-
JRE:Java Runtime Environment 运行环境
-
JVM:Java虚拟机(Write Once、Run AnyWhere)
HelloWorld
public class Hello(){
public static void main(String[] args){
System.out.println("hello world!");
}
}
-
javac Hello.java 生成Hello.class
-
java Hello
-
编译型语言
-
解释型语言
-
IDEA
基础语法
-
注释
- 行内注释 //
- 多行注释 /* */
- 文档注释 /** */ javadoc生成帮助文档
-
标识符
- 关键字
- 数据类型
- 基本数据类型:
- 整数
- byte 1
- short 2
- int(默认) 4
- long 8
- 0b二进制
- 0x十六进制
- 0八进制
- 浮点数
- float 4
- double(默认)8
- 字符 char 2 (utf-8,ascii、Unicode2个字节)
-
\u0000
\b \n \r \t \‘ \\
-
- 布尔值 boolean 1bit
- 整数
- 引用数据类型
- 类
- 接口
- 数组
- 基本数据类型:
-
类型转换
- 自动类型转换(低转高)
- 强制类型转换(高转低)
-
变量和常量
-
type varName [=value];
-
作用域
-
类变量(static)
-
实例变量(类内)
-
成员变量(方法内)
生命周期 类加载 对象创建 对比项 类(静态)变量 实例(成员)变量 局部变量 -
常量 final MAX_A = 10;
-
命名规范
- 见名知意
- 驼峰命名(变量,方法)
- 类,首字母大写、驼峰命名
- 常量:大写+下划线
- 不要使用拼音命令
-
-
-
运算符
- 算数运算符
- 幅值运算符 =、+=、%=
- 关系运算符>、<、!=
- 逻辑运算符 && || !
- 位运算符& | ^ ~ >> << >>>无符号移位
- 条件运算符 ?:
-
包机制
- 域名倒写
- 防止命名冲突(防止命名冲突)
- package(必须写在第一行)
- import
-
JavaDoc
-
jdk帮助文档
-
javadoc xxx
- @author
- @Version
- @Since(java版本支持)
- @param
- @return
- @throw
-
javadoc -encoding UTF-8 -charset UTF-8 HelloWorld.java
-
流程控制
- Scanner:用户交互 System.in
- 顺序结构:程序默认的结构,自上而下地执行
- 选择结构:if、if--else、switch(jdk7支持了String类型、case穿透现象,不加break会一直case)
- 循环结构:while(尽量避免死循环)、do…while、for(案例:九九乘法表)、for-each(增强for循环)
break和continue
- break:跳出循环
- continue:终止当前循环,进入下一次循环
- 带标签的continue(已废弃)
- return
方法
-
什么是方法? ---语句块的集合
-
定义:
修饰符 返回值 方法名(参数名){return 返回值;}
-
方法调用:
- 类.方法
- 对象.方法
-
方法重载:名字相同,参数列表不同
-
命令行传参(给main方法传递参数,可以向args传递参数)
-
可变长参数 …(必须放在最后一个参数)
-
递归(自己调用自己,给自己一个出口)(面试常用)
数组
- 定义 new int[5],{1,2,3,4,5},数组内部必须是一个类型
- 使用,通过下标获取,增强for循环
- 二维数组
- Arrays工具类
- 排序算法(西部开源)
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 基数排序
面向对象
-
什么是面向对象? ---任何事物都是一个对象
-
类和对象(类是对象的抽象:模板class、对象是类的具体)
-
构造方法 :构造的重载、默认的无参构造(如果定义了有参构造,那么必须手动加上一个无参构造)
-
new 对象
- 栈存放引用
- 堆存放具体的对象
-
封装--属性私有,get、set
-
继承--extends,子类拥有父类的全部特性、方法重写、this、super(java是单继承)
-
多态
- 父类的引用指向子类的对象 Person person = new Student();
- instanceof关键,如果匹配,可以进行类型之间的转换
-
修饰符
- public
- protected
- private
- static
- final
- abstract
-
接口interface
- 约束,智能定义方法名
- 子类实现接口,必须重写其中的方法
- 只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化
- 接口比抽象类更抽象
- 一个类可以实现多个接口
-
内部类
- 局部内部类
- 静态内部类
- 匿名内部类(方法里面)(重点)
异常
-
Throwable
- Exception
- 运行时异常
- 1/0
- ClassNotFound
- NullPoint
- UnKownType
- BoundOuTException
- 编译时异常(检查型异常)
- 运行时异常
- Error
- AWT错误
- JVM错误
- *
- OutOfMemory
- Exception
-
五个关键字
- try{}
- catch(){}
- finally{}
- throw:手动抛出异常
- throws:方法抛出异常
-
自定义异常:继承Exception类即可
常用类
-
Object类
- hashcode()
- toString()
- clone()
- getClass()
- notify()
- wait()
- equals()
-
Math类
-
Random类:生成随机数 UUID
-
File类
- 创建文件
- 查看文件
- 修改文件
- 删除文件
-
包装类:自动装箱和拆箱
-
Date类:
- Date
- SimpleDateFormat:yyyy-MM-dd HH:mm:ss
- Calendar(建议使用)
- String类:不可变性final 操作量少
-
Stringbuilder:可变长 append链式编程 多线程数据量大,效率低,安全
-
StringBuffer:可变长 单线程数据量大,效率高,不安全
String str = "a" + 1 + 2; String str = ‘a‘ + 1 + 2; String str = 1 + 2 + "a";
集合框架
-
Collection
- List(有序、可重复)
- ArrayList(add----remove----contains-----size)
- LinkedList: (push-----pull-----getFirst-----getLast------removeFirst------addFirst)
- Vector(很少用)
- Stack栈
- Set(无序、不可重复)
- HashSet()
- TreeSet(不常用)
- List(有序、可重复)
-
Map
- HashMap(重点、天天用)(面试高频问题)
- jdk1.7:数组+链表
- jdk1.8:数组+链表+红黑树;链表长度超过8的话就转化为红黑树
- TreeMap
- HashMap(重点、天天用)(面试高频问题)
-
Collections工具类
-
泛型<>约束,避免类型转换之间的问题
Iterator
IO流
- 处理流
- buffer
- bufferInputStream
- bufferOutputStream
- bufferReader
- bufferWriter
- 序列化、反序列化 Serializable transient透明的
- Data
- DataInputStream
- DataOutputStream
- 转换流
- InputStreamReader
- OutPutStreamWriter
- filter
- 四个
- Print
- PrintWriter
- PrintStream
- object流 4个
- buffer
- 字节流:
- 输入:InputStream
- 输出:OutputStream
- 字符流
- Writer
- Reader
- 节点流:
- CharArrayReader、Writer、inputStream、outputStream
- StringReader、Writer
- pipe(管道流)
- File(,,,)
多线程
-
进程和线程
-
run()方法、start()
-
线程创建的方式
- Thread 继承了Runnable(start0,本地方法,java无权调用,交给底层的c处理) private native void start0();
- Runnable:函数式接口,lambda表达式
- Callable:可以有返回值
-
静态代理
- new Thread(Runnable).start();
-
Lambda表达式:
-
函数式编程
-
避免内部类定义过多
-
new Thread(()->{
? System.out.println();
}).start();
-
手动推导一遍
-
-
线程的状态
- 新建状态
- 就绪
- 运行
- 阻塞
- 死亡
-
常用方法
- sleep
- yoin
- yield
- isLive
- start
- setPriority
- interrupt
-
线程同步
- 多个对象操作同一个资源,并发
- 队列 + 锁
- Synchronized
- 同步方法(弊端:锁太多了)
- 同步代码块(常用)
- 第一个线程进来拿到锁,后面的人就要排队,直到这个人释放锁,后面拿到锁才能进去
- 死锁
- 互斥
- 请求与保持
- 不剥夺条件
- 循环等待条件
- Lock ReentrantLock
- lock
- trylock
- unlock
- 线程通信
- 缓冲区
- 标志位
- wait
- notifyAll()
网络编程
-
IP
-
端口
-
TCP
- 三次握手
- 四次握手
- 面向连接
-
UDP
- 无连接
- Packet
-
URL
-
初始Tomcat
-
聊天通信
-
文件上传
GUI
-
AWT
- Frame
- 监听事件
- 鼠标
- 键盘
- 窗口
- 动作事件
-
Swing
- 文本框
- 标签
- 按钮
- 文本域
- 面板
- 布局方式
- 关闭窗口
- 列表
-
贪吃蛇
- Timer
- 键盘监听
- 游戏帧的概念
注解和反射
- 注解
- 元注解
- 内置注解
- 自定义注解
- 反射读取注解
- 反射
- class
- 类加载机制
- Method
- Field
- Construct
- 破坏私有关键字
- 性能分析
- 正常 > 检测关闭的反射 > 默认的反射
- 反射获得注解,泛型
- 探索单例模式
- Stream
- ForkJoin