首页
首页 > 最分享 > 为什么成员变量可以不初始化 >正文

为什么成员变量可以不初始化

时间:2020-10-21 17:42:52 /人气:2418 ℃

我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢.其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化.两者的区别在于:初始化是赋一个初始值,而定义是分配内存.静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存.

1. 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面2. 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面3. 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化

你这些写不规范,规范的写法是在声明的时候就初始化,而不是在方法里面初始化,这样写和除0没什么区别,没有语法错误不代表运行不会报错.

上楼的说的有问题,只要是成员变量java都会自动赋值的.当一个对象被初始化的时候,new运算符首先调用构造方法给成员变量初始化,遇到没有被初始化的成员变量的时候java自动赋值,int,long等整数自动赋值为0,float,double自动赋值为0.0,char自动赋值为\0.这说的是非静态,对于静态的成员变量,它不属于某一个对象,所以当一个类被装载到内存的时候如果没有被初始化java自动赋值.非静态 成员变量 是当一个对象被创建的时候赋值.

count只能在定义的时候初始化赋值.const是一个编程语言的关键字,它限定一个变量不允许被改变,产生静态作用.使用const在一定程度上可以提高程序的安全性和可靠性.例如:#include <stdio.h>int main(){ const int a=3; printf("%d",a); return 0;}/*运行结果:3*/# include <stdio.h>int main(){ const int a;//就会报错,没有初始化赋值. a=3;//此处不能再修改变量值 printf("%d",a); return 0;}

int 类型默认是0 boolean类型默认是false String类型默认是null 不赋值的话编译什么的不会有错了 使用默认值

当然,成员变量无需显式初始化.所以对于引用变量(指针),默认值是null.而你又没赋值,所以会报出异常:NullPointerException(空指针异常)

1. 在类中,只是声明了静态变量,并没有定义.2. 声明只是表明了变量的数据类型和属性,并不分配内存;定义则是需要分配内存的.注意:如果在类里面这么写int a;

final的变量 不可更改,所以要初始化就有值,以后不能改的,不然定义一个空的,也不能赋值有什么用啊

可以进行初始化,静态变量不可以在构造方法中初始化.class a{public int no;public a(){no=10;}public static void main(String args[]){a a1 =new a();System.out.println(a1.no);//如果不通过构造方法初始化,默认值为0,此时输出为10}}

Copyright ©  最分享 Inc.
www.45o.cc All Rights Reserved
来源于网络,属网友个人观点,不代表本站立场,仅供参考!