问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。
1.
类的属性,或者叫值域
2. 方法里的局部变量
3.
方法的参数
对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。
int类型变量默认初始值为0
float类型变量默认初始值为0.0f
double类型变量默认初始值为0.0
boolean类型变量默认初始值为false
char类型变量默认初始值为0(ASCII码)
long类型变量默认初始值为0
所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。
对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。
对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译不通过。如果在
catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要初始化成什么值好,就用上面的默认值吧!
其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。
分享到:
相关推荐
当类被加载时,其静态变量会按照它们在代码中出现的顺序进行初始化。而实例变量则会在构造函数执行之前初始化。了解类加载过程,特别是静态块和构造器的执行顺序,可以帮助解决一些复杂的初始化问题。 接下来是继承...
变量赋值时应注意初始化,减少未初始化的变量使用。 ##### 10.5 综合练习 通过综合练习巩固所学的规范。 - **圆括号**:使用圆括号清晰表示运算的优先级。 - **返回值**:明确每个方法的返回值类型。 - **条件...
类的成员变量包括静态成员变量和实例成员变量,局部变量从栈区弹出结束,局部变量在使用前必须初始化。 13. 数组和集合框架 数组是一个指向数组的引用对象,集合框架包括 Iterator 也是一个迭代器接口。
1. 程序启动时,创建一个窗口并初始化控件; 2. 用户点击“启动”按钮后,进入`bounce`方法,循环调用`move`方法,使得小球在画布上移动; 3. 用户点击“暂停”或“停止”按钮后,相应地调整线程的状态; 4. 点击...
3. **数组与集合**:了解如何声明、初始化和操作数组,以及掌握ArrayList、LinkedList、HashSet、HashMap等集合框架的使用。习题可能包含数组排序、查找元素或实现特定集合功能的挑战。 4. **异常处理**:学习Java...
5. **初始化**:执行类构造器 `<clinit>` 方法,为静态变量赋初值。 #### 四、结束语 深入了解JVM对于Java开发者来说至关重要。通过掌握JVM的工作原理和技术细节,开发者不仅能够编写出更加高效、安全的代码,还能...
Servlet生命周期包括加载、实例化、初始化、服务、销毁等阶段。在Servlet中,我们通常使用`doGet`和`doPost`方法来处理HTTP GET和POST请求,通过`request`和`response`对象来获取和设置HTTP头信息以及发送响应。 **...
在生产环境中,`start.sh`和`stop.sh`通常用于初始化和终止SpringBoot应用。`start.sh`可能包含执行`java -jar yourapp.jar`命令来启动服务的逻辑,而`stop.sh`可能通过发送信号(如SIGINT或SIGTERM)来停止进程。`...
2.初始化虚拟机... 83 3.访问类方法... 85 4访问类属性... 87 5.访问构造函数... 88 6.数组处理... 89 7.中文处理... 89 8.异常... 91 9.线程和同步访问... 91 10.时间... 92 Chap12:基本JNI调用技术(c/...
这个过程涉及类的加载、验证、准备、解析和初始化。 6. **编译优化技术** Hotspot采用多种优化策略,如方法内联、逃逸分析、标量替换等,以提升代码执行效率。例如,逃逸分析可以判断对象是否能被其他线程访问,...
深入理解JVM一、什么是JVM二、JAVA的运行机制三、JVM架构图四、类加载器子系统1、类加载器子系统作用2、加载(Loading)3、链接(Linking)3.1 验证 (Verify)3.2 准备(Prepare)3.3 解析(Resolve)3、初始化4、...
者将面向对象的思想巧妙的融合在 Java 的具体技术上,潜移默化的让你感觉到了一种新的语言和新的思想方式的诞生。 但是读完这本书,你对书中这些蕴含的思想也许需要一种更明晰更系统更透彻的了解和掌握,那么你就...