## java基础知识
### 基本语法
#### 关键字与保留字
1. 介绍
> 被java语言赋予特殊含义的单词
2. 特点
> 关键字中所有的字母都是小写
3. 官方地址:[Java关键字](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html)
1. 用于定义数据类型的关键字
- class
- interface
- enum
- byte
- short
- int
- long
- float
- double
- char
- boolean
- void
2. 用于定义流程控制的关键字
- if
- else
- switch
- case
- default
- while
- do
- for
- break
- continue
- return
3. 用于定义访问权限修饰符的关键字
- private
- protected
- public
4. 用于定义类、函数、变量修饰符关键字
- abstract
- final
- static
- synchronized
5. 用于定义类与类之间的关键字
- extends
- implements
6. 用于定义建立实例及引用实例,判断实例的关键字
- new
- this
- super
- instanceof
7. 用于异常处理的关键字
- try
- catch
- finally
- throw
- throws
8. 用于包的关键字
- package
- import
9. 其他修饰符关键字
- native
- strictfp
- transient
- volatile
- assert
10. ~~用于定义数据类型值的字面值~~
- true
- false
- null
11. 保留字:现有版本未使用,但后续版本可能会作为关键字
- goto
- const
#### 标识符
1. 介绍
1. java对各种变量、方法和类等要素命名时使用的字符序列称为标识符
2. 通俗来讲,凡是我们自己起名的都叫标识符
2. 合法标识符规则
1. 由26个英文字母大小写,0-9,_或者$组成。
2. 数字不可以开头。
3. 不可以使用关键字和保留字,但是可以包含。
4. 严格区分大小写,长度无限制。
5. 不可以包含空格
3. 命名规范
1. 包名:多个单词组成时所有字母小写。例:xxxyyy
2. 类名、接口名:多个单词组成时所有单词首字母大写。例:XxxYyy
3. 变量名、方法名:多个单词组成时第一个单词首字母小写,其余单词首字母大写。例:xxxYyy
4. 常量名:所有字母大写,多单词使用下划线连接。例:XXX_YYY
4. 注意
1. 起名时为了提高阅读性,要尽量有含义。见名思意。
2. java使用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。
#### 变量
1. 变量的概念
> 内存中一个区域中数据在同意范围内可以不断变化。变量是程序中最基本的的单元,包含变量类型、变量名、变量值
2. 变量的作用
> 用于在内存中存储数据
3. 使用变量注意
1. Java中每个变量必须先声明后使用
2. 使用变量名访问区域中的数据
3. 变量的作用域:其定义所在的一堆{}中
4. 变量只有其作用域中生效
5. 同一个作用域内,不能定义重名的变量
4. 变量的使用
> java定义变量的格式: 数据类型 变量名 = 变量值
```java
public class Demo1{
public static void main (String[] args) {
// 变量声明
int age;
// 变量赋值
age = 18;
// 变量声明和赋值
String name = "ZhangSan";
// 变量使用
System.out.println(age);
System.out.println(name);
}
}
```
5. 变量的数据类型
1. 按照数据类型区分
1. 基本数据类型
1. 数值型
1. 整数类型(byte,short,int,long)
1. byte(1个字节=8bit;-128~127)
2. short(2个字节)
3. int(4个字节)
4. long(8个字节):定义必须以l或者L结尾
> long i = 1234566L;
2. 浮点类型(float, double)
1. float(4个字节,单精度):定义必须以f或者F结尾
> float k = 12.3F;
2. double(8个字节,双精度,通常使用)
2. 字符型(char,1个字符=2个字节)
1. 定义char变量通常使用一对'',只能有一个字符。
> char c = 'C';
2. 表示方式
1. 一个字符`char c = 'C';`
2. 转义字符`char c = '\n';`
- \b:退格符
- \n:换行符
- \r:回车符
- \t:制表符
- \":双引号
- \':单引号
- \\:反斜线
3. 直接使用Unicode值表示字符型常量
> char c = '\u0043';
3. 字符集
- a: 97
- A: 65
3. 布尔值(boolean)
1. 只有2两个值:true false
2. 经常在条件判断、循环结构中使用
4. 基本数据类型转换
> 这里只讨论7钟基本数据类型变量间运算。不包含boolean
1. 自动类型提升
- byte/short/char->int->long->float->double
- 当容量小的数据类型变量与容量大的数据类型变量运算时,自动提升为容量大的数据类型
- 当byte/short/char做运算时,结果为int
3. 强制类型转换
- 自动类型转换的逆运算
- 需要使用强转符():值前面加(数据类型)
- 强制类型转换可能导致精度损失
> 这里的容量大小指数据范围大小
5. 实际使用
- 整形常量默认int
- 浮点常量默认double
2. 引用数据类型
1. 类(class)
1. String类型变量使用
- 属于引用数据类型
- 声明String类型变量时,使用一对""`String s = "ss";`
- String可以和8种基本类型做运算,运算只能是连接运算:+
- 运算结果都是String类型
2. 接口(interface)
3. 数组([])
2. 按照声明的位置
1. 成员变量
2. 局部变量
6. 进制与进制之间的转换
1. 所有计算机底层都是二进制形式存在
2. 生活中经常用到的是十进制
3. 整数四种表示方式
- 二进制(binary):0,1 满2进1 以0b或者0B开头表示
- 十进制(decimal):0-9 满10进1
- 八进制(octal):0-7满8进1 以数字0开头表示
- 十六进制(hex):0-9 A-F 满16进1 以0x或者0X开头表示 A-F不区分大小写
#### 运算符
1. 算数运算符
1. `+`:加
2. `-`:减
3. `*`:乘
4. `/`:除
- 注:整数/整数 = 整数 (12/5 = 2)
5. `%`:取模(取余) (12%5) = 1
- 结果的正负与被模数相同
6. `++`:
- 前++: 先加1再运算 `++i`
- 后++: 先运算后加1 `i++`
- 注:`short i = 1; i++;`不会改变本身变量的类型。
7. `--`:
- 前--: 先减1再运算 `--i`
- 后--: 先运算后减1 `i--`
- 注:`short i = 1; i--;`不会改变本身变量的类型。
8. `+`:连接
2. 赋值预算符
1. `=`:
- 当`=`两侧数据类型不一致时,可以使用自动类型转换或者强制类型转换
- 支持连续赋值`int i,j;i1 = i2 = 1;`
2. `+=`:`i += 1`=> `i = i + 1`
3. `-=`:``=> `i = i - 1`
4. `*=`:``=> `i = i * 1`
5. `/=`:``=> `i = i / 1`
6. `%=`:``=> `i = i % 1`
> 后五个不会改变本身变量类型
3. 比较运算符
1. `==`:等于
2. `!=`:不等于
3. `<`:小于
4. `>`:大于
5. `<=`:小于等于
6. `>=`:大于等于
7. `instanceof`:检查是否时类对象
> 比较运算符结果是boolean类型
4. 逻辑运算符
> 操作的都是boolean类型数据
1. `&`:逻辑与
- `true & true = true`
- `true & false = fa