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;
}
java 成员变量 默认_为什么Java成员变量有默认值,而非成员变量没有?相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java变量同名_浅析Java中局部变量与成员变量同名解决技巧
要想区分这哥俩,首先,我们得知道它们分别是什么.先从成员变量下刀. 成员变量 我们来研究一个事物: 属性:外在特征:例如人的身高,体重 行为:能够做什么:例如人有说话,打球等行为. 而在Java语言中 ...
- java接口多态的变量能_「JAVA」多态的灵魂,面向接口的程序设计,这才是你该懂得的接口(interface)...
Java面向对象之接口--interface 什么是接口 一般计算机中的接口分为硬件接口和软件接口. 硬件接口:是指两个硬件设备之间的连接方式,既包括物理上的接口,还包括逻辑上的数据传送协议. 软件接 ...
- java第三章_【Java】第三章 变量
1 什么是变量 用来命名一个数据的标示符 year这个标识符就是一个变量,它代表1949这个值 int year = 1949; int是数据类型,表示是整数 year是一个标识符 =是赋值操作符 1 ...
- java中变量 关键字_基于java的voliate关键字详解
voliate关键字的作用: 一.内存可见性 基于缓存一致性协议,当用voliate关键字修饰的变量改动时,cpu会通知其他线程,缓存已被修改,需要更新缓存.这样每个线程都能获取到最新的变量值. 二. ...
- JAVA redis缓存过期_失效java服务器
Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...
- java编程思想 初始化_《java编程思想》_第五章_初始化与清理
初始化和清理是涉及安全的两个问题,java中采用了构造器,并额外提供了"垃圾回收器",对于不再使用的内存资源,垃圾回收器能自动将其释放. 一.用构造器确保初始化 java中,通过提 ...
- java序列化的方法_【Java常见序列化与反序列方法总结】
人和电脑在很多方面都是十分相似的,大脑可以看成电脑主机,五官/身体等表面器官就是显示器.鼠标等外设.这篇文章就是想把计算机跟人做类比YY一下序列化和反序列化的机制.用途. 如果你是初学者,心里肯定会问 ...
- java高级必须懂得_反射---Java高级开发必须懂的
理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助. 一.Class类的使用 1.万事万物皆对象,(当然,基本数据类型 ...
- java runnable线程锁_多线程 java 同步 、锁 、 synchronized 、 Thread 、 Runnable
线程 1 线程概述 1.1 什么是线程 v 线程是程序执行的一条路径, 一个进程中可以包含多条线程 v 一个应用程序可以理解成就是一个进程 v 多线程并发执行可以提高程序的效率, 可以同时完成多 ...
最新文章
- Schema约束模式实例
- Error in install.packages : cannot remove prior installation of package
- 【原创】WinCE下流驱动开发流程
- pkg-config简介 pkgconfig
- 健康很重要 程序员应该坚持正确的坐姿工作
- 虚拟服务器启动顺序,认识VPC2007的虚拟机系统启动顺序
- oracle 之 安装后pl/sql登录报ora-12154
- 使用 ADO.NET连接SQL Azure
- c语言上机考试设计题及答案,C语言程序设计基础上机考试一题目及参考答案.doc...
- mysql服务没有权限开机不会自启动_计算机服务项里没有MySQL服务,无法设置开机自启动或者关闭自启动,的解决办法...
- openCVPracticalExercise学习笔记04
- steam第三方授权登录不稳定(openid4java)
- vmware卸载不干净,重装不了问题;装了虚拟机上不了网问题;装了虚拟机发现windows在cmd中ping不了虚拟机,虚拟机能ping的了windows;secureCRT或者filezilla连接
- SQL Server2012企业版与标准版比较
- 狂神 redis笔记 docker
- 苹果App Store审核指南中文翻译
- 什么是公考、联考、国考、省考、选调生?
- netcat使用方法
- Python中找出dataframe中的重复的行 DataFrame.duplicated()方法
- 计算机中丢失swr.dll,win10电脑中模块initpki.dll加载失败提示0x80004005错误代码如何解决...
热门文章
- 台式计算机虚拟内存怎么设置,电脑虚拟内存怎么设置最好 电脑虚拟内存不足怎么解决...
- websocket ping pong
- TOM邮箱|怎么在邮箱里设置邮件个人签名呢?
- PyCharm获取csv文件
- 各个蒙版的作用与区别
- Tableau超市案例分析
- 《javascript设计模式与开发实践》——第一章(面向对象的javascript)学习记录
- /*模拟一个简单的购房商贷月供计算器,按照以下公式计算总利息和每个月还款金额: 总利息=贷款金额*利率; 每月还款金额=(贷款金额+总利息)/贷款年限
- BZOJ 4199 品酒大会
- [培训-无线通信基础-8]:分集技术(微分集、宏分集、信号合并、分集增益)