static关键字
来源:互联网 发布:mac os镜像下载iso 编辑:程序博客网 时间:2024/06/11 01:09
static关键字:
一、问题
1、需求:描述一下学生类。
2、代码:
3、内存分析:
4、存在的问题:
1)情况一:
问题:如果所有的学生都是中国,有n个学生就会有n份中国的数据存内存中,这样子会浪费内存。
解决方案: 把“中国“这个数据移动到数据共享区中,共享这个数据给所有的Student对象使用即可。
内存分析:
2)情况二:
问题:如何才能把这个数据移动到数据共享区中共享呢?
解决方案:只需要使用static修饰该数据即可。
代码:
5、注意:静态的成员变量只会在数据共享区中维护一份,而非静态成员变量的数据会在每个对象中都维护一份的。
二、static(静态)
1、代码:
2、问题:为什么结果是小日本,而不是中国。
3、内存分析:
4、变化代码:
原因:去掉了static,那么在每一个堆内存中都会有一个country对象。
5、再变化代码:
三、static(静态\修饰符)
1、static修饰成员变量 :如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。
1)静态成员变量的访问方式:
方式1: 可以使用对象进行访问。
格式: 对象.变量名;
方式二: 可以使用类名进行访问。
格式: 类名.变量名;
2)注意:
a)非静态的成员变量只能使用对象进行访问,不能使用类名进行访问。
s1.name;//可以访问Student.name;//不可以访问
b)千万不要为了方便访问数据而使用static修饰成员变量,只有成员变量的数据是真正需要被共享的时候才使用static修饰。
c)静态成员变量可以不赋值(与final关键字对比(final修饰的成员变量必须赋值)),即保存默认初始值,但这样无意思,所以基本都会对静态成员变量赋值。
3)static修饰成员变量的应用场景: 如果一个数据需要被所有对象共享使用的时候,这时候即可使用static修饰。
2、static修饰成员函数
四、实例:
1、需求:统计一个类被使用了多少次创建对象,该类对外显示被创建的次数。
2、代码:
class Emp{ //静态的成员变量。 static int count = 0; //计数器 //非静态成员变量 String name; //构造代码块,如果有多个构造方法的时候,每个构造方法中都要有count++,为了简化代码使用了构造代码块 { count++; } public Emp(String name){ this.name = name; } public Emp(){ //每创建一个对象的时候都会执行构造函数这里的代码 } public void showCount(){ System.out.println("创建了"+ count+"个对象"); }}class Demo1{ public static void main(String[] args) { Emp e1 = new Emp("土豆"); Emp e2 = new Emp(); Emp e3 =new Emp(); e3.showCount(); }}
3、结果:
- static关键字
- static关键字
- 关键字STATIC
- 关键字STATIC
- static关键字
- static 关键字
- static关键字
- static关键字
- static关键字
- static关键字
- static 关键字
- Static 关键字
- static关键字
- Static关键字
- static关键字
- static关键字
- static关键字
- 关键字:static
- JavaScript-对闭包的理解
- 线段树
- idea 15.0.2 破解
- Java面试题大全(Java基础十)
- leetcode 400. Nth Digit解题报告
- static关键字
- Android系统编写Linux内核驱动程序
- ubuntu14.04搭建Android Studio2.1开发环境activity_main.xml页面不显示虚拟手机的解决办法
- oracle入门很简单:四、本地Net服务名配置
- 2016-9-19小结
- CentOS6.5系统下安装Apache2.4+PHP5.6+Mysql5.5 (LAMP)
- 【Android】 RecyclerView、ListView实现单选列表的优雅之路.
- 模拟器运行错误: invalid device state
- 使用白鹭引擎对场景添加删除和替换的封装