【问题标题】:No parentheses in javajava中没有括号
【发布时间】:2013-12-28 11:57:56
【问题描述】:

我正在学习 Java,我了解到方法使用括号来传递参数。但是,我也注意到,有时我会看到在我看来像方法但没有括号的代码。

MyObject.something()

MyObject.somethingElse

somethingElse 没有括号的地方。我认为这类似于 arrayList 如何使用 size 方法获取其大小:

myList.size()

而数组有长度来获取它的大小,它没有括号:

myArray.length

我的假设正确吗?如果不是,有什么区别? 这可能是一个基本问题,但由于我需要解释这个问题的字数太多,我很难找到它。

【问题讨论】:

    标签: java parentheses


    【解决方案1】:

    somethingElse 是一个属性(数据成员),而不是一个方法。当您访问该成员时,不会运行类中的任何代码,这与运行类中代码的方法不同。

    这是一个例子:

    public class Foo {
    
        public int bar;
    
        public Foo() {
            this.bar = 42;
        }
    
        public int getBlarg() {
            // code here runs when you call this method
            return 67;
        }
    
    }
    

    如果你创建一个Foo 对象:

    Foo f = new Foo();
    

    ...您可以在没有括号的情况下访问 属性 bar

    System.out.println(f.bar);        // "42"
    

    ...您可以使用括号调用方法getBlarg

    System.out.println(f.getBlarg()); // "67"
    

    当您调用getBlarg 时,getBlarg 方法中的代码将运行。这与访问数据成员foo 有着根本的不同。

    【讨论】:

      【解决方案2】:

      它是一个类字段,不是private 字段(通常可以是protectedpackagepublic),因此您可以直接从课堂上获取它。通常字段是私有的,所以你不能把它放在你的类定义之外。

      【讨论】:

      • +1 用于使用正确的术语 - “字段”,而不是不正确的术语 - “财产”,就像其他一些答案一样。
      【解决方案3】:

      myList.size()调用列表类中定义的方法(公共定义)

      myArray.length 调用数组类中的属性而不是方法

      public class MyClass{
      
          public int length;
      
          public int size(){
          ....
          }
      }
      
      MyClass mc =new MyClass();
      mc.length;
      mc.size();
      

      【讨论】:

        【解决方案4】:

        这是一个被称为 someObject 的实例化对象的触发方法。

        someObject.something();
        

        这是访问名为 someObject 的对象的属性(很可能是公共的属性)。

        someObject.name
        

        【讨论】:

        • 可以打包也可以保护
        猜你喜欢
        • 2017-10-28
        • 2021-05-16
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多