诞生
1995年发布第一个版本,2009年所属Sun公司被甲骨文收购
Java之父 - 詹姆斯·高斯林
长期支持的版本为Java 8和Java 11
技术体系
Java SE:标准版,提供了完整的Java核心API
Java EE:企业版,主要针对Web应用开发
Java ME:小型版,加入了针对移动终端的支持
特性
- 面向对象(OOP)
- 健壮性:强类型、异常处理、GC
- 跨平台性:对于不同的平台,具有不同的虚拟机,它屏蔽了底层运行平台之间的差别,实现“一次编译、多处运行”
- 解释型:源码经过编译之后,交由解释器执行
JDK与JRE
JDK = JRE + Java开发工具
JRE = JVM + Java核心类库
如果只想运行编译之后的.class文件,只需要JRE即可
JDK下载:Java 下载 |Oracle 中国
环境变量
JAVA_HOME:JDK主目录
path:%JAVA_HOME%\bin
环境变量的配置是为了在DOS的任意目录下都可以使用Java指令
单独配置JAVA_HOME是为了在JDK发生变更(版本或者安装目录)时不需要对path进行更改
执行流程
- 编写.java源程序
- 编译为.class字节码文件(可以被JVM识别) -> 对应javac指令
- 加载.class到JVM执行 -> 对应java指令
注意事项
- 源文件的基本组成部分是类,一个源文件中只能有一个public类,且源文件名称与public类名相同
- Java程序的执行入口为:public static void main(String[] args){...}
- Java是强类型语言,区分大小写
转义字符
- \t:制表符
- \n:换行符
- \r:回车
- \\、\"、\':对应\、"、'字符
注释
注释就是对程序的说明性文字,良好的注释可以提高代码的可读性
注释中的内容不会被JVM执行
- 单行注释
- 多行注释:多行注释不允许嵌套
- 文档注释:可以被javadoc解析,生成网页形式的说明性文档。用于类和方法
常用javadoc标签:java 文档注释 -- javadoc 标签 - 快乐随行 - 博客园 (cnblogs.com)
代码规范
- 注释着重描述为什么这么写、如何使用、需要注意什么问题等
- 注意代码对齐,比如运算符和等号两侧添加空格
- 代码行宽不宜过长,一般不超过80字符
- 源文件最好使用utf-8编码格式
- 代码编写时使用行尾风格或者次行风格
DOS指令
DOS:磁盘操作系统
- dir:查看目录内容
- tree:查看子目录
- cd:进入目录
- exit:退出
- cls:清屏
- md:创建目录
- rd:删除目录
- copy:拷贝文件
- del:删除文件
- echo:输入内容到文件
- move:移动文件
运行流程:接受指令 -> 解析指令 -> 运行指令
路径
相对路径:从当前目录开始定位
绝对路径:从根目录开始定位
变量
变量相当于内存中数据存储空间的表示,通过变量名可以访问到具体的变量值。
变量三要素:变量名 + 变量值 + 数据类型
- 不同类型的变量占用的内存空间不同
- 每一个变量都包含变量名和数据类型
- 变量使用前需要先声明
- 在同一作用域内变量不能重名
- 同一个变量的值只能在对应类型范围内变化
+号使用
- 当+号左右两侧都是数值时,做加法运算
- 当+号左右有一侧是字符串,做拼接运算
数据类型
Java中的每一种数据都定义了明确的数据类型,不同类型的数据在内存中分配了不同大小的内存空间
- 基本类型
- 数值型
- 整数:byte[1]、short[2]、int[4]、long[8]
- 小数:float[4]、double[8]
- 字符型:char[2]
- 布尔型:boolean[1]
- 数值型
- 引用类型:类、接口、数组
Java中各数据类型具有固定的范围和长度,不受具体OS的影响,以保证Java程序的可移植性。
浮点数在机器中的存放形式:符号位 + 指数位(0可省略) + 尾数位(可能丢失,造成精度丢失),小数的值都只会是近似值。
两个小数(包含计算得到的结果)的相等匹配应该对差值绝对值是否在某个精度范围内实现。
与String类型的双引号类似,字符使用单引号,并且字符的本质就是整数,这意味着它可以进行计算,而最后输出的结果会是对应的Unicode字符。在Unicode字符集中,可以使用两个字节表示绝大多数字符,因此一个字符可以存储多数汉字。
布尔类型的值只有true和false两种,占用一个字节,通常用于逻辑运算。
文档
通过使用Java API(程序编程接口),能够快速实现需求
概述(Java SE 11 & JDK 11) (runoob.com)
编码
- ASCII:首位固定为0,只占用后7位,可以表示128个字符
- Unicode:万国码,无论英文或是汉字都是用两个字节存储,可能出现存储空间的浪费。兼容ASCII
- utf-8:Unicode的一种实现方式,是一种可变长的编码方式,字母占用一个字节,汉字占用三个字节
- gbk:可以表示汉字,且范围广泛。与utf-8相比,汉字占用两个字节
类型转换
Java程序在进行运算或者赋值时,会自动将精度小的类型转换为精度大的类型,这被称为自动类型转换
- 混合运算会先将所有的数据转换为精度最大的类型,然后再进行运算
- 大精度转小精度会报错(会出现精度丢失)
- char和byte、short之间不会自动转换,但是可以进行计算,在计算时会先转换为int
- boolean类型不参与转换
在某些场景下我们需要将大精度类型强行转为小精度类型,此时就需要进行强制类型转换。具体来说就是在大精度类型前添加括号、以及要转换的类型
- 强转符号只针对最近的操作数有效,因此常使用小括号提升优先级
- byte和short在运算时会先提升为int
除了基本类型的转换,我们可能也会遇到字符串与基本类型之间的转换
- 基本类型转字符串,只需要+”“进行拼接运算即可
- 字符串转基本类型则需要借助基本类型的包装类型,并调用其parseXX方法