类成员变量初始赋值有啥意义么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类成员变量初始赋值有啥意义么?相关的知识,希望对你有一定的参考价值。

public class xx

int i=9;
public xx(int i)

i++;
System.out.println(i);
System.out.println(this.i);

这里的(int i=9) 有意义么? 如果去掉 对程序有什么影响?
public class xx

int i=9;
public xx(int i)

i++;
System.out.println(i);

如果是这样的话 去掉是不是可以呢?

    有意义,不能去掉

    因为你调用改了this.i,this就是找全局变量(或方法),如果你去掉了,那这一行会报错。

    而你第一个输出的i是传进来的参数,与下面的不冲突,如果你分不清,可以换个名字,但实际上,bean里的set都是一样的,就是this来区分。


    class Bean 

        private String name;

        public void setName(String name) 
            this.name = name;
        

参考技术A 当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,设置默认值,然后,为成员变量指定初始值。但是,如下所示:
class test
int a = b+1;
int b =1;
提示错误!
执行顺序不是大致可以认为是这样么:
int a = 0;
int b = 0;
a = b+1;
b = 1;
(感觉大致就是这样子吧)
如果是这样的话上边当int a = b+1时b应该已经有默认值了,但为什么报错啊?
表达有点乱,求大神解释!!!
创建类的实例时,系统自动分配内存空间,设置默认值,然后,为成员变量指定初始化(如果有的话)。
class test
int a;

像这样,在程序中实例化并输出会输出 a 为 0,因为默认值的问题,
如果像这样 class test
int a =1;

因为有初始化所以输出为a 为1。
总之当成员变量分配内存后,应该是有默认值的,顺序应该是:

int a;
int b;(这里应该都在分配内存时指定默认值为0了)
然后 再执行初始化:
a = b+1;
b = 1;
就这样子吧比如下面程序是对的
class

a = 1;

int a =2;
参考技术B java中,全局变量如果不给初始值,编译器是会默认赋值的,数字默认是0,对象默认是null等等...

我觉得你想问的是,这里声明的时候赋值有什么作用,因为不赋值也是可以的。

就我自己的体会,在一些属性是标记位的时候常常会这么做,比如标记一个状态的属性,status,有几种状态,1表示新插入,2表示已经处理,3表示删除了。可以看出1是默认状态码,每次都给status赋值为1很麻烦,所以就声明的时候顺便初始化为1,这样,new出来之后,不用再管这个属性了。
参考技术C 变量首先需要被定义 然后才能对其操作 否则编译都无法通过 参考技术D 去掉 i=9 的话 i是默认值0
xx函数中使用的 i 都是是入力的参数 i,
只有this.i 才是使用成员变量的追问

如果把this一行去掉呢?

C++成员初始化列表(构造函数后加冒号:)(用于在构造函数中初始化类成员变量,可以避免使用构造函数体内的赋值语句,可以确保成员变量在对象构造之初就已经被正确初始化,提高代码的性能和可读性)

成员初始化列表是在定义构造函数时使用的语法,可以用来在构造函数中初始化类成员变量。在成员初始化列表中,可以为类中的每个成员变量指定一个初始值,以逗号分隔。这样做的好处是可以避免使用构造函数体内的赋值语句,从而提高代码的效率。

下面是一个使用成员初始化列表的例子:

class MyClass 
public:
    // 带参数的构造函数
    MyClass(int x, int y) : m_x(x), m_y(y) 
        // 构造函数体
    
private:
    int m_x;
    int m_y;
;

在这个例子中,构造函数 MyClass(int x, int y) 中使用了成员初始化列表来初始化类成员变量 m_x 和 m_y。在冒号后面,分别用逗号分隔指定了 m_x 和 m_y 的初始值。

使用成员初始化列表可以提高代码的效率,因为它可以直接在构造函数中初始化成员变量,避免了在构造函数体内使用赋值语句的开销。同时,它还可以使代码更加清晰易懂,使代码逻辑更加简单明了。

以上是关于类成员变量初始赋值有啥意义么?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA-初步认识-第六章-成员变量和局部变量的显示初始化

C++中,类内的成员变量自动初始化为零吗,而全局变量随意赋值

请问java构造函数如何初始化成员变量的啊?

JAVA中的成员变量不赋值默认是0吗?

c++ 初始化列表VS构造函数内赋值初始化成员变量

c++ 初始化列表VS构造函数内赋值初始化成员变量