Java基础知识学习03-数组

数组

定义格式:数据类型[ ]  数组名 = new  数据类型[元素个数或数组长度];

   说明数组在创建过程中内存的分配情况

   JVM对自己的内存进行了划分,分成了5个区域:

寄存器:内存和CPU之间。

本地方法栈JVM调用了系统中的功能。

方法和数据共享:运行时期,class文件进入的地方。

方法栈:所有的方法运行的时候,进入的内存。

:存储的是容器和对象。

   如:int[] x = new int[];

    int[] x :  声明了一个变量x,该变量的类型为int[],即一个int类型的数组。变量x会占用一块内存单元,它没有被分配初始值。内存中的状态如下图所示。

  new int[] :创建了一个数组,将数组的地址赋值给变量x。在程序运行期间可以使用变量x来引用数组,这时内存中的状态会发生变化,如下图所示

在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式称作动态初始化

静态初始化:

1、类型[] 数组名 = new 类型[]{元素,元素,……};

2、类型[] 数组名 = {元素,元素,元素,……};

二维数组

 数组类型[ ] [ ]  数组名= new 数据类型[行的个数][列的个数];

或者   数据类型[ ] [ ]  数组名;

         数组名=new  数据类型[行的个数][列的个数];

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

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

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

数组常见问题(最值获取,数组遍历,数组排序)

数组最值

public class ArrayDemo05 {

public static void main(String[] args) {

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

    int max = arr[0]; // 定义变量max用于记住最大数,首先假设第一个元素为最大值

    for (int x = 1; x < arr.length; x++) {

          if (arr[x] > max) { // 比较 arr[x]的值是否大于max

             max = arr[x]; // 条件成立,将arr[x]的值赋给max

             }

         }

System.out.println("max=" + max); // 打印最大值

    }

}

数组遍历

//遍历一维数组
   int[] arr1={1,3,5,2,4};
    for(int i=0;i<arr1.length;i++){
       System.out.println(arr1[i]);
   }
System.out.println("------------------");
//遍历二维数组
  int[][] arr2={{1,3,5,7,9},{2,4,6,8,10}};
  for(int i=0;i<arr2.length;i++){
       for(int j=0;j<arr2[i].length;j++){
            System.out.println(arr2[i][j]);
         }
   }

数组异常(数组越界异常和空指针异常) 

数组越界异常

每个数组的索引都有一个范围,即0~length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错

  public class ArrayDemo06 {

        public static void main(String[] args) {

        int[] arr = new int[4]; // 定义一个长度为4的数组

       System.out.println("arr[0]=" + arr[4]); // 通过4访问数组元素

    }

 }

空指针异常

在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常

  public class ArrayDemo07 {

       public static void main(String[] args) {

           int[] arr = new int[3];

          arr[0] = 5; // 为数组的第一个元素赋值

          System.out.println("arr[0]=" + arr[0]); 

          arr = null; // 将变量arr置为null

         System.out.println("arr[0]=" + arr[0]); // 访问数组的元素

     }

 }

 

 方法

方法定义格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){

执行语句

………

return 返回值;

}

方法的重载

1.必须在同一个类中
2.方法名相同
3.参数列表不同
4.与方法的修饰符无关,与返回值无关

值传递与引用传递的问题

public class OverLoad
{
    public static void main(String[] args)
      {
           //值传递与引用传递的问题
           int a=2;
           int b=3;
          System.out.println(a+","+b);
          change(a,b);
         System.out.println(a+","+b);
         System.out.println("-----------");
         int[] arr={2,3};
         System.out.println(arr[0]);
         System.out.println(arr[1]);
         change2(arr);
         System.out.println(arr[0]);
         System.out.println(arr[1]);
   }
    public static int change(int c,int d){
    c=0;
    d=0;
   return c;
   }
    public static void change2(int[] a){
      a[0]=5;
      a[1]=4;
     }
   }

运行结果:

原文地址:https://www.cnblogs.com/Java-125/p/8616200.html