黑马程序员技术交流社区

标题: 关于static [打印本页]

作者: xiaoshui    时间: 2015-8-6 21:52
标题: 关于static
/*
        什么时候定义静态函数:
            当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

        其实,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
*/



作者: STARlove    时间: 2015-8-6 21:53
66666666666666666666
作者: Marx_D    时间: 2015-8-6 22:00
什么时候定义静态成员呢?




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