黑马程序员技术交流社区

标题: static标记 静态与非静态有哪些区别 [打印本页]

作者: 王松朝    时间: 2011-7-19 18:37
标题: static标记 静态与非静态有哪些区别
静态类、方法、变量与非静态的都有哪些区别呢? 我知道的静态的与类无关,可以直接调用. 还有别的区别么?
作者: 匿名    时间: 2011-7-19 20:24
谁说静态与类无关的?
静态和非静态的区别有:
1 静态随着类的加载而加载,非静态随着对象的建立而进入内存。静态是优先于对象存在的。
2 静态在内存中的存储位置在方法区中的静态区,而非静态存储在其所属对象的内存空间中,也就是堆内存。
3 静态是共享数据,而非静态是某个对象特有的。
4 静态是属于类的,用类调用,非静态是属于对象的,需要先new一个对象实例,再用这个对象调用
作者: 袁春龙    时间: 2011-7-19 22:47
标题: 回复 楼主 的帖子
楼主的意思不完全正确,我不懂什么叫静态与类无关!
静态方法和静态变量类似。
public class MyTest {
        static int age = 5;
        static void A(){
                System.out.println("Hello!");
        }
        public static void main(String[] args) {
                MyTest.A();//类名.方法名
                System.out.println(MyTest.age);//类名.变量名
        }
}
通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。如下代码所示:
public class StaticCls{
public static void main(String[] args){
OuterCls.InnerCls oi=new OuterCls.InnerCls();
}
}
class OuterCls{
public static class InnerCls{
InnerCls(){
System.out.println("InnerCls");
}
}
}
输出结果:InnerCls
[ 本帖最后由 袁春龙 于 2011-07-19  22:48 编辑 ]
作者: 匿名    时间: 2011-7-19 23:57
标题: 回复 藤椅 的帖子
自己想出来的,还是借助别人的 ....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2