一个类中的方法无法在另一个类中找到该变量

时间:2015-09-16 05:36:37

标签: java

在班级" CheckingAccount.java"我正在尝试使用以下内容:

public String accountNumber(){
    String date = Account.date;
    String name = Customer.name;

    String account = date + ", " + name;
    return account;
}

使用Account.java类中的方法

public String date(Locale currentLocale){
    DateFormat df;
    df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, currentLocale);
    String formattedDate = df.format(getDateOpened());

    String date = "Opened: " + formattedDate;

    return date;
}

和Customer.java类

public String name(){
    String name = "Name: " + getName();
    return name;
}

但是,CheckingAccount.java中的方法无法看到Account.date或Customer.name,而且我不确定我在这里做错了什么。

编辑:好的,要清楚,我不是要调用该方法。我试图在方法中调用变量。我也不想在这里创建新对象。这些对象将在另一个类中创建,并且只需要能够在那时访问变量。

4 个答案:

答案 0 :(得分:1)

namedate是实例方法 - 您需要AccountCustomer的实例才能访问它们,即:

public String accountNumber() {
    String date = new Account().date();
    String name = new Customer().name();

    String account = date + ", " + name;
    return account;
}

然而,似乎更像是在尝试以静态方式使用它们,这意味着它们必须是静态的(对于所有出现的AccountCustomer都是通用的),意思是:

public static String date(Locale currentLocale) {
    DateFormat df;
    df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, currentLocale);
    String formattedDate = df.format(getDateOpened());

    String date = "Opened: " + formattedDate;

    return date;
}

public static String name() {
    String name = "Name: " + getName();
    return name;
}

但请注意,在这种情况下,他们尝试访问的任何变量或方法也必须是静态的。如果没有更多关于您的用例的说明,我不知道您应该采用哪种方式。

答案 1 :(得分:1)

对你的问题

简短回答

在该方法之外的任何地方都无法访问方法内的变量。

为了澄清您的疑虑,让我帮助您了解Java中的变量。

基本上你可以有三种类型的变量。

  1. 实例变量
  2. 类别变量
  3. 本地变量
  4. 实例变量是在类级别(在方法之外)声明的那些,它们只能由该类的Object / Instance使用。

    例如,

    class A{
        int a; // this a variable is an instance variable.
    }
    

    要在任何其他类中使用此变量,您需要执行类似的操作,

    A obj = new A();
    obj.a = 10;
    

    这里需要注意的是,该类的每个对象都有自己的实例变量副本。

    类变量是在类级别声明但使用static关键字的那些。

    例如,

    class A{
        static int b;
    }
    

    这个b变量将是类变量,可以直接按类名使用。

    A.b = 10;
    

    无需创建对象来访问此变量。类变量与对象无关。相反,它们对于所有对象都是通用的。

    局部变量是在任何方法或任何其他块中声明的变量。

    它们的范围在声明它们的{ }范围内,永远不能在该块之外使用。

    例如,

    class A{
        public void hello(){
            int a; //local variable
            // it can be used here
        }
    
        // but it cannot be used outside the method
    }
    

    现在回答你的问题。你说

      

    编辑:好的,要清楚,我不是要试着调用这个方法。我试图在方法中调用变量。

    变量namedate是相应方法中的局部变量。因此,无法按照您尝试的方式访问它们。

    相反,您需要创建类的对象,然后调用其方法

    public String accountNumber() {
        Account account = new Account();
        String date = account.date();
        String name = account.name();
    
        String account = date + ", " + name;
        return account;
    }
    

答案 2 :(得分:0)

这不是您在Java中调用方法的方式,您必须在方法名称后添加括号以指示您正在调用方法。 此外,Customer.getName()不会起作用,因为这是Customer的实例方法。您需要创建Customer类的实例才能调用它。 您可以执行以下操作(假设Customer具有默认构造函数):

new Customer().name()

new关键字告诉java您正在尝试创建给定类的新实例,在本例中为Customer。通过该实例,您可以调用name方法。

答案 3 :(得分:0)

you need to put instance for Account class and then invoking data().same u    should follow for customer class.

public String accountNumber()
{    
  Account account=new Account();
  Customer customer=new Customer();

String date = account.date();
String name = customer.name();

String account = date + ", " + name;
return account;
}
OR you can directly calling method by creating object.like
public String accountNumber() {
String date = new Account().date();
String name = new Customer().name();

String account = date + ", " + name;
return account;
}