黑马程序员技术交流社区

标题: 关于class的一个小问题 [打印本页]

作者: 孙鑫    时间: 2012-8-9 16:41
标题: 关于class的一个小问题
1、用实例作参数时,何时用class a形式,何时用new class()形式?
比如:
public void paint(Graphics g){}为什么不能写成public void paint(new Graphics()){}?
而addKeyListener(new KeyAdapter(){});就不能写成addKeyListener(KeyAdapter k{});?

作者: 尤洋    时间: 2012-8-9 17:01
这个问题很简单
public void paint(Graphics g){}是一个函数  在函数的参数列表里有 (参数类型 参数),这是格式,没有为什么。

而addKeyListener(new KeyAdapter(){});是在调用函数,只需要往里面传参数,不需要类型。
作者: 韩伟    时间: 2012-8-9 18:02
LZ应该是新手,之所以有这个疑问,是因为你对内存分配还是不是很了解。class a 是在栈内存中声明了一个标识,他不是真的一个对象,他仅仅标识了对象具体的位置。可以说他只能对外代表,而没有实权。new class 是在对内存中动态的声明了一个对象,这个是真的对象。由于它是动态声明的,所以产生的位置是不可预知的,如果不给他指定一个位置标记,那你只能在创建他的时候调用一次。
public void paint(Graphics g){}为什么不能写成public void paint(new Graphics()){}? 这句话中,()内的叫做形势参数,只是告诉系统说我需要一个什么类型的参数,而没必要真的给一个参数。这就好比,我对你说:哥们儿,帮我带瓶可乐。这里的“可乐”只是告诉你我要的是可乐,而并不是一瓶真正的可乐。
addKeyListener(new KeyAdapter(){});就不能写成addKeyListener(KeyAdapter k{});?这句话就正好相反,他是要真正执行,就给给真正的对象才行。这里就好比,你说:给,哥们儿,这是你要的可乐。这里的“可乐”可就是真的一瓶可乐
作者: 孙鑫    时间: 2012-8-10 15:55
谢谢各位大侠的解答,问题已解决




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