数据类型
基本数据类型
四类八种基本数据类型:
| 数据类型 | 关键字 | 内存占用 | 取值范围 |
|---|---|---|---|
| 字节型 | byte | 1个字节 | -128~127 |
| 短整型 | short | 2个字节 | -32768~32767 |
| 整型 | int(默认) | 4个字节 | -231次方~2的31次方-1 |
| 长整型 | long | 8个字节 | -2的63次方~2的63次方-1 |
| 单精度浮点数 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
| 双精度浮点数 | double(默认) | 8个字节 | 4.9E-324~1.7977E+308 |
| 字符型 | char | 2个字节 | 0-65535 |
| 布尔类型 | boolean | 1个字节 | true,false |
Java中的默认类型:整数类型是int 、浮点类型是double 。
数据类型转换
自动转换
- 自动转换:将取值范围小的类型自动提升为取值范围大的类型 。
转换规则
范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为int 。
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
强制转换
强制类型转换:将取值范围大的类型强制转换成取值范围小的类型。
转换格式:数据类型 变量名 = (数据类型)被转数据值;
运算符
算数运算符
| 算数运算符 | 解释 |
|---|---|
| + | 加法运算,字符串连接运算 |
| - | 减法运算 |
| * | 乘法运算 |
| / | 除法运算 |
| % | 取模运算,两个数字相除取余数 |
| ++ 、 — | 自增自减运算 |
s += 1 可以看作s = (s本来类型)(s + 1),与s=s+1稍有区别
赋值运算符
| 赋值运算符 | 解释 |
|---|---|
| = | 等于号 |
| += | 加等于 |
| -= | 减等于 |
| *= | 乘等于 |
| /= | 除等于 |
| %= | 取模等 |
比较运算符
| 比较运算符 | 解释 |
|---|---|
| == | 比较符号两边数据是否相等,相等结果是true。 |
| < | 比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
| > | 比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
| <= | 比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。 |
| >= | 比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true。 |
| != | 不等于符号 ,如果符号两边的数据不相等,结果是true。 |
逻辑运算符
| 逻辑运算符 | 解释 | |
|---|---|---|
| && | 短路与 | 1. 两边都是true,结果是true 2.左边是false,结果是false 短路特点:符号左边是false,右边不再运算 |
| & | 非短路与 | 1. 两边都是true,结果是true 2.左边是false,结果是false 短路特点:符号左边是false,右边也要运算 |
| || | 短路或 | 1. 两边都是false,结果是false 2. 一边是true,结果是true 短路特点: 符号左边是true,右边不再运算 |
| | | 非短路或 | 1. 两边都是false,结果是false 2. 一边是true,结果是true 短路特点: 符号左边是true,右边也要运算 |
| ! | 取反 | 1. ! true 结果是false 2. ! false结果是true |
三元运算符
- 三元运算符格式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
流程控制
判断语句
格式一
if(关系表达式){语句体;}
格式二
if(关系表达式) {语句体1;}else {语句体2;}
格式三
if (判断条件1) {执行语句1;} else if (判断条件2) {执行语句2;}...}else if (判断条件n) {执行语句n;} else {执行语句n+1;}
选择语句 switch
switch(表达式) {case 常量值1:语句体1;break;case 常量值2:语句体2;break;...default:语句体n+1;break;}
循环语句
for循环
for(初始化表达式①; 布尔表达式②; 步进表达式④){循环体③}
while循环
初始化表达式①while(布尔表达式②){循环体③步进表达式④}
do while循环
初始化表达式①do{循环体③步进表达式④}while(布尔表达式②);
break
- 使用场景:终止switch或者循环
- 在选择结构switch语句中
- 在循环语句中
- 离开使用场景的存在是没有意义的
continue
- 使用场景:结束本次循环,继续下一次的循环
方法
方法的定义和调用
public static void main(String[] args) {//调用定义的方法operatoroperator();}//定义方法,方法中定义三元运算符public static void operator() {int i = 0;i = (1==2 ? 100:200);System.out.println(i);int j = 0 ;j = (3<=4 ? 500:600);System.out.println(j);}
方法的定义
- 定义格式:
修饰符 返回值类型 方法名 (参数列表){代码...return ;}
- 定义格式解释:
- 修饰符: 目前固定写法 public static 。
- 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者。
- 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
- 参数列表: 方法在运算过程中的未知数据,调用者调用方法时传递
- return:将方法执行后的结果带给调用者,方法执行到return ,整体方法运行结束。如果返回值类型是void,方法大括号内的return可以不写。
- 方法定义注意事项:
- 方法必须定义在一类中方法外
- 方法不能定义在另一个方法的里面
- 返回值类型,必须要和return 语句返回的类型相同,否则编译失败 。
- 不能在return 后面写代码, return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。
调用方法的三种形式
- 直接调用:直接写方法名调用
- 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
- 输出语句调用
方法重载
- 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
- 参数列表:个数不同,数据类型不同,顺序不同。
- 重载方法调用:JVM通过方法的参数列表,调用不同的方法。
数组
数组的声明-两种方式
type[] arrayName;type arrayName[]
数组的定义
方式一:动态初始化
- 格式:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度]; - 举例:
int[] arr = new int[3];
方式二:静态初始化(完整格式)
- 格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}; - 举例:
int[] arr = new int[]{1,2,3,4,5};
方式三:静态初始化(简化格式)
- 格式:
数据类型[] 数组名 = {元素1,元素2,元素3...}; - 举例:
int[] arr = {1,2,3,4,5};
数组的访问
- 索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
- 格式:
数组名[索引] - 获取数组的长度:
数组名.length,该结果为int类型 - 索引访问数组中的元素:
- 数组名[索引]=数值,为数组中的元素赋值
- 变量=数组名[索引],获取出数组中的元素
动态初始化的默认值
| 数据类型 | 默认初始化 |
|---|---|
| byte、short、int、long | 0 |
| foat、double | 0.0 |
| char | 一个空字符,即 ‘\u0000’ |
| boolean | false |
| 引用数据类型 | null,表示变量不引用任何对象 |
数组常见两种异常
数组越界异常
- 访问数组中不存在的索引,将会抛出
ArrayIndexOutOfBoundsException数组越界异常。
数组空指针异常
- 将
null赋值给一个数组变量,那么变量将不会在保存数组的内存地址,也就不允许再操作数组了。尝试访问该变量中的元素,会抛出NullPointerException空指针异常。
操作数组的工具类:Arrays
int binarySearch(type[] a, type key):使用二分法查询key元素值在a数组中出现的索引;如果a数组不包含key元素,则返回负数。调用该方法时要求数组中元素已经按升序排列,这样才能得到正确的结果。int binarySearch(type[] a, int fromIndex, int toIndex, type key):这个方法与int binarySearch(type[] a, type key)方法类似,但它只搜索a数组中fromIndex到toIndex索引的元素。调用该方法时要求数组中元素已经按照升序排序。type[] copyOf(type[] original, int length):这个方法将会把original数组复制成一个新数组,其中length是新数组的长度。如果length小于original数组的长度,则新数组就是原数组的前面length个元素;如果length大于original数组的长度,则新数组的前面元素就是原数组的所有元素,后面补充0(数值类型)、false(布尔类型)或者null(引用类型)。type[] copyOfRange(type[] original, int from, int to):这个方法与type[] copyOf(type[] original, int length)类似,但这个方法只复制original数组的from到to索引的元素。boolean equals(type[] a, type[] a2):如果a数组和a2数组的长度相等,而且a数组和a2数组的数组元素也一一相同,该方法将返回true。void fill(type[] a,type val):该方法将会把a数组的所有元素都赋值为val。void fill(type[] a, int fromIndex, int toIndex, type val):该方法将会把a数组的fromIndex到toIndex索引的数组元素赋值为val。void sort(type[] a):该方法对a数组的数组元素进行排序。void sort(type[] a, int fromIndex, int toIndex):该方法将会对a数组的fromIndex到toIndex索引的数组元素进行排序。String toString(type[] a):该方法将一个数组转换为一个字符串。按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号(,)和空格隔开。
Systeam类也包含数组复制的方法
static void arraycopy(Object src, int srcPos, Objject dest, int destPos, int length),该方法可以将src数组里的元素值赋给dest数组的元素,其中srcPos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素值赋给dest数组的元素。
