java 为什么局部变量没有默认值 java定义变量为什么要初赋值为null
今天给各位分享java 为什么局部变量没有默认值的知识,其中也会对java定义变量为什么要初赋值为null进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
在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局部变量和全局变量赋值
i是一个静态成员变量,标准来说,java没有全局变量这个说法,成员变量的一个特点就是类加载的时候,如果没有初始化值就会给它赋值,基本数据类型的初始化值都是固定的,
一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值:
Boolean false
Char'\u0000'(null)
byte(byte)0
short(short)0
int 0
long 0L
float 0.0f
double 0.0d等。。。。。。。。。
java定义变量为什么要初赋值为null
您好,很高兴为您解答,首先您需要了解变量的作用域问题,就是局部变量和成员变量的作用域范围
对于成员变量来讲,首先其作作用域可以在该类可操作范围下生效,但是对于局部变量,只能对所包含的代码块(方法)之内生效,外部是无法访问的
对于初始值的问题,成员变量如果基本类型,例如 int,那么初始值就为0,然后对其包装类型,初始值即为 null,在方法内部(局部变量)的变量是不具备默认值的,您的问题首先希望你搞懂变量的作用域范围,谢谢,晚安
java 可能尚未初始化变量weight height是为什么
首先,double weight;
double height;
double BMI;
虽然你声明了,但是没有赋予值。
根据程序编译器,他会认为这三个变量没有初始化值。
虽然java中int缺省值为0,double缺省值为0.0,但是在一个方法体中编译器会强制你去初始化其中的局部参数。
这不同于类的局部变量,如下的程序就可以编译通过:
public static void main(String[] args) throws Exception{
int i;
//这一局就跟你的错误一样:System.out.println(i);
System.out.println(new A().i);
System.out.println(new A().d);
}
public static class A{
int i;
double d;
A(){
}
}
好了,关于java 为什么局部变量没有默认值和java定义变量为什么要初赋值为null的问题到这里结束啦,希望可以解决您的问题哈!