| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
免费IT实战开发视频教程合集分享千里之行 始于足下
共有 321 人关注过本帖
标题:请大侠帮忙解释下代码
只看楼主 加入收藏
love_bccn
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-10-29
结帖率:0
  已结贴   问题点数:20  回复次数:8   
请大侠帮忙解释下代码
class Point{
double x;
double y;
//构造器名于类一致
public Point(double x, double y){// 构造器有返回值,但不可定义其类型,也不必写出
this.x=x;
this.y=y;
}

public double getDistance(Point p){//??????
return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));//????
}
}
public class TestConstrutor {
public static void main(String[] args) {
Point p = new Point (3.0,4.0);//通过new调用构造器
Point origin=new Point (0.0,0.0);

System.out.println(p.getDistance(origin));
}

}

请问在那个方法中的参数(Point p)是什么意思?还有就是在公式中x-p.x 为什么后面的有个字母p,前面的没有?程序中两次调用构造器赋值,是怎么传到那个Math公式里的? 收起
百度了半天,也没人解释下
2018-10-29 20:26
TysonKoothra
Rank: 2
等 级:论坛游民
帖 子:4
专家分:22
注 册:2018-10-21
  得分:4 
(x-p.x) 这里第一个x,其实是this.x
2018-10-29 22:41
红柚
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:咸鱼乡的村民
等 级:版主
威 望:11
帖 子:41
专家分:175
注 册:2018-4-20
  得分:4 
Point p 意思就是你在用getDistance()这个方法的时候可以用的参数类型
类似于你应该理解 (int n)或者(double x) 这个写法吧,其实是一个意思呢
这时候你写 Point (3.0, 4.0)不就是你传入的参数 (p) 也就理解为 (x, y)的意思吧

p.x  因为你定义了一个名叫Point的有参的构造器
你的构造器里的两个成员变量x和y,这时候通过“.”来调用

程序代码:

public Point(double x, double y){  //括号内代表你用Point这个方法时的参数列表,也就是下面的局部变量
this.x = x;   //左侧x加了this代表这个是成员变量也就是你前面定义的,右侧是局部变量
this.y = y;   //在后面的方法中p.x或者p.y就是调用的这里的成员变量啦
}


建议:赋值符,运算符这些加个空格会好一些呢。

[此贴子已经被作者于2018-10-29 23:49编辑过]

2018-10-29 23:44
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:22
帖 子:380
专家分:1662
注 册:2018-2-6
  得分:4 
需要面向对象的思维,p是一个对象,有x,y属性.不带p的也是一个对象,就是这个类的对象

假如人生没有梦想,和咸鱼有什么区别!
2018-10-30 10:27
love_bccn
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-10-29
  得分:0 
谢谢,大家
2018-10-30 11:19
love_bccn
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-10-29
  得分:0 
还是不太明白( x-p.x),为什么后面的写成p.x,而前面的只是个x,绕在里面了,糊涂了能不能说的更细点。谢谢朋友们和版主
2018-10-30 11:22
红柚
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:咸鱼乡的村民
等 级:版主
威 望:11
帖 子:41
专家分:175
注 册:2018-4-20
  得分:0 
程序代码:

Point p = new Point (3.0, 4.0);
Point origin = new Point (0.0, 0.0);

p.getDistance(origin)  //这个方法,是Point类下的方法,你把origin传过去了,接下来看你定义的方法

public double getDistance(Point origin){ //可能是这没理解,为了容易理解p改成origin
        return Math.sqrt((x - origin.x) * (x - origin.x) + (y - origin.y) * (y - origin.y));
        //一般会编译默认给你加this,因为你这个方法是p调用的,所以这个值是p.x

 
//(x - origin.x) -> (p.x - origin.x) -> (3.0 - 0.0)    这个有没有点感觉
}



这里为什么不加this,因为你可以看到对你这个方法来说,没有歧义,我是p下面的方法,那么调用的自然是p的参数
前面构造器里为什么需要,因为有两个x,假如不加,就是就近原则,两个都调用局部变量,而不是成员变量,那么你的有参构造方法就没意义了

可能有理解不到位的地方,可以等别人补充。我其实也刚看完这里
2018-10-30 13:41
纵横阳仔
Rank: 7Rank: 7Rank: 7
来 自:自学成才的火星人儿
等 级:贵宾
威 望:22
帖 子:137
专家分:630
注 册:2016-10-20
  得分:4 
上楼讲解的很明白.
这里就涉及到了一个就近原则    从局部到成员(全局)

在该方法内部

第一个x首先在方法内查看,发现没有定义局部变量x;在方法参数查找.也没有,继续往外找,找到了,因为在成员变量中定义了;假如局部也定义了x变量,那么为了区分局部和成员;在使用成员变量的时候就要使用this.x来明确;正如构造方法中的那样第一个x是成员变量,第二个x是局部变量(方法参数)

第二个x,明确了这个x是方法参数中这个对象的属性   用对象.属性来表示;
2018-10-30 18:14
陈无
Rank: 2
等 级:论坛游民
帖 子:24
专家分:35
注 册:2018-10-10
  得分:4 
引用属性一般就是对象.属性,引用方法时那就是对象.方法,
2018-10-30 18:58







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023223 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved