【问题标题】:Can I use class variable in class method in Java?我可以在 Java 的类方法中使用类变量吗?
【发布时间】:2020-10-18 22:20:14
【问题描述】:

我正在学习 Java 并自己练习。 我试图创建一个类变量String username,我想我会得到结果 “Hi Nat”,因为方法 engHi() 与变量在同一个类中。

class Greetings{
    String userName = "Nat";
    public static void engHi(String userName){
        System.out.println("Hi "+userName);
    }
}
public class Main {
    public static void main(String[] args) {
        Greetings.engHi();
    }
}

我收到了这条消息。

Error:(11, 18) java: method engHi in class com.company.Greetings cannot be applied to given types;
  required: java.lang.String
  found: no arguments
  reason: actual and formal argument lists differ in length

然后我在方法engHi()中添加了this.username = username

class Greetings{
    String userName = "Nat";
    public static void engHi(String userName){
        this.userName = userName;
        System.out.println("Hi "+userName);
    }
}
public class Main {
    public static void main(String[] args) {
        Greetings.engHi();
    }
}

结果是

Error:(12, 18) java: method engHi in class com.company.Greetings cannot be applied to given types;
  required: java.lang.String
  found: no arguments
  reason: actual and formal argument lists differ in length

我认为由于该方法在同一个类中,因此我认为该方法会“自动”获取变量用户名,因此在调用该方法时我没有输入任何参数。 所以..这意味着方法不会从同一个类中获取任何变量?

【问题讨论】:

    标签: java class variables methods


    【解决方案1】:

    在调用中添加用户名,如Greetings.engHi("Nat");,或从接受函数中删除,如

    public static void engHi(){
    }
    

    您的方法 engHi 需要一个用户名,而您在来自 Greetings.engHi(); 的呼叫期间没有传递该用户名

    【讨论】:

      【解决方案2】:

      错误与使用类变量关系不大。

      相反,如果使用 N 个参数声明方法,则需要使用 N 个参数调用它。

      声明:engHi(String userName) - 1 个参数。

      调用:Greetings.engHi() - 0 个参数。

      参数计数不匹配是语言违规。

      此外,在这两行中:

      String userName = "Nat";
      public static void engHi(String userName){
      

      username 的两次出现不是指同一件事。第一个声明类实例的成员;第二个是engHi 方法的形式参数,它将被设置为调用者作为实际参数提供的任何值。

      【讨论】:

        【解决方案3】:

        static 方法只能访问 static 变量。非static 方法可以访问static 和非static 变量。

        【讨论】:

          【解决方案4】:

          您的代码的问题在于您的方法engHi() 需要将用户名字符串作为参数发送。如果你去掉engHi()的参数,这个错误应该会消失。

          class Greetings{
              String userName = "Nat";
              public static void engHi(){ //nothing required to be passed in when you call engHi()
                  System.out.println("Hi "+userName);
              }
          }
          public class Main {
              public static void main(String[] args) {
                  Greetings.engHi();
              }
          }
          

          【讨论】:

            【解决方案5】:

            在 engHi() 方法中创建 Greetings 类的对象。

             public static void engHI() { 
               Greetings greetings = new Greetings(); 
               System.out.println("Hi " + greetings.userName);
            }
            

            【讨论】:

              猜你喜欢
              • 2018-05-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-05-14
              • 1970-01-01
              • 1970-01-01
              • 2012-06-03
              • 2022-01-19
              相关资源
              最近更新 更多