小白学习Java第五天

第五天
复习:

  • 循环嵌套
    外循环是行,内循环是列
  • 跳转语句
    break:循环或switch
    continue: 循环
    return: 方法
  • 方法
    定义在类中 ,与main平级,只有void(空)可以省略return,且无法在打印语句中使用。
    返回值类型只能大于等于return后的返回值类型。

目标:

  • 数组理解
  • 数组创建
  • 数组内存理解
  • 数组应用

一.数组理解
概念:是一个容器,可以存储多个数据。

特点:

  1. 存储的数据必须是相同类型
  2. 容器的大小是固定的
  3. 数组存储的每一个数据都有下标,通过下标操作数据,下标从0开始
    获取数组长度;数组名.length
    获取最大下标值:数组名.length-1
  4. 容器中既可以存储基本类型数据,也可以存储引用类型数据

二. 数组创建([]的位置不是固定的)=

动态定义:

元素类型[] 数组名 = new 元素类型[元素个数];
数组名[] = 元素1;
数组名[] = 元素2;
…

静态定义:

元素类型[] 数组名 = new 元素类型[]{元素1,元素2,元素3,…};
简写(不能拆开写):
元素类型[] 数组名 ={元素1,元素2,元素3,…};
public class Demo2{
	public static void main(String[] args){
		//动态定义:
		//格式:元素类型[]  数组名 = new 元素类型[元素个数];
		//创建一个数组容器,存储的数据的数据类型是int,存储3个,容器名是arr
		int[] arr =  new int[3];
//		int arr[] =  new int[3];
		//存数据,通过下标
		arr[0] = 98;
		arr[1] = 100;
		arr[2] = 123;

		//取数据,通过下标
		int x = arr[0];
		System.out.println("x = " + x);
		

		//静态定义:
		//元素类型[]  数组名 = new 元素类型[]{元素1,元素2,元素3,....};
		int[]  arr1 ;
		arr1 = new int[]{1,2,3,4,5};

		//取出并打印
		System.out.println(arr1[0]);
		//修改
		arr1[2] = 99;
		System.out.println(arr1[2]);

		//简写格式
		int[] arr2 = {2,3,4,5};
		System.out.println(arr2[3]);




		System.out.println("Hello World!");
	}
}

public class Demo3{
	public static void main(String[] args){
		int[]  arr = {1,2,3,4,4,5};

		//遍历数组元素,即输出打印每个元素
		for(int i = 0; i < arr.length; i++){
			System.out.println("arr["+i+"] = "+arr[i]);
		}

		//练习:输出数组元素,格式:{1,2,3,4,4,5}
//		System.out.print("{");
//		for(int i = 0; i < arr.length; i++){
//			if(i != arr.length-1)
//				System.out.print(arr[i]+",");
//			else
//				System.out.print(arr[i]);
//		}
//		System.out.print("}");

		String s = "";
		for(int i = 0; i < arr.length; i++){
			if(i != arr.length-1){
				s = s + arr[i]+",";
			}else{
				s = s + arr[i]+"}";
			}
		}

		System.out.println(s);



		System.out.println("Hello World!");
	}
}

三. 数组内存理解(数组是引用类型)

1.Jvm启动时,将内存划分了5块区域,不同区域做不同的管理,提高效率
有关:堆,栈,方法区; 无关:寄存器,本地方法区
2.栈:用来执行方法(不调用不进栈)
特点:先进的后出
局部变量:都有作用域,存储在栈中
3.堆:用来存储容器中的数据

1). 只要看见关键字new,说明都是在堆中开辟空间

2). 开辟空间就要占位置,分配内存地址

3). 在该空间中存储默认值

整数:0; float:0.0f; double:0.0; boolean:false; char:’\u0000’
引用:null
4. 堆中的容器没有被任何引用变量所指向,那么这个容器就是无用的
在java中有一个GC机制会不定时启动,处理堆中的无用容器,(c需要手动处理)
如何让容器成为无用: 引用变量值 = null
5. 方法的传递是参数传递类型:
1).值传递:指的是基本数据类型,对原来的变量没有影响
2).引用传递:指的是引用数据类型值(地址值)的传递,对原来变量有影响
6.操作数组容易出现的两个异常:
1).ArrayIndexOutOfBoundsException:是数组下标越界异常,操作了不存在的下标值
2).NullPointerException:是空指针异常,当程序试图在需要对象的地方使用null时

public class Demo7{
	public static void main(String[] args){
		int[] arr = {1,2,3};
		//System.out.println(arr[3]); //越界异常

		arr = null; // arr 和容器间没有指向关系了
		System.out.println(arr[0]);  //空指针异常
	}
}

