黑马程序员技术交流社区
标题:
申请技术分啦!快来吧!!
[打印本页]
作者:
杨华东
时间:
2012-9-25 16:29
标题:
申请技术分啦!快来吧!!
public class Test1
{
//主函数是静态的 没错吧???
public static void main(String[] args)
{
//静态的主函数 调用了 非静态的 构造函数!!!!哥们 有矛盾吗?
new Test1();
}
//构造函数是非静态的对吧????
Test1()
{
System.out.println("哥们,就是牛!!!");
}
}
复制代码
问题:
作为常识,静态只能调用静态的,非静态很牛 管你是不是静态 哥们都可以调用。
静态的 主函数 怎么那么牛啊?竟然可以调用非静态的!!!!难道是语法的潜规则??还是构造函数有特殊的地方???
求指教!!!!
作者:
王贵朝
时间:
2012-9-25 16:45
难道是语法的潜规则??还是构造函数有特殊的地方???
其实还可以这样~
Test1(String str)
{
System.out.println("哥们,红牛!!!");
}
作者:
杨华东
时间:
2012-9-25 16:46
哈哈哈哈 没讲到点子上哦
作者:
孙岳
时间:
2012-9-25 16:48
拜托,构造方法是对象调用的好不?
作者:
李建强
时间:
2012-9-25 16:52
本帖最后由 李建强 于 2012-9-25 16:56 编辑
public class Test1
{
public static void main(String[] args)
{
new Test1(); //*************************************这里new了一个Test对象使用了Test1()构造方法,main里面对象调用就不是静态了吧?
Test1()
{
System.out.println("哥们,就是牛!!!");
}
}
复制代码
作者:
佘天宇
时间:
2012-9-25 17:00
public class Test1
{
//主函数是静态的 没错吧???
public static void main(String[] args)
{
//静态的主函数 调用了 非静态的 构造函数!!!!哥们 有矛盾吗?
new Test1(); //这是在主函数中建立Test1的对象,可不是静态主函数调用非静态方法
//new Test0();//和这种在主函数中建立其他类的对象没区别。
}
//构造函数是非静态的对吧????
Test1()
{
System.out.println("哥们,就是牛!!!");
}
}
class Test0
{
Test0()
{
System.out.println("哥们,神了!!!");
}
}
复制代码
作者:
徐梦侠
时间:
2012-9-25 17:28
第一次回答,不足之处请大家指出。
至于这个现象,具体原因我觉得可以这么理解。首先我们知道静态和非静态的区别,静态是随着类的加载而存放在方法区中,与对象无关;而非静态是实例化后才产生,并随着对象消失而消失。而之所以静态不能加载非静态,是因为静态产生的时候还没有对象,也就没有非静态,所以调用不了。我们知道构造函数是对象一创建才调用的,当我们的程序运行到new Test1();的时候(其中的"new”就是创建实例建立对象的关键字),就会先创建对象,然后再调用构造函数进行对象初始化。
不知道这样回答行吗,期待各位补充。
作者:
杨华东
时间:
2012-9-25 17:59
哈哈哈 兄弟们 很给力 多谢讨论
作者:
杨华东
时间:
2012-9-25 17:59
问题已解决
作者:
王小闲7
时间:
2012-9-25 18:36
解决了?那你把解决的答案发下
作者:
罗磊
时间:
2012-9-25 18:44
呵呵 其实那是用匿名对象的方式造了一个对象而已!不是对构造函数的直接调用哦!哥们要看清 !有个标志性的关键字 new 哦!
作者:
明光照
时间:
2012-9-25 19:24
我这跟本就不是调用。只是new 了一个Test1的对象而已。
作者:
杨华东
时间:
2012-9-25 19:34
本帖最后由 杨华东 于 2012-9-25 20:00 编辑
今天回过头再看基础想了很多,其实这就是一个顺序问题,就像上面兄弟说的,
第一步:通过new关键字调用非静态的构造函数。第二步:初始化完毕,成功创建对象。产生地址值。
其实new在这里起到封装的作用。把创建对象的过程与主函数隔开了!!!
步骤很重要啊 ,收获是:不管到哪,一定不能眼高手低。细节决定成败。
哥们有啥,想说的 可以 自由发挥。在这里没有限制的哈
作者:
chjxs
时间:
2012-9-25 20:29
杨华东 发表于 2012-9-25 19:34
今天回过头再看基础想了很多,其实这就是一个顺序问题,就像上面兄弟说的,
第一步:通过new关键字调用非静 ...
是这个道理。。
作者:
柳彬
时间:
2012-9-26 08:47
大哥些,07.new Test1(); 这是初始化对象好不。我晕,。。。。
作者:
郭伟杰
时间:
2013-6-25 19:58
哥个急啊 尽然卡在技术分着了 咋么办 上次网不容易 半天了也没搞到技术分
作者:
不具名、悲伤
时间:
2013-7-10 20:54
赞一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2