您的位置:首页 > 编程语言 > Java开发

Java数组与内存控制

2014-03-27 22:16 253 查看
今天看了一下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允许将多维数组当成一位数组处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java