我们知道,
1.类成员变量在定义时,如果没有初始化,会自动初始化的。
对象引用初始化为null;
原始变量
byte-> 0; short -> 0; char -> \u0000(null); int -> 0;
long -> 0L; float -> 0f;double -> 0d; boolean -> false;
2.如果是local 变量,没有初始化,编译报错的。
下面重点说说数组变量。数组变量不管是对象引用数组,还是原始变量数组。都是对象引用的形式的。
1.类成员变量 数组。
public class TestArray {
private String[] m_array1 = new String[5]; // 定义并分配堆(heap)空间,初始化数组大小为5,并且所指向的对象也会初始化(String
// -> null)
private String[] m_array2; // 只是定义没有分配堆(heap)空间,但是对象引用会默认初始化为 null
private int[] m_int = new int[5]; // 定义并分配堆(heap)空间,初始化数组大小为5,并且所指向的对象也会初始化(int
// -> 0)
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] l_array1 = new String[5]; // 定义并分配堆(heap)空间,初始化数组大小为5,并且所指向的对象也会初始化(String
// -> null)
String[] l_array2; // 只是定义没有分配堆(heap)空间,局部变量不会默认初始化
int[] l_int = new int[5]; // 定义并分配堆(heap)空间,初始化数组大小为5,并且所指向的对象也会初始化(int
// -> 0)
TestArray ta = new TestArray();
System.out.println("m_array1[0] " + ta.m_array1[0]); // 输出 null
try {
System.out.println("m_array2[0] " + ta.m_array2[0]);
} catch (Exception e) {
// 运行时出错 Exception in thread "main" java.lang.NullPointerException
e.printStackTrace();
}
System.out.println("l_array1[0] " + l_array1[0]); // 输出 null
// System.out.println("l_array2[0] " + l_array2[0]); //编译不通过,局部变量没有初始化。
System.out.println("m_int[0] " + ta.m_int[0]); // 输出 0
System.out.println("l_int[0] " + l_int[0]); // 输出 0
}
}
m_array2 会默认初始化为 null,l_array2不会默认初始化,这个好理解。
m_array1分配了堆内存,每块堆空间默认初始化了。
l_array1分配了堆内存,每块堆空间也默认初始化了。(注意这里局部变量。)
这里个人理解,数组分配了堆内存的话,每块堆空间就要(就会)初始化。初始化规则按照上面的1,2点进行。
疑问:原始变量类型的数组。数组的值存放到栈(stack)中,还是堆(heap)里呢?
一般原始变量类型是存放到栈中(stack)?。
分享到:
相关推荐
课后习题可能涉及如何创建类,定义属性和方法,以及如何通过构造函数初始化对象。此外,通过实例化对象、调用方法,学生可以深入理解面向对象编程的思想。 三、数组和集合 数组是存储同类型数据的有效方式,而集合...
`java.lang.ExceptionInInitializerError` 是Java编程语言中一个特殊的运行时异常,它通常表示在类的静态初始化过程中发生了异常。这个错误不是因为类的构造函数,而是由于静态变量初始化或者静态初始化块(也称为...
5.2.3 一“实”多“名”带来的困惑 111 5.3 多维数组 114 5.3.1 什么是多维数组 114 5.3.2 多维数组的实质 115 5.4 数组大练兵 123 5.4.1 轻松查询全班成绩 123 5.4.2 轻松查询全校成绩不在话下 124 5.4.3 ...
5.2.3 一“实”多“名”带来的困惑 111 5.3 多维数组 114 5.3.1 什么是多维数组 114 5.3.2 多维数组的实质 115 5.4 数组大练兵 123 5.4.1 轻松查询全班成绩 123 5.4.2 轻松查询全校成绩不在话下 124 5.4.3 ...
在复习题中,可能会涉及到这些基本概念的理解和应用,比如如何声明和初始化变量,如何使用不同类型的运算符进行计算,以及如何通过流程控制语句实现条件判断和循环逻辑。数组是存储多个相同类型数据的有效方式,而...
5. **数组**:数组是存储同类型数据的集合,学习如何声明、初始化和操作数组,以及两维数组的应用。 6. **字符串处理**:Java中的String类提供了丰富的字符串操作方法,如concatenation、substring、indexOf等。 7...
3. **数组**:一维、二维数组的声明、初始化和使用。 4. **字符串处理**:学习String类的常用方法,如concat、substring、indexOf等。 5. **异常处理**:理解try-catch-finally结构,学会处理运行时可能出现的异常。...
- **构造器**:用于初始化对象,通常与类名相同,无返回值。 3. **异常处理** - **异常类层次**:Java的异常分为检查型异常(如IOException)和运行时异常(如NullPointerException)。了解如何捕获和抛出异常是...
3. **数组**:一维、多维数组的声明、初始化和操作。 4. **字符串**:String类的使用,字符串的操作方法。 5. **异常处理**:try-catch语句,异常类的使用。 6. **类与对象**:类的定义,对象的创建和使用,构造方法...
2. **类与对象**:理解面向对象编程的基础,包括类的定义、对象的创建与初始化、访问修饰符(public、private、protected)、构造函数、方法重载与重写。 3. **封装、继承与多态**:封装是将数据和操作数据的方法...
这类题目很可能涉及数据类型的选择、变量声明和初始化、基本的运算符使用以及控制结构(如if-else语句、循环结构等)的正确应用。针对这样的问题,参赛者需要有扎实的基础,并且能够熟练地在实际问题中运用这些基础...
- **变量**:变量是存储数据的容器,有声明和初始化两个步骤。 - **运算符**:Java支持算术、关系、逻辑、位、赋值等多种运算符。 - **流程控制**:包括条件语句(if, if-else, switch)和循环语句(for, while, ...
- **数组初始化**:声明数组时,Java会为其分配空间并初始化,这是一个O(N)的操作。 - **数组的打印**:`System.out.println(a)`打印的是数组的内存地址,不是其内容,要打印数组元素,需遍历并打印每个元素。 5....
- **构造器**:构造函数的作用,重载和初始化块。 - **访问修饰符**:public, private, protected和默认修饰符的含义及使用场景。 - **抽象类与接口**:两者的区别,何时选择抽象类,何时选择接口。 3. **集合...
2. **指针初始化**:指针在声明时通常需要初始化,否则它们将包含随机内存地址,可能导致程序出错。例如,`int x = 5; int *ptr = &x;`初始化了一个指向`x`的指针。 3. **解引用**:使用`*`操作符可以访问指针所指向...
5.3 数组的初始化 63 5.3.1 默认初始化 63 5.3.2 利用循环初始化 64 5.3.3 枚举初始化 66 5.4 数组的相互赋值 67 5.4.1 基本类型数组赋值规则 67 5.4.2 引用型数组赋值规则 68 5.5 数组的常用操作 ...
- **初始化菜单**:在页面加载时,根据数据填充省份选择框,并根据默认省份设置城市选择框的初始值。 3. **JavaScript代码示例**: ```javascript var provinces = [ { id: '1', name: '北京', cities: ['东城...
**3.8 初始化泛型类型变量为它们的默认值** 对于泛型类型变量,可以通过 `default(T)` 来初始化为默认值。这在处理不同类型时非常有用。 #### 四、C# 泛型集合 **4.1 泛型的集合接口** C# 中提供了多种泛型集合...
18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间成员速查.269 参 考 资 料 .300 <<page 4>> page begin==================...
4. **constructor**(构造器):构造器是类(class)的一个特殊方法,用于初始化新创建的对象。 5. **cannot**(不能):表示某个操作无法完成。 6. **catch**(捕获):在异常处理中,与`try`配合使用,用来处理`...