首页编程java编程java变量为什么要初始化,为什么Java中的局部变量必须要初始化

java变量为什么要初始化,为什么Java中的局部变量必须要初始化

编程之家2023-10-1290次浏览

大家好,如果您还对java变量为什么要初始化不太了解,没有关系,今天就由本站为大家分享java变量为什么要初始化的知识,包括为什么Java中的局部变量必须要初始化的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

java变量为什么要初始化,为什么Java中的局部变量必须要初始化

为什么Java中的局部变量必须要初始化

现在假如你是java语言的开发者,你已经将对象保存在了堆内存中,而将局部变量保存在了栈内存中,你会怎么做呢?

Java中的变量分为类变量,成员变量和局部变量,分别位于JVM的方法区、堆内存和栈内存中。类变量和成员变量都可以在类首次加载和类初始化时,给出默认值,但是局部变量就必须要在使用前赋值。

实际上,Java完全可以设计成局部变量不需要初始化,只要作者们高兴。事实上,就有这样的语言,比如C++。

java变量为什么要初始化,为什么Java中的局部变量必须要初始化

当然,C++不强制必须初始化,不代表就不用初始化,实际上,C++开发者也都是建议对局部变量初始化,以防止出现野指针这类事情。

其实,不管是局部变量还是成员变量,都是必须要初始化的,那为什么成员变量会自动初始化?其实正是因为成员变量属于对象,而对象是保存在堆中的,所以jvm就在初始化类的时候把成员变量初始化呢,而如果我们在调用方法的时候,还要jvm去将局部变量也进行初始化,是不是对会影响到性能呢?因此,直接强制局部变量必须要初始化反而更好。

Java中所有变量在使用前都初始化吗

1、java中有两种变量,局部变量和成员变量。成员变量就是定义在类中,方法外,全局的变量。局部变量使用前必须初始化,否则编译报错。成员变量可以不初始化,虚拟机会给他默认值。

java变量为什么要初始化,为什么Java中的局部变量必须要初始化

classtest{

//定义成员变量b

publicstaticintb;

publicstaticvoidmain(String[]args){

System.out.println("hellojava");

//局部变量i

inti;

//这里如果直接输出会编译报错

i=0;

System.out.println(++i);

//这里直接输出b是可以的,默认为0

System.out.println(b);

}

}

2、局部变量的初始化可以认为是分配初始空间,也就是在内存中要开辟一块区域来存这个东西,不初始化是没有内存空间的,也就不能使用。

Java 变量到底要如何初始化

不同的变量初始化方法不同。

变量包括:

类的属性,或者叫值域

方法里的局部变量

方法的参数

对于第一种变量,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里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。

java语言为什么要对对象初始化呢

对象初始化

在类被装载、连接和初始化,这个类就随时都可能使用了。对象实例化和初始化是就是对象生命的起始阶段的活动,在这里我们主要讨论对象的初始化工作的相关特点。

Java编译器在编译每个类时都会为该类至少生成一个实例初始化方法--即"<init>()"方法。此方法与源代码中的每个构造方法相对应,如果类没有明确地声明任何构造方法,编译器则为该类生成一个默认的无参构造方法,这个默认的构造器仅仅调用父类的无参构造器,与此同时也会生成一个与默认构造方法对应的"<init>()"方法.

通常来说,<init>()方法内包括的代码内容大概为:调用另一个<init>()方法;对实例变量初始化;与其对应的构造方法内的代码。

如果构造方法是明确地从调用同一个类中的另一个构造方法开始,那它对应的<init>()方法体内包括的内容为:一个对本类的<init>()方法的调用;对应用构造方法内的所有字节码。

如果构造方法不是通过调用自身类的其它构造方法开始,并且该对象不是Object对象,那<init>()法内则包括的内容为:一个对父类<init>()方法的调用;对实例变量初始化方法的字节码;最后是对应构造子的方法体字节码。

如果这个类是Object,那么它的<init>()方法则不包括对父类<init>()方法的调用。

如果你还想了解更多这方面的信息,记得收藏关注本站。

傅艺伟封神榜 傅艺伟封神榜剧照java什么时候出的 JAVA语言是什么时候诞生的谁有详细资料