JAVA_静态
来源:互联网 发布:淘宝店铺什么是c店 编辑:程序博客网 时间:2024/05/21 05:06
因为该类的静态方法是程序启动时自动放在内存中了的,是属于程序的公共内存(但只能访问),而类名在这里你可以理解为命名空间。先通俗的分析下,我们把类看作是一个房子。房子里面有家具,桌椅板凳之类的,房子里面还有人。房子里面所有的人都应该是共有一套家具的。也就是说,这些家具是唯一的,如果某个家具坏了,那么大家都用不了。我们再看一看定义,java的静态变量也叫做类变量,它开始于类的创建,结束于类的消亡。非静态变量叫做实例变量,它开始于类的实例的创建,结束语类的实例的消亡。静态变量被所有实例所共享。也就是如上面的例子,座椅板凳是类变量,它们是在房子被建好了之后就被添加放置进来,而且基本都是唯一的。人就相当于实例,每个人都能用这些家具,但是如果家具一旦损坏,那就是坏了,或者你把某一个家具搬走,那么所有的人都用不了这个家具,房子里也不存在这个家具了。但是房子里可以进很多人,可以进张三,也可以进李四。所以这些人就是类的实例对象,他们身上穿的衣服就可以叫做实例变量。
如果一个类中有静态变量的话,程序首先会把该静态变量加载进内存中,也就是在堆中开辟一个区域专门存放。以后不管你new多少个类的对象,该静态变量永远都是在那里的。也就是说,静态变量在类的初始化一次后,系统就不会为该变量开辟新的内存空间。而每new一个类的对象,系统就会重新在堆内存中开辟一个新空间来存放该类的实例对象,并且栈中也会有一个新的引用变量去指向
它。
静态方法也是类似,但是有一点要强调,静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象先加载进内存,而这个时候可能其它的非静态方法或者变量还没有被加载进来。就好比我现在想做包子,现在面粉被static修饰,首先已经拿到你身边,可是因为包子馅不是static修饰的,所以可能包子馅儿还没运过来,你说怎么做的出包子呢。 被static修饰过的都是随着类的初始化后就产生了,在堆内存中都有一块专门的区域来存放,所以只需要类名点方法名或者变量名即可。而非静态的就必须通过类的对象去调相应的。就像是你想要红色的衣服,你必须是从穿红色的衣服的人的身上拿过来才行,所以你必须找到穿红色衣服的人,也就是类的实例对象,而你如果要去找一个桌子,而桌子就在房间里摆着,你只要进到房间里直接走过去拿来就可以了~~
- JAVA_静态
- java_静态类
- java_静态代码块
- Java_静态代码块
- Java_分派_静态分派
- java_静态_小例题
- java_静态static 静态代码块
- [java_基础]内部类和静态类
- java_静态方法能否被子类重写
- Java_静态方法中调用非静态方法
- 学习笔记 Java_静态_继承 2014.7.12
- Java_基础_静态变量一定要先声明后赋值
- Java_基础_不要覆写静态方法
- JAVA_关于构造方法与类中静态变量
- Java_乔晓松_Java SE 加强-静态导入_自动装拆箱_增强for循环_枚举
- java_面向对象_02_静态(代码块)_main_单例设计模式
- Java_浅谈构造函数、构造代码块与静态代码块的用法
- 学习笔记 Java_毕向东_面向对象_静态_异常 2014.8.2
- string转int/float/double、int/float/double转string、转字符串数组的方法:stoi、stringstream、scanf、to_string、sprintf
- nyoj 24 素数距离
- 【LightOJ】1198 - Karate Competition(贪心 & 双端队列)
- Android 大神们
- 史上最简单的单例模式详解
- JAVA_静态
- Android的Java混淆
- NorthWind数据库生成脚本
- Oracle 查询技巧与优化(一) 单表查询与排序
- 网易2016软件工程师笔试题-----[编程题] 奖学金(C++实现)
- [Java]struts,spring,svn杂记
- STM32中密度中断向量表
- 数据结构实验之栈五:下一较大值(一)
- [android-x86] Build fails(/kconfig/zconf.tab.c:200:24: fatal error: zconf.hash.c: No such file)