黑马程序员技术交流社区

标题: 申请技术分啦!快来吧!! [打印本页]

作者: 杨华东    时间: 2012-9-25 16:29
标题: 申请技术分啦!快来吧!!
  1. public class Test1
  2. {
  3. //主函数是静态的 没错吧???
  4. public static void main(String[] args)
  5. {
  6. //静态的主函数 调用了 非静态的 构造函数!!!!哥们 有矛盾吗?
  7. new Test1();
  8. }
  9. //构造函数是非静态的对吧????
  10. Test1()
  11. {
  12. System.out.println("哥们,就是牛!!!");
  13. }
  14. }
复制代码
问题:
作为常识,静态只能调用静态的,非静态很牛 管你是不是静态 哥们都可以调用。
静态的 主函数  怎么那么牛啊?竟然可以调用非静态的!!!!难道是语法的潜规则??还是构造函数有特殊的地方???
求指教!!!!
作者: 王贵朝    时间: 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 编辑
  1. public class Test1
  2. {
  3. public static void main(String[] args)
  4. {
  5. new Test1(); //*************************************这里new了一个Test对象使用了Test1()构造方法,main里面对象调用就不是静态了吧?
  6. Test1()
  7. {
  8. System.out.println("哥们,就是牛!!!");
  9. }
  10. }
复制代码

作者: 佘天宇    时间: 2012-9-25 17:00
  1. public class Test1
  2. {
  3. //主函数是静态的 没错吧???
  4.         public static void main(String[] args)
  5.         {
  6.                 //静态的主函数 调用了 非静态的 构造函数!!!!哥们 有矛盾吗?
  7.                 new Test1(); //这是在主函数中建立Test1的对象,可不是静态主函数调用非静态方法

  8.                 //new Test0();//和这种在主函数中建立其他类的对象没区别。

  9.         }

  10.         //构造函数是非静态的对吧????
  11.         Test1()
  12.         {
  13.                 System.out.println("哥们,就是牛!!!");
  14.         }
  15. }

  16. class Test0
  17. {
  18.         Test0()
  19.         {
  20.                 System.out.println("哥们,神了!!!");
  21.         }
  22. }
复制代码

作者: 徐梦侠    时间: 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