黑马程序员技术交流社区

标题: 关于构造函数的问题 [打印本页]

作者: 叶绍亮    时间: 2012-3-16 22:00
标题: 关于构造函数的问题
本帖最后由 叶绍亮 于 2012-3-16 22:01 编辑

class  Student
{
        private String name;
        private int age;
        private int num;
        Student(String n,int a,int b)
        {
                name=n;
                age=a;
                num=b;
                out();
        }
        void out()
        {
                System.out.println("姓名:"+name+",年龄:"+age+",成绩:"+num);
        }
}
class StudentDemo
{
        public static void main(String[] args)
        {
                Student p1 = new Student("lisi",10,56);
                Student p2 = new Student("wangwu",23,65);
        }
}
上面的可以运行,下面这样的就不行 ,原理是什么?不明白啊。请教啊。
class  Student
{
        private String name;
        private int age;
        private int num;
        Student(String n,int a,int b)
        {
                name=n;
                age=a;
                num=b;
        }
        void out()
        {
                System.out.println("姓名:"+name+",年龄:"+age+",成绩:"+num);
        }
}
class StudentDemo
{
        public static void main(String[] args)
        {
                Student p1 = new Student("lisi",10,56);
                Student p2 = new Student("wangwu",23,65);
                p3.out();
        }
}
作者: 秦超    时间: 2012-3-16 22:07
p3似乎没有创建对象啊,只要不是static修饰的方法,都要创建对象才能使用,如果是static修饰的方法,可以用 类名.方法名 的格式来调用.
作者: 胡元    时间: 2012-3-16 22:25
p3.out();问题在这里,没有建立P3 对象,当然不能用p3调用功能

作者: 李深山    时间: 2012-3-16 22:33
p3.out();问题在这里,没有建立P3 对象,当然不能用p3调用功能
作者: 丁佼    时间: 2012-3-16 22:46
语句:Student P1 = new Student("X",11,12);
解读为:
"Student P1"用于在内存里建立一个Student类的引用,
"new Student("X",11,12)"调用构造函数在内存建立一个Student类的具体对象,
"=" 将建立的对象地址值赋值给P1,这时P1才有了具体的存在意义,也才可以使用Student类的方法,

你的P3根本就没有指向一个对象,甚至没有说明归属于哪一个类型,完全凭空生出来的变量名,所以不能能调用Student的方法。
也就是说,你不去声明,电脑是不会智能的去猜测P3和P1、P2是否同一个类型的,在电脑那边,P3在没有声明的情况下与@##¥之类的乱码没有差别。





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