[I@15db9742 : 
[ : 代表是数组,个数决定了是几维数组
I :大写i 数组中储存的数据的数据类型(或简写)
@:字符符号,占位符,拼接作用,无实际意义
15db9742 : 十六进制数据(0x在开头出现就代表16进制数),哈希码值
		默认不同的容器哈希码值不同
public class Demo4{
	public static void main(String[] args){
		//创建一个数组
		int[] arr = new int[3];
		System.out.println(arr);
		System.out.println(arr[0]); //0
		/*
		[I@15db9742
		  [ : 代表是数组,个数绝对了是几维数组。一维数组
		  I : 数组中存储的数据的数据类型的简写
		  @ : 字符符号,占位符,用来做拼接的没啥实际意义
		15db9742 :十六进制数据,哈希码值
		          默认不同的容器哈希码值不相同
		*/

		int[] arr1 = arr; //将arr的值赋值给arr1
		                  //两个引用指向同一个容器

		arr[0] = 99;
		System.out.println(arr1[0]);//99

		int[] arr2 = new int[3];
		System.out.println(arr2[0]); //0

		
//		String[] arr1 = new String[2];
//		System.out.println(arr1);
//		System.out.println(arr1[0]);
	}

	

}

四.数组的应用
遍历数组的元素,寻找最值,是否包含指定数值,反转数组

public class Demo5{
	public static void main(String[] args){
		int[] arr = {2,6,4,90,9,7,78};  
//		int max = getMax(arr);
//		System.out.println("最大值是:"+max);

//		int min = getMin(arr);
//		System.out.println("最小值是:"+min);

//		int index = findArray(arr, -7);
//		System.out.println("index = " + index);

//		int a = 10, b = 20;
//		int temp = a;
//		a = b;
//		b = temp;

		arr = reverse(arr);
		printArray(arr);

	}
	
	//反转数组元素,即首尾交换
	public static int[] reverse(int[] arr){
		for(int i = 0; i < arr.length/2; i++){
			int temp = arr[i];
			arr[i] =arr[arr.length-1-i];
			arr[arr.length-1-i]=temp;
		}

		return arr;
	}

//	public static void  reverse(int[] arr){
//		//反转
//		for(int i = 0; i < arr.length/2; i++){
//			int temp = arr[i];
//			arr[i] =arr[arr.length-1-i];
//			arr[arr.length-1-i]=temp;
//		}
//		//遍历数组
//		printArray(arr);
//	}

	public static void  printArray(int[] arr){
		for(int i = 0; i < arr.length; i++){
			System.out.print(arr[i]+"  ");
		}

		System.out.println();//回车
	}




	//封装方法,查找数组中是否包含指定的数据,包含返回对应的下标,不包含返回常量值-1.
	public  static  int  findArray(int[] arr, int key){
		for(int i = 0; i < arr.length; i++){
			if(arr[i] == key){
				return i;
			}
		}
		return -1;
	}


	//获取数组元素的最值问题
	public static  int  getMax(int[] arr1){ //arr1 = arr  引用传递(两个引用指向的是同一个数组容器)
		int max = arr1[0]; //默认第一个数组最大
		for(int i = 1; i < arr1.length; i++){
			if(max < arr1[i])
				max = arr1[i];
		}

		return max;

	}

	public static  int  getMin(int[] arr1){ //arr1 = arr  引用传递(两个引用指向的是同一个数组容器)
		int min = arr1[0]; //默认第一个数组最小
		for(int i = 1; i < arr1.length; i++){
			if(min > arr1[i])
				min = arr1[i];
		}

		return min;

	}

}
public class Demo6{
	public static void main(String[] args){
//		int a = 10;
//		test(a);
//		System.out.println("a = " +a);//10
	
		int[] array = {1,2,3};
		test1(array);
		System.out.println(array[0]); // 100
	}


	public static  void  test1(int[] arr){ //arr = array,两个引用指向同一容器
		arr[0] = 100;
	}

	public static  void  test(int b){ //b=a,不影响原值
		b = 100;
	}

}

二维数组

public class Demo7 {
    public static void main(String[] args) {
        //定义二维数组
        int[][] arr = {{1,2,3},{4,5,6,7},{8,9,0}};

        //遍历二维数组
        //求和  求平均值
        int sum = 0; //和
        int  count = 0; //计数器
        for(int i = 0; i < arr.length; i++){ //行
            for(int j = 0 ;j < arr[i].length; j++){  //列
                System.out.print(arr[i][j]+"  ");
                sum = sum + arr[i][j];
                count++;
            }
        }

        System.out.println("\nsum = " + sum);
        System.out.println("avg = " + (sum/count));

        //for-each实现遍历
        for(int[] a:arr){
            for( int  b : a){
                System.out.println(b);
            }
        }


//        for (int i = 0; i < arr.length; i++){
//            System.out.println(arr[i]);
//        }
//
//        for (int j = 0; j < arr[0].length; j++){
//            System.out.println(arr[0][j]);
//        }
       /* System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println(arr[0][2]);

        System.out.println(arr[1][0]);
        System.out.println(arr[1][1]);
        System.out.println(arr[1][2]);
        System.out.println(arr[1][3]);*/
    }
}

```java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值