mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
添加问题:为什么成员变量有默认值?
This commit is contained in:
parent
ada9064ed2
commit
6b7735f953
@ -681,6 +681,17 @@ System.out.println(l + 1 == Long.MIN_VALUE); // true
|
||||
- **生存时间**:从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
|
||||
- **默认值**:从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 `final` 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
|
||||
|
||||
> 问:为什么成员变量有默认值?
|
||||
>
|
||||
> 答:
|
||||
>
|
||||
> 1. 先不考虑变量类型,如果没有默认值会怎样?变量存储的是内存地址对应的任意随机值,程序读取该值运行会出现意外。
|
||||
>
|
||||
> 2. 默认值有两种设置方式:手动和自动,根据第一点,没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值,而局部变量不行。
|
||||
>
|
||||
> 3. 对于编译器(javac)来说,局部变量没赋值很好判断,可以直接报错。而成员变量可能是运行时赋值,无法判断,误报“没默认值”又会影响用户体验,所以采用自动赋默认值。
|
||||
>
|
||||
|
||||
成员变量与局部变量代码示例:
|
||||
|
||||
```java
|
||||
|
Loading…
x
Reference in New Issue
Block a user