java基础总结四(数组、switch语句)

来源:互联网 发布:国际网络加速器 编辑:程序博客网 时间:2024/05/17 09:29

一:switch语句


1.选择结构_switch概念

在现实业务中,许多场景需要我们从多个固定的值中选出一个,执行该数值对应的操作。比如,在一周七天,当输入1-7会打印不同的星期。

对应这样的业务场景,我们可以使用switch选择结构


2.格式switch格式

以下为switch语句的格式:

switch (表达式){

case 目标值1:

执行语句1

break;

case 目标值2:

执行语句2

break;

......

case 目标值n:

执行语句n

break;

default:

执行语句n+1

break;

}

在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没找到任何匹配的值,就会执行default后的语句。break的作用是跳出switch语句。

3.switch注意事项

l 在switch语句中的表达式只能是byteshortcharintenum枚举(JDK1.5)、字符串(JDK1.7)类型的值,如果传入其它类型的值,程序会报错。

l 如同if语句当中的elsedefault不是必须存在的

l 与if语句不同,switch语句只能完成具体值的选择,而不能指定取值区间

case条件只判断一次,再判断完一次case条件后,所有的case判断语句将不再起作用,而剩余语句征程执行。这是switch语句的穿透。

二:数组

1.数组概念

软件的基本功能是处理数据,而在处理数据时,必须先进行数据持有,将数据持有之后,再对数据进行处理。我们将程序中可以临时存储数据的部分叫做容器。

Java当中具有持有数据功能的容器中,数组是最基本的,也是运算速度最快的。

2.数组的定义格式

数组是引用类型的一种,其使用方式与引用类型类似,均使用new关键字创建对象为变量赋值。

数据类型[] 数组名= new数据类型[元素个数或数组长度];

 

示例:int[] arr = new int[5];

还有其他格式如下:

int[] arr = new int[]{20,5,100,30,5}

int[] arr = {20,5,100,30,5}

int arr[] = new int[4];//源码中经常会看到的定义方式

3.数组的使用格式

数组底层是依次将数据进行编号后直接通过编号访问(线性序列)的。这个编号叫做索引。索引从0开始计数。访问数组中指定编号的元素:数组名[索引]

如:

int[] arr = {20,5,100,30,5};

arr[0]访问的为20arr[2]访问的100

 

这里的”访问”包含以下两个动作:获取值与赋值。如:

为元素赋值: arr[1] = 33;  则第2个元素5会被33替代。

获取元素的值:  int x = arr[3];  x的值为30

 

使用数组名.length可以获取数组长度。

 

直接打印数组名是获取了数组的堆内存地址值(内存图详细了解)

4.数组的注意事项

4.1 数组的长度是固定的

数组在创建对象过程当中,必须指定数组长度,无法创建对象进而无法给变量赋值。

4.2 一个数组中只能存储一种类型的数据

在数组的定义格式中有显式地写出该数组中存储的数据类型,所以一个数组只能存储同一种数据类型。(在多态的讲解后,我们会有新的理解)

4.3 数组内元素均有默认初始化值

在创建数组对象后,数组中元素会被自动赋予一个默认值,这个过程叫做默认初始化。根据元素类型的不同,默认初始化的值也是不一样的。具体如下表所示。



5.数组运行期报错

在使用数组时,因为不当的操作,我们可能会通过编译,但是在运行期间遇到一些程序报错类似这样编译时不报错,运行期报错的错误叫运行时错误

数组最常见的两个运行时错误:空指针异常和数组索引越界异常

5.1 空指针异常

编程语言中对空的处理与我们平常所理解的略有不同。这里我们区分两种空的不同

变量完全没有值:

定义了变量根本没有值:int a;  int[] b

这样根本没有赋值过的变量是无法使用的。数组也是一种数据类型,可以指定变量,没有赋值是不能使用的。

 

变量有值,但值为null

定义了变量并且赋值了,但是值是空值,是常量。这种情况只针对于引用数据类型,基本数据类型不成立。

int a = null; 编译失败

int[] arr = null; 正常赋值

当使用int[] arr = nullarr赋值时,变量arr作为数组名通过编号访问数组元素时编译不报错,运行时报运行错误NullPointerException空指针异常

5.2 数组索引越界异常

当数组中不存在该索引却访问该索引时,运行时报错:

ArrayIndexOutOfBoundsException 数组索引越界

 

6. 数组的内存解释

6.1 内存分区

内存是计算机临时存储数据的区域,我们会将内存在逻辑上分配成不同区域方便对数据进行分类高效管理。

• 寄存器:最快的存储区域直接与CPU打交道,是程序员无法控制的计算区域。

• 堆栈:又叫栈,仅次于寄存器。用于存储局部变量。

• 堆:通用内存池,用于存放所有引用数据类型对象。每个对象均有地址,且有默认初始化值。

• 常量存储区域:用于存放永远不会被改变的值。

6.2 引用数据类型数组的内存图

数组是我们系统介绍的第一个引用数据类型,了解内存结构将有助于后期整个面向对象的学习。

int[] x = new int[100];

 

• 引用变量:数组属于引用数据类型,引用数据类型定义的变量x存储在栈内存当中,这个x变量叫做这个数组实例的引用变量。

• =:与数学当中的意义不同,是赋值的意思,并非相等。

• 真正的数组实例是通过new关键字创建出来,存储于堆内存中,并产生一个十六进制表示的内存地址0x3000

• 这个引用变量会指向这个数组的内存地址

则引用变量的值是这个数组实例的地址值,引用变量通过地址可以表示这个数组对象



7.数组遍历

在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。如:

public class Demo {

   public static void main(String[] args) {

      int[] arr = { 1, 2, 3, 4, 5 };//定义数组

      // 使用for循环遍历数组的元素

      for (int i = 0; i < arr.length; i++) {

        System.out.println(arr[i]);//通过索引访问元素

   }

  }

}

运行结果如下图所示:


上述代码中,定义一个长度为5的数组arr,数组的角标为0~4。由于for循环中定义的变量i的值在循环过程中为0~4,因此可以作为索引,依次去访问数组中的元素,并将元素的值打印出来。


7.二维数组

7.1 二维数组概念

当数组中存储的元素类型仍然为数组时,该数组称为二维数组。

7.2 二维数组定义和使用格式

 

二维数组可有三种定义方式。

a) 第一种方式

int[][] arr = new int[3][4];

上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组,接下来通过一个图来表示这种情况,如下图所示。



b) 第二种方式

int[][] arr = new int[3][];

第二种方式和第一种类似,只是数组中每个元素的长度不确定,接下来通过一个图来表示这种情况,如下图所示。


c) 第三种方式

int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

上面的二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}{3,4,5,6}{7,8,9},接下来通过一个图来表示这种情况,如图2-54所示。


8.二维数组的元素访问

对二维数组中元素的访问也是通过索引的方式,如需访问二维数组中第一个元素数组的第二个元素,具体代码如下:

arr[0][1];  //访问的为二维数组中第1个一维数组的第2个元素

请参照以为数组的遍历求和,完成二维数组的遍历求和。

9.随机数:Random

生成随机数需要使用到引用类型随机数Random类。

 

Random使用方式:

导包:所属包java.util. Random  

创建实例格式:Random  random = new Random ();

调用方法:

nextInt(int maxValue) 产生[0,maxValue)范围的随机数

nextDouble()  产生[0,1)范围的随机数

如:

Random  random = new Random ();

int  myNumber = random.nextInt(100);//结果为0-99的一个数

double myNumber2 = random.nextDouble();//结果为0-1之间的一个小数