Java数组与内存控制

来源:互联网 发布:15年广东省的经济数据 编辑:程序博客网 时间:2024/05/11 11:06

今天看了一下Java的数组,作个记录


一、数组的初始化


    Java数组是静态的
    两种初始化方式:(不管哪种方式初始化Java数组,一旦初始化完成,该数组的长度不可改变,Java语言允许通过数组的length属性来访问数组的长度)
    1、静态初始化
    2、动态初始化

public class ArrayTest{ public static void main(String args[]){  //采用静态初始化方式初始化第一个数组  String[] str = new String[]{   "java",   "java EE",   "XML"  };  //采用静态初始化的简化形式初始化第二个数组  String[] company = {   "百度",   "阿里巴巴",   "腾讯"  };  //采用动态初始化方式初始化第三个数组  String[] strArray = new String[5];  //访问三个数组的长度  System.out.println("第一个数组的长度是:" + str.length);  for(int i = 0; i < str.length; i++){   System.out.println(str[i]);  }  System.out.println("第二个数组的长度是:" + company.length);  for(int i = 0; i < company.length; i++){   System.out.println(company[i]);  }  System.out.println("第三个数组的长度是:" + strArray.length);  for(int i = 0; i < strArray.length; i++){   System.out.println(strArray[i]);  } }}

运行结果:




Java语言的数组变量时引用类型的变量,str,company ,strArray这三个变量以及各自引用的数组在内存中的分配如图:




二、Java数组的引用可以被改变


public class ArrayTest2{ public static void main(String args[]){  //采用静态初始化方式初始化第一个数组  String[] str = new String[]{   "java",   "java EE",   "XML"  };  //采用静态初始化的简化形式初始化第二个数组  String[] company = {   "百度",   "阿里巴巴",   "腾讯"  };  //采用动态初始化方式初始化第三个数组  String[] strArray = new String[5];  //让str数组变量、strArray数组变量指向compamy所引用的数组  str = company;  strArray = company;  //改变srt数组变量所引用的数组的第二个元素的值  str[1] = "淘宝";  //访问三个数组的长度  System.out.println("第一个数组的长度是:" + str.length);  for(int i = 0; i < str.length; i++){   System.out.println(str[i]);  }  System.out.println("第二个数组的长度是:" + company.length);  for(int i = 0; i < company.length; i++){   System.out.println(company[i]);  }  System.out.println("第三个数组的长度是:" + strArray.length);  for(int i = 0; i < strArray.length; i++){   System.out.println(strArray[i]);  } }}


运行结果:



数组在内存中的示意图:




三、引用类型数组的初始化


class Person{ private int age; private double height; public Person(int age,double height){  this.setAge(age);  this.setHeight(height); } public void setAge(int age){  this.age = age; } public void setHeight(double height){  this.height = height; } public int getAge(){  return this.age; } public double getHeight(){  return this.height; } public void info(){  System.out.println("我的年龄是:" + this.age + ",我的身高是:" + this.height); }}public class ReferenceArrayTest{ public static void main(String args[]){  //定义一个students数组变量,其类型是Person[]  Person[] students;  //执行动态初始化  students = new Person[2];  System.out.println("student所引用的数组的长度是:" + students.length);  //创建一个Person实例并将这个Person实例赋给Tsang变量,并为Tsang所引用的Person对象的属性赋值  Person Tsang = new Person(18,180.8);  //创建一个Person实例并将这个Person实例赋给Chan变量,并为Chan所引用的Person对象的属性赋值  Person Chan = new Person(19,176.8);  //将Tsang和Chan变量的值分别赋给第一,第二个数组元素  students[0] = Tsang;  students[1] = Chan;  Tsang.info();  //下面两行代码的结果完全一样,因为Chan和students[1]指向的是同一个Person实例  Chan.info();  students[1].info(); }}


运行结果:




为数组元素赋值后的存储示意图:




四、数组的使用

当数组引用变量指向一个有效的数组对象后,程序就可通过该数组引用变量来访问数组对象。
Java语言避免直接访问内存中的数据可以保证程序更加健壮,如果程序直接访问并修改堆内存中数据,可破坏内存中的数据完整性,从而导致程序Crash。

五、多维数组

N维数组是数组元素是N-1维数组的数组。
Java允许将多维数组当成一位数组处理。

0 0
原创粉丝点击