黑马程序员技术交流社区

标题: 构造重载请教 [打印本页]

作者: a348639336    时间: 2015-7-24 10:58
标题: 构造重载请教
public class Persontest{
        public static void main(String[] args){
                Person a = new Person();
                Person b = new Person(300);
                Person c = new Person(800,22);
                 //a.person();     使用编译错误
                }
}
class Person{
                Person() {
                        int id = 500;
                        int age = 20;
                        System.out.println(id + "--" + age);
                }
                Person(int _id) {
                        int id = _id;
                        int age = 21;
                        System.out.println(id + "--" + age);
                }
                Person(int _id, int _age) {
                        int id = _id;
                        int age = _age;
                        System.out.println(id + "--" + age);
        }
}
最近在学到构造方法和重载,有上面这么一个小程序,初学,本来想打印id和age,结果在main方法中用的注释中方法,编译出错,不认识“。”方法,后来突然意识到似乎new对象的时候就已经调用构造方法了,去掉注释内容胡编译运行正常,想确认一下到底是不是这样,main方法new对象时是不是就已经调用了Person类中的构造方法,xx.xx();这种调用的是不是类中构造方法以外的其他方法时使用,还有,之前想打印id和age,因为不懂,直接在main方法中new对象后就直接a.person;System.out.println(a);打印出来是tostring方法的person@哈希值,新人自学,没有人教,请各位讲解一下!!
作者: wzg76777    时间: 2015-7-24 12:08
1.在创建对象时new后面 会直接调用构造方法,如果括号内没有参数,调用的就是无参的构造方法,有参数就会调用对应的构造方法,注意类中必须要有无参的构造方法,没定义构造方法时系统会默认定义无参的构造方法,有定义构造方法时系统不会再提供无参的构造方法,建议任何时候都自己定义一下无参的构造方法,老毕的视频应该有讲,可以去回顾一下
2.这个跟内存有关,a中存储的是对象的地址值,可以回顾下视频加深下印象
作者: 章浩    时间: 2015-7-24 12:23
亲········区分一下构造函数和一般方法吧
·  构造函数是用来初始化对象的,构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;
·  而一般的方法是在程序执行到它的时候被调用的;
作者: a348639336    时间: 2015-7-24 17:07
wzg76777 发表于 2015-7-24 12:08
1.在创建对象时new后面 会直接调用构造方法,如果括号内没有参数,调用的就是无参的构造方法,有参数就会调 ...

这些我在视频中都看过了,基本都清楚了,就是不太熟练,多复习就好了,还是谢谢你
作者: a348639336    时间: 2015-7-24 17:08
章浩 发表于 2015-7-24 12:23
亲········区分一下构造函数和一般方法吧
·  构造函数是用来初始化对象的,构造函数不能被直接调 ...

知道了,谢谢!
作者: 飞飞飞丨    时间: 2015-7-24 18:10
继续努力
作者: 天人之珠    时间: 2015-7-24 21:55
继续努力
作者: 小p    时间: 2015-7-24 21:59
多敲敲代码就可以了
作者: 小程序    时间: 2015-7-24 22:05
我也学习了,谢谢楼主,也谢谢回答
作者: 黄成祚    时间: 2015-7-24 22:07
构造函数在对象一建立,函数就跟着直接执行了
作者: 黄成祚    时间: 2015-7-24 22:21
构造函数在对象一建立是,就跟着直接执行了。
你的age 和id是定义在了构造函数的内部,只能在这个内部使用,你的输出语句也是在函数内部,所以开始的三个在对象建立时能直接打印出来。
你把age 和id定义在构造函数外面,这个person类里面,作为成员变量 。就是这样
class Person{
        int id;
        int age;
        Person()
       {
                 id = 500;
                age = 20;
        }
}
然后在new对象后Person a = new Person();
就可以用a.id  和a.age 来访问你在构造函数里的设定的值
System.out.println("id="+a.id+"--"+"age="+a.age);
作者: 黑进制    时间: 2015-7-24 22:36
呵呵 你是哪一期的
作者: Holmes    时间: 2015-7-24 22:49
学习了,谢谢楼主,也谢谢回答
作者: umbriel    时间: 2015-7-24 23:50
你都没有定义成员变量啊




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