Javase学习第五天
Posted 艺海浮台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javase学习第五天相关的知识,希望对你有一定的参考价值。
数组
概念
是存储同一种数据类型多个元素的集合。它是在内存中开辟出的一段空间,这些空间在使用上是连续的,根据连续的下标值可以访问所有数组元素。
数组的类型:基本数据类型、引用数据类型;
定义格式
1、数据类型[] 数组名;推荐使用。
2、数据类型 数组名 [];
数组初始化
定义:
为数组中的数组元素分配内存空间,并为每个数组元素赋值 基本数据类型(byte、short、int、long、double、float)初始值为0;
Boolean初始化值为false;
应用数据类型(类、接口、数组)初始值为null;
方式分为:动态初始化、静态初始化两种;
过程:
动态:
数组创建和元素的赋值分开进行;先指定数组长度,由系统为数组分配默认初始值,可在以后再给元素赋其他值;
格式: 数据类型[] 数组名=new 数据类型[数组长度]; 分为三个步骤:
1、在栈空间定义一个变量(数组名),它没有指向任何值,它的值为null;
2、在堆空间中开辟出一堆空间,可以存放数组长度的变量,并将其中的元素赋初始值;
3、将数组的地址赋值给栈中的变量,也即将变量(数组名)指向它的首地址,也就是第一个值的地址。 注意:数组名(变量)的值是一个首地址;
静态:创建数组的同时进行元素赋值
java中内存分配
程序为了提高效率,对数据进行不同的空间分配,主要有5个区域:
1、堆:存放的是所有new出来的东西(包括成员变量);每个变量都有默认值;堆内存使用之后就成了垃圾。
2、栈:存放的是局部变量;
3、方法区:(后面补充)
4、本地方法区:和系统相关;
5、寄存器:供CPU使用
同类型数组变量之间互相赋值情况
数组常出现的异常
数组索引越界(ArrayIndexOutOfBoundsException): 访问到数组中的不存在的索引时发生,索引值超过了索引值的范围:-1,大于等于数组长度等;
空指针异常(NullPointerException):数组引用变量没有指向实体,且在操作实体中的元素;
数组元素逆序(把元素对调)
1 /** 2 数组元素逆序 3 4 */ 5 class Rev{ 6 public static void main(String []args){ 7 int [] a={1,2,3,4,5,6,7}; 8 Revs(a); 9 Array(Revs(a)); 10 } 11 public static int [] Revs(int [] arr){ 12 13 for(int i=0;i<arr.length/2;i++){ 14 int tem=arr[i]; 15 arr[i]=arr[arr.length-1-i]; 16 arr[arr.length-1-i]=tem; 17 } 18 return arr; 19 } 20 public static void Array(int [] arr){ 21 System.out.print("["+" "); 22 for(int i=0;i<arr.length;i++){ 23 if(i==arr.length-1){ 24 System.out.print(arr[i]+"]"); 25 } 26 else 27 System.out.print(arr[i]+","); 28 } 29 } 30 }
二维数组
格式:
数据类型[][] 变量名=new 数据类型[m][n];
m表示这个二维数组有多少个一维数组; n表示每一个一维数组的元素个数;
实例: int[][]arr=new int[3][2];
定义了一个二维数组arr;-->其有3个一维数组,名称是arr[0]、arr[1]、arr[2];-->每个一维数组有2个元素,可以通过arr[m][n]来获取。
另一格式:
数据类型[][]变量名=new 数据类型 [][]{{元素...},{元素...},,,{元素...}};
int[][]arr={{1,2,3},{4,5},{6}};
二维数组内存示意图
案例:
1 /** 2 定义一个int数组,5个元素,从键盘输入5个int值,保存到这个数组中,然后编写三个方法:分别用来对一个int型数组求最大值,最小值,平均值(注意返回值类型),调用这三个方法对输入的数组进行计算 3 */ 4 import java.util.Scanner; 5 class Calcu{ 6 public static void main(String []args){ 7 Scanner s=new Scanner(System.in); 8 System.out.println("input 1th num: "); 9 int a=s.nextInt(); 10 System.out.println("input 2th num: "); 11 int b=s.nextInt(); 12 System.out.println("input 3th num: "); 13 int c=s.nextInt(); 14 System.out.println("input 4th num: "); 15 int d=s.nextInt(); 16 System.out.println("input 5th num: "); 17 int e=s.nextInt(); 18 int [] arr={a,b,c,d,e}; 19 System.out.println("该数组的最大值是:"+getMax(arr)); 20 System.out.println("该数组的最小值是:"+getMin(arr)); 21 System.out.println("该数组的平均值是:"+getAve(arr)); 22 23 } 24 //求最大值 25 public static int getMax(int[] arr){ 26 int max=arr[0]; 27 for(int i=1;i<arr.length;i++){ 28 if(max<arr[i]){ 29 max=arr[i]; 30 arr[i]=max; 31 } 32 } 33 return max; 34 } 35 //求最小值 36 public static int getMin(int[] arr){ 37 int min=arr[0]; 38 for(int i=1;i<arr.length;i++){ 39 if(min>arr[i]){ 40 min=arr[i]; 41 arr[i]=min; 42 } 43 } 44 return min; 45 } 46 //求平均值 47 public static double getAve(int[] arr){ 48 double sum=0.0; 49 for(int i=0;i<arr.length;i++){ 50 sum +=arr[i]; 51 52 } 53 return sum/arr.length; 54 } 55 }
以上是关于Javase学习第五天的主要内容,如果未能解决你的问题,请参考以下文章