标题:用this的构造函数有点问题,求助,谢谢
只看楼主
the_second
Rank: 2
等 级:论坛游民
帖 子:115
专家分:80
注 册:2015-9-13
结帖率:78.95%
已结贴  问题点数:20 回复次数:9 
用this的构造函数有点问题,求助,谢谢

public class AnyThting {

    public AnyThting() {
        // TODO Auto-generated constructor stub
        this("123765765");
        System.out.println("无参构造方法");
    }

    public AnyThting(String name) {
        // TODO Auto-generated constructor stub
        System.out.println("有参构造方法");
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AnyThting a = new AnyThting();
        System.out.println(a);
    }

}
搜索更多相关主题的帖子: public method 
2016-04-21 22:41
the_second
Rank: 2
等 级:论坛游民
帖 子:115
专家分:80
注 册:2015-9-13
得分:0 
这是他的输出:
有参构造方法
无参构造方法
AnyThting@11b456f
2016-04-21 22:42
the_second
Rank: 2
等 级:论坛游民
帖 子:115
专家分:80
注 册:2015-9-13
得分:0 
想知道
AnyThting@11b456f
是哪里来的
求助谢谢
2016-04-21 22:42
Hac
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2016-4-21
得分:5 
AnyThting@11b456f是对象a的地址
2016-04-21 23:26
the_second
Rank: 2
等 级:论坛游民
帖 子:115
专家分:80
注 册:2015-9-13
得分:0 
你好,那为什么会输出a的地址
我好像没有输出a地址啊
2016-04-22 13:06
the_second
Rank: 2
等 级:论坛游民
帖 子:115
专家分:80
注 册:2015-9-13
得分:0 
求助,谢谢
2016-04-22 13:07
萧鼎
Rank: 1
等 级:新手上路
威 望:2
帖 子:13
专家分:8
注 册:2016-3-17
得分:5 
你好,因为你没有写AnyThing的toString方法,所以输出a就等于输出a的默认父类的Object里的toString方法。
具体为:输出“getClass().getName() + '@' + Integer.toHexString(hashCode())”
也就是输出a的所在类名@一个哈希函数值。
2016-04-23 17:11
外星人ii
Rank: 1
来 自:中国 广东 湛江
等 级:新手上路
帖 子:16
专家分:5
注 册:2014-11-27
得分:5 
通俗点儿说呢。你直接调用了它,并没有给AnyThting函数赋值。在没有赋值的情况下系统会根据数据的类型赋予默认值。

只专一事
2016-04-24 21:43
haidixingshi
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2008-10-13
得分:5 
你应该是没有理解 AnyThting a = new AnyThting();这语句中a代表什么 。
这里的变量a 是一个引用变量,是AnyThting类型的引用,它指向AnyThting()构造出来的对象,存储的是引用对象的地址。
    当程序从主函数mian()进入读到该条语句时,首先在栈内存中开辟一块空间,我们命名为a,用来存放指向对象的地址。 然后在堆内存中开辟一段空间,通过new AnyThting()读取AnyThting()构造函数,生成一个AnyThting类型的实体对象。之后把该对象所在内存的首地址赋值给变量a。这样a就指向了对象的地址。
    接下去把变量a所存的地址作为实参传到输出语句的形参中,输出语句根据所传入的数据类型调用对应的方法。因为变量a是引用数据类型,所以调用的方法是public void println(Object x),而Object 类的 toString 方法返回的一个字符串,由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())     
补充说明:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样

2016-04-26 23:40
the_second
Rank: 2
等 级:论坛游民
帖 子:115
专家分:80
注 册:2015-9-13
得分:0 
好的,谢谢大家
2016-04-28 11:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463970-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029075 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved