Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 如何从其他类访问变量的值?_Java_Oop - Fatal编程技术网

Java 如何从其他类访问变量的值?

Java 如何从其他类访问变量的值?,java,oop,Java,Oop,嘿,伙计们,我是OOP新手,正在尝试制作我的第一个OOP程序。但后来我遇到了一个问题。我不知道为什么这些值没有改变,即使我在构造函数的参数上加了一个变量 这是我的密码: public class Phone { public static void main(String[] args) { addContacts(); viewContacts(); Contacts cont = new Contacts(); }

嘿,伙计们,我是OOP新手,正在尝试制作我的第一个OOP程序。但后来我遇到了一个问题。我不知道为什么这些值没有改变,即使我在构造函数的参数上加了一个变量

这是我的密码:

public class Phone {

    public static void main(String[] args) {
        addContacts();
        viewContacts();
        Contacts cont = new Contacts();

    }
    public static void addContacts(){
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter Number: ");
        int number = scan.nextInt();
        scan.nextLine();
        System.out.print("Enter name: ");
        String name = scan.nextLine();
        Contacts contacts = new Contacts(name,number);

    }
    public static void viewContacts(){
        Contacts contacts =  new Contacts();
        System.out.println("All contacts");
        System.out.println("Number: " + contacts.getNumber());
        System.out.println("Name: "+ contacts.getName());
    }
}
这是另一节课:

public class Contacts {
    private String name, message;
    private int number;


    public Contacts(String name, int number) {
        this.name = name;
        this.number = number;
    }
    public Contacts(){

    }

    public String getName() {
        return name;
    }


    public int getNumber() {
        return this.number;
    }

}
如下图所示

public class MyClass {
  Contact contact = null;
 
  public static void main(String[] args) {
     addContact();
     viewContact();
  }

  private void addContact() {
    //your scanner logic to get input goes here
     ....
    contact = new Contact(name, number);
 }

 private void viewContact() {
    System.out.println("All Contacts");
    System.out.println("Name:" + contact.getName());
    System.out.println("Number:" + contact.getNumber());
 }

问题是您在每个方法中都创建了一个新的
联系人
,这意味着
联系人
在该方法中诞生,并在该方法结束时消亡

一种可能的解决方案是在
手机
中创建一个
静态
联系人
变量。将其声明为
静态
,这一点很重要,因为您将在
静态
方法中使用它

要在方法中使用它,只需参考
contact
,而无需声明新的

public class Phone {

    static Contacts contacts;

    public static void main(String[] args) {
        addContacts();
        viewContacts();

    }
    public static void addContacts(){
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter Number: ");
        int number = scan.nextInt();
        scan.nextLine();
        System.out.print("Enter name: ");
        String name = scan.nextLine();
        contacts = new Contacts(name,number); // this is the class' Contact

    }
    public static void viewContacts(){
        System.out.println("All contacts");
        System.out.println("Number: " + contacts.getNumber()); // this is the class' Contact
        System.out.println("Name: "+ contacts.getName()); // this is the class' Contact
    }
}
更好的解决方案是
addContacts
返回一个新的
Contacts
,然后将其传递给
viewContacts
,如下所示:

public class Phone {

    public static void main(String[] args) {
        Contacts contacts = addContacts();
        viewContacts(contacts);
    }

    public static Contacts addContacts(){
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter Number: ");
        int number = scan.nextInt();
        scan.nextLine();
        System.out.print("Enter name: ");
        String name = scan.nextLine();
        return new Contacts(name,number);

    }

    public static void viewContacts(Contacts contacts){
        System.out.println("All contacts");
        System.out.println("Number: " + contacts.getNumber());
        System.out.println("Name: "+ contacts.getName());
    }
}

最后(但我们在这一点上是挑剔的)
Contacts
似乎代表一个联系人,因此它实际上应该被称为
contact
,而
addContacts
应该被称为
createContact
populateContact
,因为您在每个方法中都创建了一个新的
Contacts
。它是在这个方法中诞生的,当这个方法结束时它就死了。您可能需要
手机中的
静态
联系人
变量
,但如果我要在Phone中创建变量just do
contacts=新联系人(姓名、号码),我如何使用构造函数addContacts
中编码>(不声明新的
Contacts
并从构造函数中删除
Contacts Contacts=new Contacts();
)。