Java 将局部变量的值传递给字段

Java 将局部变量的值传递给字段,java,class,object,Java,Class,Object,我是Java新手,我正在为一所学校做作业,但我似乎被困在了基础知识上 我的第一节课如下: public class Publisher { private String name; private String state; public Publisher(){} public Publisher(String name, String state) { super(); this.name = name;

我是Java新手,我正在为一所学校做作业,但我似乎被困在了基础知识上

我的第一节课如下:

public class Publisher {

    private String name;
    private String state;

    public Publisher(){}

    public Publisher(String name, String state) {
        super();
        this.name = name;
        this.state = state;
    }

    public String getName() {
        return name;
    }

    public String getState() {
        return state;
    }


}
在第一个类中,我有两个字段,其值通过构造函数更改,并且只能使用getter访问。我还有另一个构造函数,我用它在下一个类中创建对象

这是我的另一节课:

public class Book {

    private String bookName;
    private String language;

    public static void main(String[] args) {

        Publisher publisher = new Publisher();
        String publisherName=publisher.getName();

    }



    public Book(String bookName, String language) {
        super();
        this.bookName = bookName;
        this.language = language;
    }



    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }



}
在第二个类中,我基本上想做与第一个类相同的事情,不同的是我想使用Publisher类的对象名作为第三个字段。在我的新手思维中,我想解决这个问题,如代码所示,但我不知道是否可以以某种方式使用main方法的局部变量作为实例变量


我有一种感觉,我在某个地方犯了初学者的错误,因此欢迎任何建议或解决方案。

当您在编写
Publisher=newpublisher()
在main方法中,您只是创建了
Publisher
的一个实例,但是如果在
Book
类中使用
Publisher
作为实例变量(字段),则每次创建
Book
实例时都可以使用它

例如,如果你的图书课是这样的

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher;

    public Book(String bookName, String language, Publisher publisher) {
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher;
    }

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    public Publisher getPublisher() {
        return publisher;
    }
}
您可以在任何地方创建
Book
类,并使用其中的字段“publisher”引用
publisher
对象,如图所示

Book b = new Book();
b.publisher = new Publisher(); // or any method that returns 'Publisher' type object.

更新:即使您可以通过上述方式访问
publisher
参考,但这不是一个好的做法。您必须封装字段并使用setter和getter访问它们。(请参阅Publisher的构造函数和getter方法)

当您编写
Publisher=newpublisher()时
在main方法中,您只是创建了
Publisher
的一个实例,但是如果在
Book
类中使用
Publisher
作为实例变量(字段),则每次创建
Book
实例时都可以使用它

例如,如果你的图书课是这样的

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher;

    public Book(String bookName, String language, Publisher publisher) {
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher;
    }

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    public Publisher getPublisher() {
        return publisher;
    }
}
您可以在任何地方创建
Book
类,并使用其中的字段“publisher”引用
publisher
对象,如图所示

Book b = new Book();
b.publisher = new Publisher(); // or any method that returns 'Publisher' type object.

更新:即使您可以通过上述方式访问
publisher
参考,但这不是一个好的做法。您必须封装字段并使用setter和getter访问它们。(请参阅Publisher的构造函数和getter方法)

当您编写
Publisher=newpublisher()时
在main方法中,您只是创建了
Publisher
的一个实例,但是如果在
Book
类中使用
Publisher
作为实例变量(字段),则每次创建
Book
实例时都可以使用它

例如,如果你的图书课是这样的

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher;

    public Book(String bookName, String language, Publisher publisher) {
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher;
    }

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    public Publisher getPublisher() {
        return publisher;
    }
}
您可以在任何地方创建
Book
类,并使用其中的字段“publisher”引用
publisher
对象,如图所示

Book b = new Book();
b.publisher = new Publisher(); // or any method that returns 'Publisher' type object.

更新:即使您可以通过上述方式访问
publisher
参考,但这不是一个好的做法。您必须封装字段并使用setter和getter访问它们。(请参阅Publisher的构造函数和getter方法)

