黑马程序员技术交流社区

标题: 第06天-06-面向对象(静态代码块) [打印本页]

作者: 周志伟    时间: 2013-4-23 01:52
标题: 第06天-06-面向对象(静态代码块)
本帖最后由 周志伟 于 2013-4-24 04:33 编辑
  1. class  Demo
  2. {
  3.         Demo(){}  //在这里,只要我写了这个Demo构造函数,系统默认的构造函数就没有了。
  4.                           //系统默认的构造函数与这里写的构造函数的区别在哪里????
  5.         public static void main(String[] args)
  6.         {
  7.                 System.out.println("Hello World!");
  8.         }
  9. }
复制代码

作者: 续圆凯    时间: 2013-4-23 02:26
这两个本质上是一样的,当没有提供构造方法时,编译器会自动加上一个默认的不带参数的构造方法。你自己写上的话编译器就不加了,省略编译器就加上。每个类都必须至少有一个构造方法,不写时便是上述原因编译器自动给你加的,不是它没有构造方法。

另外你还可以再在命令行下用javap 类名  查看一个类中默认的构造方法。
作者: 周志伟    时间: 2013-4-23 03:48
本帖最后由 周志伟 于 2013-4-23 03:50 编辑
续圆凯 发表于 2013-4-23 02:26
这两个本质上是一样的,当没有提供构造方法时,编译器会自动加上一个默认的不带参数的构造方法。你自己写上 ...


我自己加上的构造方法是这样的:Demo(){}
而用你说的方法:javap 类名   查看到的构造方法如图所示:感觉吧,两者还是有区别啊???用javap查看到的没有“{}”能再解释一下吗?

作者: 尹丽峰    时间: 2013-4-23 09:58
默认构造函数和自己写上的没区别,没写构造函数jvm会自动添加为demo(){},你用javap 查看默认构造函数没有{} 应该是虚拟机在编译时候会自动加上方法体也就是{}
作者: 续圆凯    时间: 2013-4-23 11:34
javap最常用的用途是用来快速的查看一个类可用的方法

javap的标准输出是公有变量和类的成员函数。

它能获取成员函数并不是让你查看函数的具体封装。
就像你获取到的主函数 也同样没有大括号一样。。。。
你可以用javap -c 类名  获取到更多信息。
作者: 吴波    时间: 2013-4-23 17:14
这样写是没什么区别的
你写了,调用都就可以直接调。
不写,系统会帮你默默为你加一个无参构造函数。
作者: 周志伟    时间: 2013-4-23 23:50
尹丽峰 发表于 2013-4-23 09:58
默认构造函数和自己写上的没区别,没写构造函数jvm会自动添加为demo(){},你用javap 查看默认构造函数没 ...

谢谢啦,我再看看,消化一下。
作者: 周志伟    时间: 2013-4-23 23:50
续圆凯 发表于 2013-4-23 11:34
javap最常用的用途是用来快速的查看一个类可用的方法

javap的标准输出是公有变量和类的成员函数。

恩恩,谢谢啦。
作者: 周志伟    时间: 2013-4-23 23:51
吴波 发表于 2013-4-23 17:14
这样写是没什么区别的
你写了,调用都就可以直接调。
不写,系统会帮你默默为你加一个无参构造函数。 ...

谢谢啦,我还得再回去看看视频。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2