Java 如何从其他类访问变量的值?
嘿,伙计们,我是OOP新手,正在尝试制作我的第一个OOP程序。但后来我遇到了一个问题。我不知道为什么这些值没有改变,即使我在构造函数的参数上加了一个变量 这是我的密码:Java 如何从其他类访问变量的值?,java,oop,Java,Oop,嘿,伙计们,我是OOP新手,正在尝试制作我的第一个OOP程序。但后来我遇到了一个问题。我不知道为什么这些值没有改变,即使我在构造函数的参数上加了一个变量 这是我的密码: public class Phone { public static void main(String[] args) { addContacts(); viewContacts(); Contacts cont = new Contacts(); }
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 docontacts=新联系人(姓名、号码),我如何使用构造函数在addContacts
中编码>(不声明新的Contacts
并从构造函数中删除Contacts Contacts=new Contacts();
)。