Java中可以直接调用类中静态方法,不用实例化
来源:互联网 发布:两列数据查找相同项 编辑:程序博客网 时间:2024/05/23 18:03
转载自 http://stevengw.blog.163.com/blog/static/583447512012319112140126/
先通俗的分析下,我们把类看作是一个房子。房子里面有家具,桌椅板凳之类的,房子里面还有人。 房子里面所有的人都应该是共有一套家具的。也就是说,这些家具是唯一的,如果某个家具坏了,那么大家都用不了。 我们再看一看定义,java的静态变量也叫做类变量,它开始于类的创建,结束于类的消亡。非静态变量叫做实例变量,它开始于类的实例的创建,结束语类的实例的消亡。静态变量被所有实例所共享。也就是如上面的例子,座椅板凳是类变量,它们是在房子被建好了之后就被添加放置进来,而且基本都是唯一的。人就相当于实例,每个人都能用这些家具,但是如果家具一旦损坏,那就是坏了,或者你把某一个家具搬走,那么所有的人都用不了这个家具,房子里也不存在这个家具了。 但是房子里可以进很多人,可以进张三,也可以进李四。所以这些人就是类的实例对象,他们身上穿的衣服就可以叫做实例变量。 那么在内存之中又是如何的呢?当一个类被创建并初始化后,内存中会有两个区域,栈区和堆区。栈中主要存放的是引用变量,堆中主要存放的是真实的被实例化后的类。栈中的引用变量会指向堆中的真实对象地址。比如A a=new A(); a这个变量就会在栈中,实际被new出来的类A的对象会放在堆中,a指向实际被new出来的A对象。 如果一个类中有静态变量的话,程序首先会把该静态变量加载进内存中,也就是在堆中开辟一个区域专门存放。以后不管你new多少个类的对象,该静态变量永远都是在那里的。也就是说,静态变量在类的初始化一次后,系统就不会为该变量开辟新的内存空间。而每new一个类的对象,系统就会重新在 堆内存中开辟一个新空间来存放该类的实例对象,并且栈中也会有一个新的引用变量去指向它。 静态方法也是类似,但是有一点要强调,静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象先加载进内存,而这个时候可能其它的非静态方法或者变量还没有被加载进来。就好比我现在想做包子,现在面粉被static修饰,首先已经拿到你身边,可是因为包子馅不是static修饰的,所以可能包子馅儿还没运过来,你说怎么做的出包子呢。 被static修饰过的都是随着类的初始化后就产生了,在堆内存中都有一块专门的区域来存放,所以只需要类名点方法名或者变量名即可。而非静态的就必须通过类的对象去调相应的。就像是你想要红色的衣服,你必须是从穿红色的衣服的人的身上拿过来才行,所以你必须找到穿红色衣服的人,也就是类的实例对象,而你如果要去找一个桌子,而桌子就在房间里摆着,你只要进到房间里直接走过去拿来就可以了~~
0 0
- Java中可以直接调用类中静态方法,不用实例化
- java中为什么类名可以直接调用静态方法?
- 静态方法可以直接用类引用,不用实例化
- 静态方法不能直接调用实例方法和变量,但可以间接调用(即在静态方法中创建类的实例,然后调用)
- 《Java编程思想》中为什么可以直接用方法名调用静态方法?
- 什么时候可以不用实例化对象就可以调用类中成员函数
- java类的构造方法可以直接调用该类中已有的方法。
- PHP 类的实例化,静态方法不用实例化直接用
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
- java中调用静态方法时候可以省略类名吗?
- JS中直接调用后台静态方法
- java的静态方法可以直接用类名调用的理解
- java的静态方法可以直接用类名调用的理解
- Java类中 静态/实例 方法/变量
- Java 中,为什么在静态方法中可以调用的方法、可以使用的成员变量必须是静态的?
- Java在静态方法中直接调用了动态方法出现错误
- 类可以直接调用静态方法,对象调用非静态方法
- Play tag标签,模板、tag中直接调用后台静态java方法
- 基于SLIP协议节点与计算机组网
- 2016年年终CSDN博客总结
- std命名空间的bind和sys/socket.h中bind发生冲突
- 设计模式-------工厂模式
- 【LeetCode-228】Summary Ranges(C++)
- Java中可以直接调用类中静态方法,不用实例化
- Android进程so注入Hook java方法
- linux下GD-Graphics-library中的GD-1.18安装总结
- 【Spring】使用XML进行Bean装配与依赖注入
- 树莓派系统安装与设置
- BFS(广搜) 电子老鼠闯迷宫
- 局部特征
- ubuntu桌面版 应用程序默认安装位置
- ps 替换文字