类成员变量初始赋值有啥意义么?
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来区分。
private String name;
public void setName(String name)
this.name = name;
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 的初始值。
使用成员初始化列表可以提高代码的效率,因为它可以直接在构造函数中初始化成员变量,避免了在构造函数体内使用赋值语句的开销。同时,它还可以使代码更加清晰易懂,使代码逻辑更加简单明了。
以上是关于类成员变量初始赋值有啥意义么?的主要内容,如果未能解决你的问题,请参考以下文章