我们知道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;
}