数据类型

基本数据类型

四类八种基本数据类型:

数据类型 关键字 内存占用 取值范围
字节型 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

流程控制

判断语句

格式一

  1. if(关系表达式){
  2. 语句体;

格式二

  1. if(关系表达式) {
  2. 语句体1;
  3. }else {
  4. 语句体2;
  5. }

格式三

  1. if (判断条件1) {
  2. 执行语句1;
  3. } else if (判断条件2) {
  4. 执行语句2;
  5. }
  6. ...
  7. }else if (判断条件n) {
  8. 执行语句n;
  9. } else {
  10. 执行语句n+1;
  11. }

选择语句 switch

  1. switch(表达式) {
  2. case 常量值1:
  3. 语句体1;
  4. break;
  5. case 常量值2:
  6. 语句体2;
  7. break;
  8. ...
  9. default:
  10. 语句体n+1;
  11. break;
  12. }

循环语句

for循环

  1. for(初始化表达式①; 布尔表达式②; 步进表达式④){
  2. 循环体③
  3. }

while循环

  1. 初始化表达式①
  2. while(布尔表达式②){
  3. 循环体③
  4. 步进表达式④
  5. }

do while循环

  1. 初始化表达式①
  2. do{
  3. 循环体③
  4. 步进表达式④
  5. }while(布尔表达式②);

break

  • 使用场景:终止switch或者循环
    • 在选择结构switch语句中
    • 在循环语句中
    • 离开使用场景的存在是没有意义的

continue

  • 使用场景:结束本次循环,继续下一次的循环

方法

方法的定义和调用

  1. public static void main(String[] args) {
  2. //调用定义的方法operator
  3. operator();
  4. }
  5. //定义方法,方法中定义三元运算符
  6. public static void operator() {
  7. int i = 0;
  8. i = (1==2 ? 100:200);
  9. System.out.println(i);
  10. int j = 0 ;
  11. j = (3<=4 ? 500:600);
  12. System.out.println(j);
  13. }

方法的定义

  • 定义格式:
  1. 修饰符 返回值类型 方法名 (参数列表){
  2. 代码...
  3. return ;
  • 定义格式解释:
    • 修饰符: 目前固定写法 public static 。
    • 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者。
    • 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
    • 参数列表: 方法在运算过程中的未知数据,调用者调用方法时传递
    • return:将方法执行后的结果带给调用者,方法执行到return ,整体方法运行结束。如果返回值类型是void,方法大括号内的return可以不写。
  • 方法定义注意事项:
    • 方法必须定义在一类中方法外
    • 方法不能定义在另一个方法的里面
    • 返回值类型,必须要和return 语句返回的类型相同,否则编译失败 。
    • 不能在return 后面写代码, return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。

调用方法的三种形式

  • 直接调用:直接写方法名调用
  • 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
  • 输出语句调用

方法重载

  • 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
  • 参数列表:个数不同,数据类型不同,顺序不同。
  • 重载方法调用:JVM通过方法的参数列表,调用不同的方法。

数组

数组的声明-两种方式

  1. type[] arrayName;
  2. 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数组的元素。