为什么要学习java
1、面向对象。三大特征(封装、继承、多态)、五大原则(单一职责原则、开放封闭原则、替换原则、依赖原则、接口分离原则)
2、跨平台、内存管理(jvm)
3、生态好
java环境安装 环境变量配置
官网下载对应的环境的包
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
网速慢可以从华为这个镜像下载
https://repo.huaweicloud.com/java/jdk/
windows和macos可以直接下载安装包安装
centos 下载压缩包配置环境变量
vim /etc/profile
#在末尾添加如下配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_211
export CLASSPATH=.:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile #刷新
## 查看版本
java -version
mac jdk目录
/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
编写第一个java程序
//每个语言的源头 hello word
//每个java程序的源头main方法
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World");
}
}
#编译
javac HelloWord.java
#运行
java HelloWord
类:包名、类名、静态块、静态方法、实例方法、局部变量、全局变量、匿名内部类
import、 package
interface、class、enum、extends、implements
public、private 、 protected、无修饰符 :修饰类、方法、全局变量(其中protected不能修饰类)
-
static :修饰类、方法、全局变量
-
final:修饰类、全局变量、局部变量
-
创建对象 :new、反射、clone
数据类型
-
8大基础数据类型:short(2)、int(4)、long(8)、float(4)、double(8)、char(2)、byte(1)、boolean(1/8)
-
特殊数据 void、null
-
Object:万物皆为对象
-
数组
-
常用数据结构类:Map、Set、List
-
使用比较多的 :String、Date
-
自动装箱、自动拆箱
浮点数
- IEEE规范:
IEEE-754: 符号-指数-底数
双精度(64):1-11-52
单精度(32):1-8-23
1、符号位(Sign) : 0代表正,1代表为负
2、指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
3、尾数部分(Mantissa):尾数部分
-
浮点数二进制表示
1、整数部分:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序
2、小数部分:乘以2,然后取出整数部分,将剩下的小数部分继续乘以2,然后再取整数部分,一直取到小数部分为零为止。如果永远不为零,则按要求保留足够位数的小数,最后一位做0舍1入。将取出的整数顺序排列。
符号位(Sign) : 0代表正,1代表为负
指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
尾数部分(Mantissa):尾数部分举例:22.8125 转二进制的计算过程:
整数部分:除以2,商继续除以2,得到0为止,将余数逆序排列。
22 / 2 11 余0
11/2 5 余 1
5 /2 2 余 1
2 /2 1 余 0
1 /2 0 余 1
得到22的二进制是10110小数部分:乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列。
0.8125x2=1.625 取整1,小数部分是0.625
0.625x2=1.25 取整1,小数部分是0.25
0.25x2=0.5 取整0,小数部分是0.5
0.5x2=1.0 取整1,小数部分是0,得到0.8125的二进制是0.1101
结果:十进制22.8125等于二进制00010110.1101
-
二进制如何运算:
1、二进制的加法:0+0=0,0+1=1 ,1+0=1, 1+1=10(向高位进位);2、二进制的减法:0-0=0,10-1=1(向高位借位) 1-0=1,1-1=0 (模二加运算或异或运算) ;
3、二进制的乘法:0 * 0 = 0 0 * 1 = 0,1 * 0 = 0,1 * 1 = 1
4、二进制的除法:0÷0 = 0,0÷1 = 0,1÷0 = 0 (无意义),1÷1 = 1 ;
5、逻辑运算二进制的或运算:遇1得1 二进制的与运算:遇0得0 二进制的非运算:各位取反。
逻辑语法
if 、else、else if、for 、while、 do while、switch、case、 continue、 break、default、return、instanceof
+ - * / % ++ – & | ^ ~ && ||
异常 Throwable、Exception 、RuntimeException、Error、try catch、finally、throw、throws
多线程修饰:synchronized、volatile
synchronized:
volatile:
使用较少的关键字 const、goto
const:
goto:
IO:文件io 网络io
字节流、字符流
Reader Writer
InputStream OutputStream
File FileOutputStream FileInputStream
ByteArrayOutputStream ByteArrayInputStream
文件NIO
1、NIO是面向缓冲、通道的;传统IO面向流
通道是双向的既可以写、也可以读;传统IO只能是单向的
环境结构:当前位置(position)、限制(limit)、容量(capacity)
2、NIO可以设置为异步;传统IO只能是阻塞,同步的
BIO:阻塞、同步
NIO:阻塞、异步
AIO:非阻塞、异步