黑马程序员技术交流社区

标题: 小分享: 内存结构分析和static 关键字的修饰用法 [打印本页]

作者: 张周飞    时间: 2014-7-4 09:45
标题: 小分享: 内存结构分析和static 关键字的修饰用法
本帖最后由 张周飞 于 2014-7-4 09:55 编辑

/**
static 关键字的修饰用法
1:static关键字修饰的成员变量实质上就是全局变量。存在方法区 都只存一份使之多对象使用一份数据。
2:static关键字修饰的方法 无需本类对象即可调用,属于类,
调用的方式:类名 静态属性/静态方法()
3:static关键字可以修饰一个类。
**/
public class StaticS{
       public static void main(String[] args){
                   Mistress M1= new Mistress("小红");
                   Mistress M2= new Mistress("小菲菲 ");
                   //M1.profession="小三"; 都打印出都是小三的话 说明就是在就在方法区了
                    M1.desc();    //打印出 我的名字是:小红,我的职业是:情人
                   M2.desc();    //打印出 我的名字是:小菲菲,我的职业是:情人
                   Mistress.promosion();  //调用的方式:类名 静态属性/静态方法() 。以下是调用静态方法以后的结果
                   M1.desc();   //打印出 我的名字是:小菲菲,我的职业是: 情妇
                   M2.desc();     //打印出 我的名字是:小菲菲,我的职业是:情妇                 
  }
}
/*情妇类*/
class Mistress{
        String name;
        static String profession="情人";   //默认值
        public Mistress(String name){
                this.name=name;
        }
        public void desc(){
                System.out.println("我的名字是:"+name+",我的职业是:"+profession);
                //promosion() 放在这里是可以调用的  调用静态方法。//实例成员可以引用调用静态成员。
        }
        public static void promosion(){
                System.out.println("转正了");
                profession="情妇";
                //desc();这里不可以这样的写 不然会报错,在编译期间报错。对象是在实例产生 运行的时候期间才会调用,
                //静态的方法和属性在类加载器后就会存在方法区内存中,此时还没有产生对象,而普通方法和属性属于对象,所以不能调用。
                //静态成员、静态成员之间 ,可以相互引用。实例成员、实例成员之间可以引用。
                //静态成员不可以引用调用实例成员。所以desc(); 报错,实例成员需要创建对象时才有其空间和值参与运行,而静态成员无需生成对象就已经存                在。存在方法区里
        
        }

}
/**
上面题目的内存结构分析


*/





/**
自己总结的------内存结构分析图: 愿能帮助大家理解
**/






内存结构分析.jpg (83.07 KB, 下载次数: 12)

内存结构分析.jpg

作者: nadax    时间: 2014-8-19 12:07
大神 图有点小。能传下清楚点的吗 十分感谢。

作者: jw在路途    时间: 2014-8-19 20:42
学习了,谢谢分享 就是图看得有点不爽~~~




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