java 成员变量 默认_为什么Java成员变量有默认值,而非成员变量没有?

我们知道Java的非成员变量需要强制让你给它赋值,因为学过C语言都知道声明一个变量不初始化就是乱码,乱码没有意义,还有安全隐患。所以Java强制让你给非成员变量赋值,

至于为什么成员变量有默认值?

那得多亏了构造函数,想要new对象必须至少拥有一个构造函数,拿默认的无参构造函数来讲,虽然表面上看着它什么也没做,其实底层不单只是为对象分配内存,它也同时初始化对象上的成员变量。

一个深刻的例子就是,C语言构造结构体时,肯定不是单单声明出来,而是自己写一个类似于Java的构造函数来构造一个结构体。

typedef struct _User{

char *account

char *password

}User;

User* new_User() //无参构造函数

{

User *this = (User *)malloc(sizeof(User));

this->account = NULL;

this->password = NULL;

return this;

}

User* new_User(char* account, char *password) // 有参构造函数,当然C语言不支持重载,函数同名只是为了示范

{

User *this = (User *)malloc(sizeof(User));

this->account = account;

this->password = password;

return this;

}

int main(void)

{

User *user1 = new_User("admin","admin");

printf("帐号:%s\n密码:%s\n",user1->account, user1->password);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值