英文:
Can I use class variable in class method in Java?
问题
我正在学习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
我原以为,既然方法在同一个类中,方法会自动获取变量 username,所以在调用方法时我没有放任何参数。
那么...这是不是意味着方法不会从同一个类中获取任何变量呢?
英文:
I'm learning Java and practicing by myself.
I tried to make a class variable String username and I thought I would get the result
"Hi Nat" since method engHi() is in the same class with the variable.
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();
    }
}
And I got this message.
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
and then I added this.username = username in the method engHi()
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();
    }
}
And the result is
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
I thought since the method is in the same class I thought the method was gonna take the variable username 'automatically' so I didn't put any parameter when I called the method.
So.. It means methods don't take any variable from same class?
答案1
得分: 2
以下是翻译好的内容:
你代码中的问题在于你的方法 engHi() 要求一个用户名字符串作为参数传入。如果你移除 engHi() 的参数,这个错误应该会消失。
class Greetings{
    String userName = "Nat";
    public static void engHi(){ //调用 engHi() 时不需要传入任何参数
        System.out.println("Hi "+userName);
    }
}
public class Main {
    public static void main(String[] args) {
        Greetings.engHi();
    }
}
英文:
The issue with your code here is that your method engHi() requires the a username string to be sent in as a parameter.  If you remove the parameters of engHi(), this error should go away.
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();
    }
}
答案2
得分: 0
在调用中添加用户名,就像这样:Greetings.engHi("Nat");,或者从接受函数中移除它,就像这样:
public static void engHi(){
}
你的 engHi 方法期望一个用户名,在从 Greetings.engHi(); 进行调用时你没有传递用户名。
英文:
Either add a userame in call like Greetings.engHi("Nat"); or remove that from acceptig function like
public static void engHi(){
}
Your methof engHi is expecting a username which you're not passing during the call from Greetings.engHi();
答案3
得分: 0
错误与使用类变量关系不大。
相反,如果一个方法声明为 N 个参数,则需要使用 N 个参数来调用它。
声明:engHi(String userName) - 1 个参数。
调用:Greetings.engHi() - 0 个参数。
参数数量不匹配是一种语言违规。
此外,在这两行代码中:
String userName = "Nat";
public static void engHi(String userName){
username 的两个出现并不指代同一物。第一个声明了类实例的成员;第二个是 engHi 方法的形式参数,它将根据调用者提供的实际参数值进行设置。
英文:
The error has little to do with using class variables.
Rather, if a method is declared with N arguments, it needs to be called with N arguments.
Declaration: engHi(String userName) - 1 argument.
Call: Greetings.engHi() - 0 arguments.
The mismatch in argument count is a language violation.
Moreover, in these two lines:
String userName = "Nat";
public static void engHi(String userName){
the two occurences of username are not referring to the same thing. The first declares a member of an instance of the class; the second is a formal argument of the engHi method, which will be set to whatever value is provided as an actual argument by the caller.
答案4
得分: 0
一个 static 方法只能访问 static 变量。一个非 static 方法可以访问 static 和非 static 变量。
英文:
A static method may only access static variables. A non-static method may access static and non-static variables.
答案5
得分: 0
在 engHi() 方法中创建一个 Greetings 类的对象。
public static void engHI() { 
   Greetings greetings = new Greetings(); 
   System.out.println("Hi " + greetings.userName);
}
英文:
Create an object of the Greetings class in engHi() method.
 public static void engHI() { 
   Greetings greetings = new Greetings(); 
   System.out.println("Hi " + greetings.userName);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论