JDK安装
JDK安装版本回退问题:JDK8升级到JDK17后,回退JDK8更改环境变量无效,是由于JDK11及以上的安装包会将相关可执行文件复制到C:\Program Files (x86)\Common Files\Oracle\Java\javapath
目录,并自动添加环境变量,且该配置优先级较高,需要删除自行配置
C:\Program Files\Common Files\Oracle\Java\javapath
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
跨平台机制
编译器将源文件编译成字节码(.class)文件,然后由JVM将字节码文件加载并翻译成特定平台下的机器码,最后运行,对于不同的运行平台,需要安装不同版本的JVM,这就是Java虚拟机机制,该机制屏蔽了不同运行平台的底层差异,实现了跨平台性
由此可以看出,Java语言是混合型语言,因为即有编译过程也有解释过程(半编译半解释)
JVM/JRE/JDK
- JVM:Java Virtual Machine
- Java虚拟机,加载.class文件并运行.class文件
- JRE:Java Runtime Environment
- Java运行环境,除了包含JVM以外还包含了运行Java程序所必须的环境
- JRE=JVM+系统类库
- JDK:Java Development Kit
- Java开发工具包,除了包含JRE以外还包含了开发Java程序所必须的环境
- JDK=JRE+编译、运行等工具命令
注释
单行注释://
多行注释:/* */
文档注释:/** */
标识符
规定
- 只能包含字母、数字、_和$符,且不能以数字开头
- 严格区分大小写,且长度无限制
- 不能使用关键字
- 可以中文命名,但不建议
规范
- 包名必须全小写
- 类名每个单词的首字母大写,帕斯卡命名
- 方法和变量第一个单词小写,从第二个单词开始首字母大写
- 常量名全大写,用
_
分割单词
变量
变量的本质:变量的本质就是代表一个“可操作的存储空间”,空间位置是确定的,但是里面放置什么不确定,我们可以通过变量名来访问对应的存储空间,从而操作这个存储空间的值。Java是一种强类型语言,每个变量都必须声明其数据类型,变量的数据类型决定了变量占据存储空间的大小
类型 | 声明位置 | 从属于 | 生命周期 | |
---|---|---|---|---|
局部变量 | 方法或语句块内部 | 方法/语句块 | 从声明位置开始,直到语句块执行完毕,局部变量消失 | |
成员变量 | 实例变量 | 类内部,方法外部 | 对象 | 对象创建,成员变量也跟着创建,对象消失,成员变量也跟着消失 |
静态变量 | 类内部,static修饰 | 类 | 类被加载,静态变量就有效,类被卸载,静态变量消失 |
数据类型
整数类型(byte、short、int、long)
/
数值型
/ \
/ 浮点类型(float、double)
/
基本数据类型 -- 字符类型(char)
/ \
/ \
/ \
数据类型 布尔型(boolean)
\
\ 类(class)
\ /
引用数据类型 -- 接口(interface)
\
数组
int整型
- 整数直接量默认为int型,但不能超出范围,超范围则编译错误
- 两个整数相除,结果还是整数,小数位无条件舍弃(不会四舍五入)
- 整数运算时若超出范围则发生溢出,溢出是需要避免的
long整型
- 长整型直接量需在数字后加L或l
- 运算时若有可能溢出,建议在第1个数字加L
- System.currentTimeMillis()用于获取自1970.1.1零时到此时此刻的毫秒数(时间戳)
double浮点型
- 浮点数直接量默认为double型,表示float需在数字后加F或f
- double或float型数据在参与运算时,有可能发生舍入误差
浮点数
- 浮点数存在舍入误差,数字不能精确表示,如果需要精确计算,使用“BigDecimal”类。
字符类型
- 注意字符用单引号,字符串用双引号
自动类型转换
实现表示无数据丢失
自动的型转换,而虚线表示在转换时可能有精度类损失的。在算术运算中,数据会自动向上型提升,注意byte、short、char会先转为int类型再进行运算
运算符
运算符
逻辑运算符
位运算符
左移(<<):在内存中将该变量的二进制数直接向左移动,超出内存的丢弃,右边补0,所以结果将乘2的n次幂
带符号右移(>>):在内存中将该变量的二进制数直接向右移动,超出部分丢弃,左边根据最高位(最边左)是什么补什么,所以结果将除2的n次幂
无符号右移(>>>):与带符号右移的区别是左边始终补0,负数的无符号右移慎用
数组创建
int[] array3 = new int[](1,2,3); // 在声明数组的同时进行初始化
int[] array1 = {1,2,3}; // 简化写法
int[] array2 = new int[3]; // 动态初始化,只指定数组的长度
重载
在同一个类中,方法名相同参数不同,构成重载,与返回值无关。其中参数不同包含类型、个数、顺序不同
封装
Java语言的三大特性即是:封装、继承、多态
修饰符 | 同一个类 | 同一个包 | 子类 | 所有类 |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
封装的优点:
- 提高代码的安全性
- 提高代码的复用性
高内聚:封装细节,便于修改内部代码,提高可维护性
低耦合:简化外部调用,便于调用者使用,便于扩展和协作
继承
继承是一个对象获取父对象的所有属性和行为的机制。关键字为:extends
,继承的优势:
- 提高代码的复用性(相同属性、方法都在父类中定义)
- 子类可在父类的基础上增加其他功能,使子类更强大
子类可继承内容:
修饰符 | 构造方法 | 成员变量 | 成员方法 |
---|---|---|---|
public | x | √ | √ |
private | x | √ | x |
重点:Java只支持单继承,不支持多继承,可以多层继承。每个类都直接或间接的继承于Object
类
多态
多态是同一个行为具有多个不同表现形式或形态的能力。实现多态有3个必要条件:
- 继承
- 重写
- 向上转型
多态的优势和弊端:
- 优势:方法中使用父类类型作为参数,可以接受所有子类对象
- 弊端:不能使用子类的特有功能(如需使用配合instanceof进行类型强转)
包装类
byte --> Byte
short --> Short
char --> Character
int --> Integer -128~127已创建
long --> Long
float --> Float
double --> Double
boolean --> Boolean