先来看看Java基础知识框架图
从图中可以看出,Java的基础知识分为4个部分,该篇会讲解Java的基础语法
- 基础语法
- 面向对象
- 高级知识
- 新特性
一、关键字和保留字
1、关键字(keyword)
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都是小写
按照关键字用途分类可以分为如下几类:
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
2、保留字(reserved word)
定义:当前Java版本没有使用,以后版本可能会作为关键字
特点:单词字母都是小写
如:goto、const
二、标识符(Identifier)
定义:对类、变量、方法等命名时使用的字符序列称为标识符,一句话就是反是自己需要起名字的地方都叫标识符
标识符定义需要满足以下规则:
- 由26个英文字母大小写,0-9,_ 或 $ 组成
- 不能以数组开头
- 不可以使用Java中的关键字和保留字,但能包含关键字和保留字
- Java中严格区分大小写,长度无限制
- 标识符包含空格
Java中名称的命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
三、变量
基本概念:
- 内存中的一个存储区域
- 该区域的数据可以在同一个类型范围内不断变化
- 变量是程序中最基本的存储单元
变量的声明和初始化:变量类型 变量名 = 存储的值;
变量的作用:用于内存中存储数据
1、变量的分类
可以按照数据类型和声明位置两种区分:
1、按数据类型区分:
2、按照声明位置区分:
- 在方法体外,类体内声明的变量称为成员变量。
- 在方法体内部声明的变量称为局部变量。
注意:局部变量的声明需要进行初始化。
2、变量的类型详解
Java8大基本数据类型占用存储空间和容量范围:
1)整数类型
类型 | 占用存储空间 | 容量范围 |
---|---|---|
byte | 1字节(8bit) | -128~127 |
short | 2字节 | xxx |
int | 4字节 | xxx |
long | 8字节 | xxx |
注意:基本类型是long声明的变量初始值需要加L用以区分为是long类型(不强制)
2)浮点类型
类型 | 占用存储空间 | 容量范围 |
---|---|---|
float | 4字节 | xxx |
double | 8字节 | xxx |
注意:Java中浮点类型默认为double类型。声明float型变量需要加’F’或者’f’(强制)
3)字符类型
类型 | 占用存储空间 | 容量范围 |
---|---|---|
char | 2字节 | xxx |
char类型表示的是一个字符,在Java中采用的unicode编码,所以一个字符可以存储一个汉字是2字节。
字符型有三种初始化的表现形式:
- 使用单引号’’ 将字符包括起来。例如:char c = ‘a’; char c1 = ‘哈’; char c2 = ‘6’
- Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n’表示换行符
- 直接使用unicode来进行表示字符. 例如 char c4 = ‘\u000a’; \u000a 表示 \n。
注意char类型可以进行运算的。因为他都对应有unicode码。
4)布尔类型
boolean 类型用来判断逻辑条件,它有两种取值,true和false
3、数据类型转换
数据类型转换有两种,第一种是将容量小的转换为容量大的,第二种则是将容量大的转换为容量小的也叫强制类型转换。
1、基本数据类型转换
定义:容量小的类型自动转换为容量大的数据类型。
如图所示,这张图表示的是数据类型之间的转换从小到大的一个排序。
注意的情况如下:
- 多种类型的数据混合运算时,首先自动将所有数据转换成容量最大的那种数据类型。
- byte、short、char之间级别相同,不会相互转换,都是使用int类型。
- boolean类型不能与其他数据类型运算。
- 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。
2、强制类型转换
强制类型转换是自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。
注意:应用类型字符串String转换为int类型需要使用基本类型对应的包装类进行转换为基本类型。
四、运算符
运算符是一种特殊的符号,用以表示数据的运算,赋值和比较等操作。
1、算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 符号 | -3 | -3 |
+ | 加 | 6 + 6 | 12 |
- | 减 | 6 - 4 | 2 |
* | 乘 | 6 * 6 | 36 |
/ | 除 | 5 / 5 | 1 |
% | 取余(取模) | 7 % 5 | 2 |
++ | 自增(前):先运算后取值 | a = 2; b = ++a; | a = 3, b = 3 |
++ | 自增(后):先取值后运算 | a = 2; b = a++; | a = 3, b = 2 |
– | 自减(前):先运算后取值 | a = 2; b = --a; | a = 1, b = 1 |
– | 自减(后):先取值后运算 | a = 2; b = a–; | a = 1, b = 2 |
+ | 字符串连接 | “Hello” + “World” | “HelloWrold” |
2、赋值运算符
符号:=
赋值运算符是r -> l 从右到左,当两边的数据类型不一致时,可以使用自动转换或者强制转换进行处理。支持连续赋值。
扩展赋值运算符:+=、-=、*=、/=、%=
3、比较运算符(关系运算符)
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | false |
!= | 不等于 | 4 != 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 3 | true |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
4、逻辑运算符&位运算符
& 逻辑与 | 逻辑或 !逻辑非 && 短路与 || 短路或 ^ 逻辑异或
“&” 和 “&&” 的区别:
单&时,左边无论真假,右边都要进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|” 和 “||” 的区别同理,||表示:当左边为真,右边不参与运算。
运算符 | 运算 | 范例 |
---|---|---|
<< | 左移 | 3 << 2 = 12 |
< | 右移 | 3 >> 1 = 1 |
>>> | 无符号又移 | 3 >>> 1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 | 3 = 7 |
^ | 异或运算 | 6 ^ 3 = 5 |
! | 取反运算 | ~6 = -7 |
位运算符的细节
<< | 空位补0,被移除的高位丢弃,空缺位补0 |
---|---|
>> | 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1 |
>>> | 被移位二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 二进制为进行&运算,只有1&1时结果是1,否则是0; |
| | 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; |
^ | 相同二进制为进行 ^ 运算,结果是0;1 ^ 1 = 0, 0 ^ 0 = 0,不相同二进制位 ^ 运算结果是 1. 1^0 = 1, 0^1 = 1 |
~ | 正数取反,各二进制码按补码各位取反。负数取反,各二进制码按补码各位取反 |
5、三元运算符
格式:(条件表达式)?表达式1:表达式2;
- 如果条件表达式为true,运算后的结果是表达式1,否则运算的结果为表达式2;
- 表达式1和表达式2为同种类型
- 三元运算符与if-else的联系与区别:
- 三元运算符可简化if-else语句
- 三元运算符要求必须返回一个结果。
- if后的代码块可有多个语句
运算符优先级
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
五、程序流程控制
1、顺序结构
- 程序从上到下逐行地执行,中间没有任何判断和跳转。
2、分支结构
- 根据条件,选择性地执行某行代码。
- 有if…else和switch-case两种分支语句。
3、循环结构
- 根据循环条件,重复性的执行某段代码。
- 有while、do…while、for三种循环语句。
- 住:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。