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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Person
{
        private String name;
        private int age;
        Person()
        {
                System.out.println("A:name="+name+"..age="+age);
                cry();
        }
        Person(String a)
        {
                name=a;
                System.out.println("B:name="+name+"..age="+age);
                cry();
        }
        Person(String a,int b)
        {
                name=a;
                age=b;
                System.out.println("C:name="+name+"..age="+age);
                cry();
        }
        public void cry()
        {
                System.out,println("cry");
        }
}
class Persondemo2
{
        public static void main(String[] args)
        {
                Person p=new Person();
                Person d=new Person("lili");
                Person e=new Person("lili",4);
        }
}
在面向对象构造函数中为什么上面那个方法写法是:public void cry();而不是public static void cry()。

4 个回复

正序浏览
定义非静态变量的方法时不能用static ,非静态变量是指需要创建对象才能对变量或方法进行引用的变量。
回复 使用道具 举报
AllenIverson 发表于 2015-7-24 16:59
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是ja ...

嗯,谢谢帮忙解答的这么详细:)
回复 使用道具 举报
本帖最后由 AllenIverson 于 2015-7-24 17:01 编辑

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是java语言中没有全局变量的概念。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

只要这个类被加载,java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。

所以public void cry()或者public static void cry()都是可以的,根据情况需要写。静态方法可以直接通过类名调用,任何的实例也都可以调用。非静态方法的话必须通过对象去调用。
回复 使用道具 举报
本人新人,请大家帮忙解答下为什么不是public static void cry():)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马