Java基础系列第一章 初识Java语言
Java基础系列第二章 Java语言基础
目录
- 数据类型
- 基本数据类型
- 数据类型转换
- 常量与变量
- 运算符与表达式
- 算数运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符与扩展赋值运算符
- 条件运算符
- 运算符优先级
- Java关键字
数据类型
Java语言的数据类型分为两大类:
- 基本数据类型:在声明时会先分配内存空间,其大小固定,在内存中存放的是数据值本身。目前Java有整形:byte、short、int、long,浮点型:float、double,布尔型:boolean,字符型:char八种基本数据类型。
- 引用数据类型:在声明时不会先分配内存空间,必须另外指定内存空间,引用数据类型在内存中存放的是指向该数据的地址,不是数据值本身。
整型
byte:字节型,是最小的整数类型,所占位数为8位,默认值0。取值范围为-128 ~ 127。常用于处理数据流。
short:短整型,所占位数16位,默认值0。取值范围为-32768 ~ 32767。主要用于16位计算机(目前很少用)。
int:整型,所占位数32位,默认值0。取值范围为-2147483648 ~ 2147483647。常用于计数、数组下标、长度等(比较常用)。
long:长整型,所占位数64位,默认值0L。取值范围为-9223372036854775808 ~ 9223372036854775807。常用于时间戳等(比较常用)。
浮点型
float:单精度浮点型,所占位数32位,默认值0.0f。取值范围为1.4E-45 ~ 3.4028235E38,常用于对小数位精度要求不是很高的数字。
double:双精度浮点型,所占位数64位,默认值0.0d。取值范围为4.9E-324 ~ 1.7976931348623157E308,常用于计算精确度要求很高的情况。
字符型
char:字符型,所占位数16位,默认值空。取值范围为0 ~ 65535.。
布尔型
boolean:布尔型,只有true和false两个值,默认值false。常用于流程控制、判断等(比较常用)。
数值型常量的特殊值代码
| 数据类型 | 所在的类 | 最小值代码 | 最大值代码 |
|---|---|---|---|
| byte | java.lang.Byte | Byte.MIN_VALUE | Byte.MAX_VALUE |
| short | java.lang.Short | Short.MIN_VALUE | Short.MAX_VALUE |
| int | java.lang.Integer | Integer.MIN_VALUE | Integer.MAX_VALUE |
| long | java.lang.Long | Long.MIN_VALUE | Long.MAX_VALUE |
| float | java.lang.Float | Float.MIN_VALUE | Float.MAX_VALUE |
| double | java.lang.Double | Double.MIN_VALUE | Double.MAX_VALUE |
因为Java数据类型在定义时已经确定了,因此不能随意转换,但Java允许用户有限的进行数据类型转换。在所有基本数据类型中只有Boolean不能转换,其他都可进行转换。转换因级别、类型的不同区分"自动转换"和"强制转换"。
- 自动转换:进行转换的两种类型兼容且目标类型的范围大于源类型的范围。转换不损失精度,也叫隐式转换。
public static void main(String[] args){
byte a = 1; // 定义byte类型
int b = a; // byte自动转换为int
long c = b; // int自动转换为long
double d = b; // int自动转换为double
}
- 强制转换:不满足类型自动转换的条件下仍然希望进行类型转换。转换有可能会损失精度,也叫显示转换。
public static void main(String[] args){
float a = 1.1f; // 定义float类型
int b = (int)a; // float强制转换为int
}
常量与变量
常量和变量都时程序设计人员用来存取内存中数据内容的一个标识码,他们最大的区别是常量会固定不变,变量会根据程序的执行而改变。
- 常量:在程序执行中不能被修改的固定值。常量也分类型,包含整型、浮点型、布尔型、字符型和字符串型。使用常量好处:增加可读性,增强可维护性。常量声明只需要使用关键字final即可,如:final int A = 1;
- 变量:在程序执行中大多会变化的值。变量可以是任意类型。一般程序都会有变量,使用变量需先声明后使用。在变量声明的时候也可以给变量赋初值(变量初始化),后面根据需要再进行变量的赋值即可。
在程序中要实现运算就得有运算符。运算符按功能分可分为以下几类:
- 算数运算符:+、-、*、/、%、++、–。
- 关系运算符:>、<、>=、<=、==、!=。
- 逻辑运算符:!、&&、||、&、|。
- 位运算符:>>、<<、>>>、&、|、^、~。
- 赋值运算符:=。
- 扩展赋值运算符:+=、/= 等。
- 条件运算符(三元运算符):? : 。
算数运算符分一元运算符(只有一个操作数参与运算)和二元运算符(有两个操作数参与运算)。
一元运算符
| 运算符 | 功能 | 示例 |
|---|---|---|
| + | 正值 | +a |
| - | 负值 | -a |
| ++ | 加1 | ++a 或 a++ |
| – | 减1 | –a 或 a– |
二元运算符
| 运算符 | 功能 | 示例 |
|---|---|---|
| + | 加运算 | a + b |
| - | 减运算 | a - b |
| * | 乘运算 | a * b |
| / | 除运算 | a / b |
| % | 取模运算(求余运算) | a % b |
| 运算符 | 功能 | 示例 |
|---|---|---|
| > | 大于 | a > b |
| >= | 大于等于 | a >= b |
| < | 小于 | a < b |
| <= | 小于等于 | a <= b |
| == | 等于 | a == b |
| != | 不等于 | a != b |
| 运算符 | 功能 | 示例 | 运算规则 |
|---|---|---|---|
| & | 逻辑与 | a & b | 两个操作均为真时,结果才是真 |
| | | 逻辑或 | a | b | 两个操作均为否时,结果才是否 |
| ! | 逻辑非 | !a | 将操作数取反 |
| ^ | 异或 | a ^ b | 两个操作同真或同否时,结果才是否 |
| && | 简洁与 | a && b | 两个操作均为真时,结果才是真 |
| || | 简洁或 | a || b | 两个操作均为否时,结果才是否 |
| 运算符 | 功能 | 示例 | 运算规则 |
|---|---|---|---|
| ~ | 按位取反 | ~a | 将a按位取反 |
| & | 按位与 | a & b | 将a和b按比特位相与 |
| | | 按位或 | a | b | 将a和b按比特位相或 |
| ^ | 按位异或 | a ^ b | 将a和b按比特位异或 |
| >> | 右移 | a >> b | 将a各比特位向右移b位 |
| << | 左移 | a << b | 将a各比特位向左移b位 |
| >>> | 0填充右移 | a >>> b | 将a各比特位向右移b位,左边空位一律以0填充 |
赋值运算符:“=”,格式为:变量或者对象=表达式。
扩展运算符及等效表达式
| 运算符 | 示例 | 等效表达式 |
|---|---|---|
| += | a += b | a = a + b |
| -= | a -= b | a = a - b |
| *= | a *= b | a = a * b |
| /= | a /= b | a = a / b |
| %= | a %= b | a = a % b |
| &= | a &= b | a = a & b |
| |= | a |= b | a = a | b |
| ^= | a ^= b | a = a ^ b |
| >>= | a >>= b | a = a >> b |
| <<= | a <<= b | a = a << b |
| >>>= | a >>>= b | a = a >>> b |
条件运算符:“? :”,也叫三元运算符,格式为:表达式1?表达式2 : 表达式3,功能是计算表达式1的值,当表达式1为真时,表达式2为整个表达式的值,否则表达式3为整个表达式的值。
运算符优先级各运算符的优先级(从上到下,从左到右,优先级从高到底),虽然运算符有优先级,但是在多计算时,还是用括号来控制运算顺序可读性高些。
| 优先级 | 运算符 |
|---|---|
| 1 | [ ]、( ) |
| 2 | ++、–、!、! |
| 3 | *、/、% |
| 4 | +、- |
| 5 | >>、>>>、<< |
| 6 | >、<、>=、<= |
| 7 | ==、!= |
| 8 | & |
| 9 | ^ |
| 10 | | |
| 11 | && |
| 12 | || |
| 13 | ? : |
| 14 | =、+=、-=、*=、/=、%=、^= |
| 15 | &=、|=、<<=、>>=、>>>= |
| 关键字 | 含义 |
|---|---|
| abstract | 表明类或者成员方法具有抽象属性 |
| assert | 断言,用来进行程序调试 |
| boolean | 基本数据类型之一,声明布尔类型的关键字 |
| break | 提前跳出一个块 |
| byte | 基本数据类型之一,字节类型 |
| case | 用在switch语句之中,表示其中的一个分支 |
| catch | 用在异常处理中,用来捕捉异常 |
| char | 基本数据类型之一,字符类型 |
| class | 声明一个类 |
| const | 保留关键字,没有具体含义 |
| continue | 回到一个块的开始处 |
| default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
| do | 用在do-while循环结构中 |
| double | 基本数据类型之一,双精度浮点数类型 |
| else | 用在条件语句中,表明当条件不成立时的分支 |
| enum | 枚举 |
| extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
| final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
| finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
| float | 基本数据类型之一,单精度浮点数类型 |
| for | 一种循环结构的引导词 |
| goto | 保留关键字,没有具体含义 |
| if | 条件语句的引导词 |
| implements | 表明一个类实现了给定的接口 |
| import | 表明要访问指定的类或包 |
| instanceof | 用来测试一个对象是否是指定类型的实例对象 |
| int | 基本数据类型之一,整数类型 |
| interface | 接口 |
| long | 基本数据类型之一,长整数类型 |
| native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
| new | 用来创建新实例对象 |
| package | 包 |
| private | 一种访问控制方式:私用模式 |
| protected | 一种访问控制方式:保护模式 |
| public | 一种访问控制方式:共用模式 |
| return | 从成员方法中返回数据 |
| short | 基本数据类型之一,短整数类型 |
| static | 表明具有静态属性 |
| strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
| super | 表明当前对象的父类型的引用或者父类型的构造方法 |
| switch | 分支语句结构的引导词 |
| synchronized | 表明一段代码需要同步执行 |
| this | 指向当前实例对象的引用 |
| throw | 抛出一个异常 |
| throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
| transient | 声明不用序列化的成员域 |
| try | 尝试一个可能抛出异常的程序块 |
| void | 声明当前成员方法没有返回值 |
| volatile | 表明两个或者多个变量必须同步地发生变化 |
| while | 用在循环结构中 |