当您编写
Publisher=newpublisher()时
在main方法中,您只是创建了
Publisher
的一个实例,但是如果在
Book
类中使用
Publisher
作为实例变量(字段),则每次创建
Book
实例时都可以使用它

例如,如果你的图书课是这样的

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher;

    public Book(String bookName, String language, Publisher publisher) {
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher;
    }

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    public Publisher getPublisher() {
        return publisher;
    }
}
您可以在任何地方创建
Book
类,并使用其中的字段“publisher”引用
publisher
对象,如图所示

Book b = new Book();
b.publisher = new Publisher(); // or any method that returns 'Publisher' type object.

更新:即使您可以通过上述方式访问
publisher
参考,但这不是一个好的做法。您必须封装字段并使用setter和getter访问它们。(请参阅Publisher的构造函数和getter方法)

您可以轻松地将另一个字段添加到
图书
,该字段存储对出版商的引用-与
图书名
语言
的方式完全相同

此外,我建议您将
main
方法移动到一个新类中,而不使用其他方法,以使其更简单

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher; // <--- NEW

    public Book(String bookName, String language, Publisher publisher) { // <--- NEW PARAMETER
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher; // <--- NEW
    }

    // main removed (add it to another class)

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    // NEW METHOD
    public Publisher getPublisher() {
        return publisher;
    }
}
公共课堂教材{
私有字符串书名;
私有字符串语言;

private Publisher Publisher;//您可以轻松地将另一个字段添加到
Book
,该字段存储对出版商的引用-与
bookName
language
的方式完全相同

此外,我建议您将
main
方法移动到一个新类中,而不使用其他方法,以使其更简单

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher; // <--- NEW

    public Book(String bookName, String language, Publisher publisher) { // <--- NEW PARAMETER
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher; // <--- NEW
    }

    // main removed (add it to another class)

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    // NEW METHOD
    public Publisher getPublisher() {
        return publisher;
    }
}
公共课堂教材{
私有字符串书名;
私有字符串语言;

private Publisher Publisher;//您可以轻松地将另一个字段添加到
Book
,该字段存储对出版商的引用-与
bookName
language
的方式完全相同

此外,我建议您将
main
方法移动到一个新类中,而不使用其他方法,以使其更简单

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher; // <--- NEW

    public Book(String bookName, String language, Publisher publisher) { // <--- NEW PARAMETER
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher; // <--- NEW
    }

    // main removed (add it to another class)

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    // NEW METHOD
    public Publisher getPublisher() {
        return publisher;
    }
}
公共课堂教材{
私有字符串书名;
私有字符串语言;

private Publisher Publisher;//您可以轻松地将另一个字段添加到
Book
,该字段存储对出版商的引用-与
bookName
language
的方式完全相同

此外,我建议您将
main
方法移动到一个新类中,而不使用其他方法,以使其更简单

public class Book {

    private String bookName;
    private String language;
    private Publisher publisher; // <--- NEW

    public Book(String bookName, String language, Publisher publisher) { // <--- NEW PARAMETER
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher; // <--- NEW
    }

    // main removed (add it to another class)

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    // NEW METHOD
    public Publisher getPublisher() {
        return publisher;
    }
}
公共课堂教材{
私有字符串书名;
私有字符串语言;

private Publisher;//如果您想要第三个字段,您应该首先创建它。然后您应该在您创建的每个对象中执行赋值(例如在构造函数中),否则它将为
null

public class Book {
    private final String bookName;
    private final String language;
    private final Publisher publisher; //third field

    public Book(String bookName, String language, Publisher publisher) {
        super();
        this.bookName = bookName;
        this.language = language;
        this.publisher = publisher; //assignment of new field
    }

    public String getBookName() {
        return bookName;
    }

    public String getLanguage() {
        return language;
    }

    public String getPublisher() { //new getter
        return publisher;
    }
}
事实上,在你的代码中,