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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华东 中级黑马   /  2012-9-25 16:29  /  3685 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码
问题:
作为常识,静态只能调用静态的,非静态很牛 管你是不是静态 哥们都可以调用。
静态的 主函数  怎么那么牛啊?竟然可以调用非静态的!!!!难道是语法的潜规则??还是构造函数有特殊的地方???
求指教!!!!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

16 个回复

倒序浏览
难道是语法的潜规则??还是构造函数有特殊的地方???
其实还可以这样~
Test1(String str)
{
System.out.println("哥们,红牛!!!");
}
回复 使用道具 举报
哈哈哈哈   没讲到点子上哦
回复 使用道具 举报
拜托,构造方法是对象调用的好不?
回复 使用道具 举报
本帖最后由 李建强 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
第一次回答,不足之处请大家指出。
至于这个现象,具体原因我觉得可以这么理解。首先我们知道静态和非静态的区别,静态是随着类的加载而存放在方法区中,与对象无关;而非静态是实例化后才产生,并随着对象消失而消失。而之所以静态不能加载非静态,是因为静态产生的时候还没有对象,也就没有非静态,所以调用不了。我们知道构造函数是对象一创建才调用的,当我们的程序运行到new Test1();的时候(其中的"new”就是创建实例建立对象的关键字),就会先创建对象,然后再调用构造函数进行对象初始化。
不知道这样回答行吗,期待各位补充。
回复 使用道具 举报
哈哈哈   兄弟们   很给力   多谢讨论
回复 使用道具 举报
问题已解决
回复 使用道具 举报
解决了?那你把解决的答案发下
回复 使用道具 举报
呵呵 其实那是用匿名对象的方式造了一个对象而已!不是对构造函数的直接调用哦!哥们要看清 !有个标志性的关键字 new 哦!
回复 使用道具 举报
我这跟本就不是调用。只是new 了一个Test1的对象而已。
回复 使用道具 举报
本帖最后由 杨华东 于 2012-9-25 20:00 编辑

今天回过头再看基础想了很多,其实这就是一个顺序问题,就像上面兄弟说的,
第一步:通过new关键字调用非静态的构造函数。第二步:初始化完毕,成功创建对象。产生地址值。
其实new在这里起到封装的作用。把创建对象的过程与主函数隔开了!!!
步骤很重要啊 ,收获是:不管到哪,一定不能眼高手低。细节决定成败。

哥们有啥,想说的  可以 自由发挥。在这里没有限制的哈
回复 使用道具 举报
chjxs 中级黑马 2012-9-25 20:29:49
14#
杨华东 发表于 2012-9-25 19:34
今天回过头再看基础想了很多,其实这就是一个顺序问题,就像上面兄弟说的,
第一步:通过new关键字调用非静 ...

是这个道理。。
回复 使用道具 举报
大哥些,07.new Test1(); 这是初始化对象好不。我晕,。。。。
回复 使用道具 举报
哥个急啊       尽然卡在技术分着了         咋么办        上次网不容易          半天了也没搞到技术分
回复 使用道具 举报
赞一个         
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马