目录
一:数组的初始化(java语言的数组变量是引用类型的变量。)
1:java的数组是静态的:当数组初始化时,该数组的长度是不可变的。
2:什么是初始化:为数组对象的元素分配空间,并未每个数组元素指定初始值。
3:数组的初始化的两种方式:(不管采用哪种方式,一旦初始化完成,数组的长度就不可改变)
(2)数组变量和数组对象究竟哪个需要初始化,哪个并不需要初始化?
1:基本类型数组的初始化:程序直接先为数组分配内存空间,在将数组元素的值存入对应内存中。
2:基本类型数组初始化简单的原因:数组元素的值直接在对应的数组元素中。
3:注意:基本类型变量的值存储在栈内存中,这句话是完全错误的。
4:java语言中,堆内存中的对象,通常不允许直接访问。为了访问堆内存中的对象,通常只能通过引用变量。
5:最容易混淆的是:引用变量何时只是栈内存中的变量本身,何时又变为引用实际的java对象。
一:数组的初始化(java语言的数组变量是引用类型的变量。)
二:java数组是静态的。
1:java的数组是静态的:当数组初始化时,该数组的长度是不可变的。
2:什么是初始化:为数组对象的元素分配空间,并未每个数组元素指定初始值。
3:数组的初始化的两种方式:(不管采用哪种方式,一旦初始化完成,数组的长度就不可改变)
静态初始化:初始化时用程序员显式指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。
4:动态初始化时,系统指定初始值,系统的分配初始值的规则。
——byte,short,int,long类型的数组,数组元素的值0.
——float,double类型的数组,数组元素的值0.0。
——char类型的数组,数组元素的值'\u0000'。
——引用类型(类,接口,数组),数组元素的值null。
java数组不初始化是否可以使用:不可使用。
三:数组一定要初始化吗?
java的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象。
(真正掌握了java数组在内存中分配机制,可以换一个方式来初始化数组,或者说,数组无需经过初始化)
package kejian;
/**
* Created by 20378 on 2018-10-30.
*/
public class lianxi {
public static void main(String[] args){
int[] nums=new int[]{3,5,20,12};
System.out.print("nums数组的元素:");
for(int i=0;i<nums.length;i++){
System.out.printf(" "+nums[i]);
}
System.out.println();
int[] price;
price=nums;
System.out.print("price数组的元素:");
for(int i=0;i<price.length;i++){
System.out.printf(" "+price[i]);
}
System.out.println();
price[2]=34;
System.out.println("将price[2]修改为34");
System.out.println("nums数组的第三个元素的值是"
+nums[2]);
}
}
当程序执行price=nums之后,price变量将指向nums变量所引用的数组,此时price变量和nums变量引用
同一个对象。执行后,price变量已经指向有效的内存及一个长度为4的数组对象,因此程序完全可以正常
使用price变量了。
四:数组变量和数组对象
(1)什么是数组变量,什么是数组对象。
数组变量只是一个引用变量,通常 存放在栈内存中(也可被放入堆内存中)。
数组对象就是保存在堆内存中的连续内存空间。
(2)数组变量和数组对象究竟哪个需要初始化,哪个并不需要初始化?
对数组初始化是对数组变量初始化还是对数组对象初始化?
对数组执行初始化,其实并不是对数组变量执行初始化,而是要对数组对象执行初始化——也就是为该
数组对象分配一块连续的内存空间,这块连续内存空间的长度就是数组的长度。
对于数组变量,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用
该数组变量。
(java程序汇总所有的引用变量,他们都不需要经过所谓的初始化操作,需要进行初始化操作的是该
引用变量所引用的对象。
比如:数组变量不需要进行初始化操作,而数组对象本身需要进行初始化操作,
对象的引用变量也不需要进行初始化,而对象本身才需要进行初始化。)
五:基本类型数组的初始化
public static void main(String[] args){
int [] a;//在栈中定义了一个a数组变量
//它是一个引用变量,并未指向任何有效的内存,没有真正指向的数组对象,
//此时还不能使用数组对象。
a=new int[]{1,2,3,4};
//静态初始化后,系统会根据程序员指定的数组元素来决定数组的长度
}
1:基本类型数组的初始化:程序直接先为数组分配内存空间,在将数组元素的值存入对应内存中。
2:基本类型数组初始化简单的原因:数组元素的值直接在对应的数组元素中。
3:注意:基本类型变量的值存储在栈内存中,这句话是完全错误的。
实际上:所有局部变量都是放在栈内存中,不管其实基本类型的变量还是引用类型的变量,都是存储在各自
的方法栈区中,但引用类型变量所引用的对象则总存储在堆内存中。
4:java语言中,堆内存中的对象,通常不允许直接访问。为了访问堆内存中的对象,通常只能通过引用变量。
5:最容易混淆的是:引用变量何时只是栈内存中的变量本身,何时又变为引用实际的java对象。
规则:引用变量本质上只是一个指针,只要程序通过引用变量访问属性,偶或者通过引用变量来调用方法,
该引用变量将会由它所引用的对象代替。
六:引用类型数组的初始化
1:引用类型数组的数组元素依然是引用类型的,因此数组元素里存储的还是引用,它指向另一块内存中,这块
内存中存储了该引用变量所引用的对象。
public class lianxi {
public static void main(String[] args){
Person[] student;
student=new Person[2];
System.out.println("student引用的数组的长度:"
+student.length);
Person zhang=new Person();
zhang.age=11;
zhang.height=159;
Person li=new Person();
li.age=12;
li.height=167;
student[0]=zhang;
student[1]=li;
li.info();
student[1].info();
}
}
class Person{
public int age;
public double height;
public void info(){
System.out.println("我的年龄是:"
+age+"我的身高是:"+height);
}
}
注意:通过数组的length属性可以获取数组的长度,这个说法不够准确。数组的length属性应该返回
系统为该数组所分配的连续内存空间的长度。