Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OOP-通过引用变量和实例类访问对象_Java_Class_Oop_Object - Fatal编程技术网

Java OOP-通过引用变量和实例类访问对象

Java OOP-通过引用变量和实例类访问对象,java,class,oop,object,Java,Class,Oop,Object,我在学习类和对象,学习参考变量,访问对象的数据和方法。在我的教科书中,我们创建了一个程序,计算给定半径的圆的面积 它们在此处声明对象引用变量、创建对象并将引用指定给变量: Circle myCircle = new Circle(); 他们随后给出了下面一个查找区域的示例(getArea()*只返回给定半径的区域): 5(括号中的数字)是半径的输入吗 如果是,为什么不在getArea()括号中 另外,Circle()没有参数,所以()中怎么会有数字呢 *getArea()的代码: 顺便问一下,

我在学习类和对象,学习参考变量,访问对象的数据和方法。在我的教科书中,我们创建了一个程序,计算给定半径的圆的面积

它们在此处声明对象引用变量、创建对象并将引用指定给变量:

Circle myCircle = new Circle();
他们随后给出了下面一个查找区域的示例(
getArea()
*只返回给定半径的区域):

  • 5
    (括号中的数字)是半径的输入吗
  • 如果是,为什么不在
    getArea()
    括号中
  • 另外,
    Circle()
    没有参数,所以()中怎么会有数字呢 *getArea()的代码:

  • 顺便问一下,如果里面只有一条语句,你能去掉括号吗

    double getArea() 
    {
        return radius * radius * Math.PI;
    }
    
  • 请原谅这些糟糕的格式设置-我不能使用Ctrl-K,有人能帮我编辑一下吗

    5(括号中的数字)是半径的输入吗

    不完全如此。
    传递给
    构造函数的参数很可能会给
    半径
    字段赋值。

    如果是,为什么不在getArea()括号中

    getArea()
    是Circle的一个实例方法。它依赖于已具有半径信息的圆实例的状态。
    因此,将radius参数传递给
    getArea()
    没有意义。

    如果您在
    Circle
    类中有一个实用静态方法,可以根据半径计算面积。

    例如:

    public static double computeArea(double circleRadius){
        ...
    }
    
    您可以通过以下方式调用它:

    double area = Cicle.getArea(5.5);
    
    此外,Circle()没有参数,所以如何才能得到一个数字 还是在()里

    如果没有接受半径信息的
    构造函数,则调用
    新圆(5)
    无法编译。所以它当然需要一个。

    您应该定义一个
    构造函数,例如:

    public class Circle{
      ...
      private double radius;
    
      public Circle(double radius){
        this.radius = radius;
      }
    }
    
    顺便问一下,如果只有一个括号,你能把它去掉吗 里面的声明

    double getArea() 
    {
        return radius * radius * Math.PI;
    }
    
    括号
    ()
    是指用于声明方法和构造函数的Java语言规范。

    声明方法时,无论如何都需要它。

    我将尝试深入解释:

    public class Circle {
        // this variable can access only inside class
        private final double radius;
    
        // constructor for class Circle 
        public Circle(double rad) {
            radius = rad;
        }
    
        // method of class Circle - can be access outside 
        public double area() {
            return radius*radius*Math.PI;
        }
    }
    
    将类Circle实例化为
    Circle circle5=new Circle(5)
    现在,您得到了封装参数为
    radius=5
    的类Circle实例,您不知道任何细节,只需调用方法
    double area=circle5.area()
    即可获得圆的面积(
    rad*rad*Pi
    )。 这大大降低了复杂性。即使在这个非常简单的例子中。 现在可以打印结果了

    System.out.println(area);
    
    我想,你明白了。 第一步:实例化类并通过构造函数将所有细节封装到其中; 第二步:您可以使用自己的类(类的方法),并且永远不知道实现细节


    在您的示例中,调用构造函数时没有参数
    new Circle()
    ,而是
    new Circle(5)
    ——这是印刷错误。

    首先让我解释一下Java中的构造函数。 java中有两种类型的构造函数:1。显式和2。含蓄的 显式是指由开发人员开发的带参数的构造函数。 隐式方法,默认或非参数构造函数。 就您的情况而言,让我分析一下操作: System.out.println(“面积为”+新圆圈(5.getArea()); 新的圆圈(5),实际上意味着调用带有输入参数5的n显式构造函数。 根据您共享的知识,可以理解在这个显式构造函数中设置了半径。 我的意思是,应该存在以下构造函数:

    public Circle(int i) {
        radius = i;
        }
    

    嗯,这需要几个月的时间,所以坐好。请看链接,看看你可以在StackOverflow上问什么样的问题。我编辑它是为了让问题不那么笼统——如果这就是你所说的“花几个月”的意思的话。阅读链接,我不是为了好玩才放进去的。我读了链接。对于在这里呆了5天的人来说,这不是你的立场,而是傲慢。遵循指导原则。这里有很多人,如果我们为求职面试等做家庭作业或考试,他们会很感激的,但这不是(或世界)的运作方式。谢谢,但我有一个关于第三个问题答案的问题-从我的第一段源代码来看,它表明
    圆圈
    没有争论,那么这有什么意义呢?它应该编译,它是我教科书中源代码的一部分。
    new Circle(5)
    如果
    Circle
    类中没有匹配的构造函数,比如
    Circle(double d)
    ,它将永远不会编译。试一下,你可以检查一下。引用教科书:“例如,new Circle()使用Circle类中定义的第一个构造函数创建Circle类的对象,new Circle(25)使用Circle类中定义的第二个构造函数创建对象。一个类通常提供一个没有参数的构造函数(例如Circle())。这样的构造函数被称为无参数或无参数构造函数。“对不起,这太笼统了,但这和你想说的相符吗?嗯。假设
    Circle
    是一个声明
    radius
    字段的类
    new Circle()
    是对无参数构造函数的调用:
    public Circle(){…}
    它假定
    radius
    使用默认值进行值化,而
    new Circle(5)
    是对声明一个参数的构造函数的调用,例如:
    public Circle(double radius){…}
    ,它将
    radius
    参数存储在
    radius
    字段中,并尝试摆脱
    公共静态双计算区域(双循环){…}double area=Cicle.getArea(5.5)因为静态对象与干净的OOP无关
    
    public Circle(int i) {
        radius = i;
        }