A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaoshui 中级黑马   /  2015-8-6 21:52  /  469 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
        什么时候定义静态函数:
            当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

        其实,static 的问题就是一个  存在的先后顺序  的问题。
*/
class  StaticDemo
{
        public static void main(String[] args)
        {
                Person p = new Person();
                p.show();
        }
}

class Person
{
        String name = "zhangsan";

        //public static void show()
        public void show()
        {
                System.out.println(name+"haha");
        }
}

/*
        一个类中的成员(属性、方法)既可以是静态的也可以是非静态的,
        非静态的成员是随着对象的创建而存在的。
        静态的成员是随着类的被调用而存在的 (当静态成员所属的类被调用了时,静态成员就在方法区中存在了,
                                                                        直到所属类生命周期结束,静态成员也一起消失。)
       
        定义类是为了使用类来创建对象,并通过对象来体现一个类中定义的属性和方法,
        以上面的show方法为例:
                main函数中使用Person类创建了一个对象p,并调用了方法show :    p.show();
                这个过程是:
                                主函数main调用Person类创建了一个对象p,
                                这时,在堆中就有了一块区域是对象p的实体,变量name就在这个实体中
                                此时,如果show想调用变量name: System.out.println(name+"haha");
                                就可以找到name并使用,输出        zhangsanhaha
               
                如果show方法是静态的,那么,主函数可以不需要创建对象,而直接通过类名的方式调用show方法
                即  主函数可以用   Person.show();   这样的方法来调用show方法。
                但是由于此时并没有Person类的对象,所以变量name还不存在,
                因为name不存在,所以name不可能被show使用,
                所以方法
                                public static void show()
                                {
                                        System.out.println(name+"haha");
                                }
                        是错的
                               
                错误提示为:
                                 无法从静态上下文中引用非静态 变量 name
*/


3 个回复

倒序浏览
66666666666666666666

点评

sofa!!!!  发表于 2015-8-6 21:54
回复 使用道具 举报
什么时候定义静态成员呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马