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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a348639336 中级黑马   /  2015-7-24 10:58  /  717 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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@哈希值,新人自学,没有人教,请各位讲解一下!!

13 个回复

正序浏览
你都没有定义成员变量啊
回复 使用道具 举报
学习了,谢谢楼主,也谢谢回答
回复 使用道具 举报
呵呵 你是哪一期的
回复 使用道具 举报
构造函数在对象一建立是,就跟着直接执行了。
你的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);
回复 使用道具 举报
构造函数在对象一建立,函数就跟着直接执行了
回复 使用道具 举报
我也学习了,谢谢楼主,也谢谢回答
回复 使用道具 举报
小p 中级黑马 2015-7-24 21:59:24
8#
多敲敲代码就可以了
回复 使用道具 举报
继续努力
回复 使用道具 举报
继续努力
回复 使用道具 举报
章浩 发表于 2015-7-24 12:23
亲········区分一下构造函数和一般方法吧
·  构造函数是用来初始化对象的,构造函数不能被直接调 ...

知道了,谢谢!
回复 使用道具 举报
wzg76777 发表于 2015-7-24 12:08
1.在创建对象时new后面 会直接调用构造方法,如果括号内没有参数,调用的就是无参的构造方法,有参数就会调 ...

这些我在视频中都看过了,基本都清楚了,就是不太熟练,多复习就好了,还是谢谢你
回复 使用道具 举报
亲········区分一下构造函数和一般方法吧
·  构造函数是用来初始化对象的,构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;
·  而一般的方法是在程序执行到它的时候被调用的;
回复 使用道具 举报
wzg76777 来自手机 中级黑马 2015-7-24 12:08:48
沙发
1.在创建对象时new后面 会直接调用构造方法,如果括号内没有参数,调用的就是无参的构造方法,有参数就会调用对应的构造方法,注意类中必须要有无参的构造方法,没定义构造方法时系统会默认定义无参的构造方法,有定义构造方法时系统不会再提供无参的构造方法,建议任何时候都自己定义一下无参的构造方法,老毕的视频应该有讲,可以去回顾一下
2.这个跟内存有关,a中存储的是对象的地址值,可以回顾下视频加深下印象
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马