Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 585|回复: 0

关于静态方法的问题,求解答!

  [复制链接]

该用户从未签到

发表于 2014-11-13 19:54:33 | 显示全部楼层 |阅读模式
12Java金币
别的不多说了,本题的答案是A,A选项没什么问题~唯一不理解的是选项C,为什么是错的?我思考了好久,求各位朋友帮忙看看

Given:
5. class Payload {
6. private int weight;
7. public Payload (int w) { weight = w; }
8. public void setWeight(int w) { weight = w; }
9. public String toString() { return Integer.toString(weight); }
10. }
11. public class TestPayload {
12. static void changePayload(Payload p) { /* insert code */ }
13. public static void main(String[] args) {

14. Payload p = new Payload(200);
15. p.setWeight(1024);
16. changePayload(p);
17. System.out.println("p is " + p);
18. } }
Which code fragment, inserted at the end of line 12, produces the output p is 420?


A. p.setWeight(420);
B. p.changePayload(420);
C. p = new Payload(420);
D. Payload.setWeight(420);
E. p = Payload.setWeight(420);

Answer: A
Explanation:


----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------

回复

使用道具 举报

该用户从未签到

发表于 2015-2-8 08:01:11 | 显示全部楼层
A. p.setWeight(420);//修改对象P中的weight值为420
B. p.changePayload(420);//changePayload(Payload)这个函数不属于P对象呀
C. p = new Payload(420);//给P重新赋值并初始化weight的值为420
D. Payload.setWeight(420);//非静态函数不能这么调用
E. p = Payload.setWeight(420);//setWeight(int)这个函数是无返回的怎么给P赋值?而且也不是静态的,这样是调不到的
回复

使用道具 举报

该用户从未签到

发表于 2015-3-2 15:44:54 | 显示全部楼层
静态方法传入的参数p跟main方法中创建的类p不是同一个,但都指向类p,答案C将参数p指向新创建的类,这没有改变main方法中创建类p的weight值.
  1. static void changePayload(Payload p)
  2.     {
  3.         System.out.println("pp1 is " + p);
  4.         p = new Payload(420);
  5.         System.out.println("pp2 is " + p);
  6.     }
  7.    
  8.     public static void main(String[] args)
  9.     {
  10.         Payload p = new Payload(200);
  11.         p.setWeight(1024);
  12.         System.out.println("p1 is " + p);
  13.         changePayload(p);
  14.         System.out.println("p2 is " + p);
  15.         System.out.println("p is " + p);
  16.     }
复制代码

若将Payload中的toString方法注释掉,添加打印方法,就可以看出:
  1. p1 is zc.Payload@6406c7e
  2. pp1 is zc.Payload@6406c7e
  3. pp2 is zc.Payload@6f92c766
  4. p2 is zc.Payload@6406c7e
  5. p is zc.Payload@6406c7e
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-4-16 21:22 , Processed in 0.431155 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表