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里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!

其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。

posted on

2005-08-18 10:31

rodney

阅读(1955)

评论(0)

编辑

收藏

java为什么要初始化_JAVA中到底要怎么样初始化相关推荐

  1. int数组初始化_Java中到底有没有多维数组

    Java 中没有多维数组的概念,从数组底层的运行机制上来看 Java 没有多维数组,但是 Java 提供了支持多维数组的语法,可以实现多维数组的功能. Java 语言里的数组类型是引用类型,因此数组变 ...

  2. java用一个方法对变量初始化_java中怎么给变量初始化?

    展开全部 不同的变量初始化32313133353236313431303231363533e4b893e5b19e31333337613764方法不同. 变量包括:类的属性,或者叫值域 方法里的局部变 ...

  3. java 有指针吗_java中到底有没有指针(转)

    学过c/c++,然后学java的人往往心中有此纠结,java中到底有没有指针? 如果一定要在是或否里选择一个,OK,java中没有指针. 那么,java中的引用(reference)和c/c++中的指 ...

  4. java 两个大括号_Java中的双大括号初始化

    什么是Java双大括号初始化? 通常情况下,初始化Java集合并向其中添加几个元素的步骤如下: Set set = new HashSet<>(); set.add(1); set.add ...

  5. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

  6. java 成员变量的初始化_Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  7. 对象数组的初始化_JAVA中数组是什么?

    Java中数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们.数组的三个基本特点: ...

  8. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  9. java 实例变量初始化_java学习之实例变量初始化

    实例变量的初始化方法 第一种:通过构造函数进行初始化. 第二种:通过声明实例字段初始化. 第三种:通过对象代码块初始化. 通过构造函数进行初始化方法 通过构造函数进行对象初始化,必须在类中声明一个带参 ...

最新文章

  1. 小猿圈自学web前端之CSS3动画练习案例:用CSS3做个钟表
  2. MYSQL专题-由简到繁理解索引结构
  3. 端计算(3)-kotlin(1)
  4. 【zabbix】安装、配置agent,配置被监控端
  5. 响应式编程知多少 | Rx.NET 了解下
  6. Digital Text Animations for Mac - 未来感活力全屏标题动画fcpx插件
  7. 爬虫入门四(多线程爬虫)
  8. html调用阅读模式,easyread.js—给网站开启阅读模式html教程
  9. EF 更新条目时出错。有关详细信息,请参见内部异常。
  10. 《Python核心编程》第二版第308页第十一章练习 续一 -Python核心编程答案-自己做的-...
  11. 哈工大教授车万翔:基于迁移学习的任务型对话系统
  12. 10 大C++ Web(HTTP)开发开源框架/库推荐
  13. 使用 Visual Studio 创建 .NET 类库
  14. SIM868——AT+CBC 监测锂电池电量理解与测试
  15. 关于VLAN Tag,PVID的问题
  16. iOS开发常用设计模式
  17. SPSS Modeler ADP自动数据准备学习笔记
  18. 历史类:四大文明古国
  19. swiper.js横向轮播插件
  20. iPhone像素点和常用控件尺寸

热门文章

  1. 关于C++ Qt项目实现最简单Http Server的踩坑记录
  2. android倒计时功能,Android 实现列表倒计时功能
  3. linux父子进程同步实验,Linux-父子进程的简单同步
  4. python接口测试第二期_python2 接口测试一般方法.
  5. 1.2 操作系统的发展和分类(手工、单道/多道批处理、分时、实时、网络、分布式、嵌入式、个人计算机)
  6. php array_only,php可以定义数组的常量吗
  7. 启明云端分享|ESP32-­C3­-MINI­-1和ESP32­-C3-­MINI-­1U的区别是什么?
  8. 恒生java开发复试_2019恒生电子面试经验(JAVA开发人员,实施工程师等)
  9. mysql sphinx windows安装_Sphinx在windows下安装使用[支持中文全文检索]
  10. egg mysql 项目实战,egg.js创建项目,目录介绍,简单使用,sequelize mysql使用