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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

孙鑫

中级黑马

  • 黑马币:97

  • 帖子:144

  • 精华:0

© 孙鑫 中级黑马   /  2012-8-9 16:41  /  2410 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、用实例作参数时,何时用class a形式,何时用new class()形式?
比如:
public void paint(Graphics g){}为什么不能写成public void paint(new Graphics()){}?
而addKeyListener(new KeyAdapter(){});就不能写成addKeyListener(KeyAdapter k{});?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 继续加油!

查看全部评分

3 个回复

倒序浏览
这个问题很简单
public void paint(Graphics g){}是一个函数  在函数的参数列表里有 (参数类型 参数),这是格式,没有为什么。

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