簡體   English   中英

如何在Java中將字符串值一類調用到另一類

[英]How to call String value one class to another class in Java

public class Sample1 {
    public String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static void main(String[] args) {
        Sample1 s1= new  Sample1();
        s1.setName("Abc");
    }
}


public class Sample2 {
    public static void main(String[] args) {
        Sample1 n2= new  Sample1();
        System.out.println(n2.getName());
    }
}

我有兩個類Sample1和Sample2兩個。 我正在使用setter方法分配字符串值,並使用getter方法返回另一個類,但輸出為null。 為什么輸出為null以及如何從一個調用到另一個類中獲取字符串值?

我認為您誤解了main方法,也許我錯了,但是只執行了一種main方法。

如果您運行Sample2.main-在Sample1上沒有設置名稱,則該名稱為null(Sample1.main從未執行)。

如果運行Sample1.main-將創建Sample1並為其分配一個名稱。

因此,可以在Sample2.main中分配名稱:

public static void main(String[] args) {
  Sample1 n2= new  Sample1();
  n2.setName("xxx");
  System.out.println(n2.getName());
}

或通過構造器完成。

public class Sample1 {
  private final String name;
  public String getName() {
    return name;
  }
  public Sample1(String name) {
    this.name = name;
  }
}

考慮代碼:

Sample1 n2= new  Sample1();
System.out.println(n2.getName());

這里沒有設置名稱,因此您需要先設置名稱,然后再獲取名稱。

Sample1 n2= new  Sample1();
n2.setName("name goes here");
System.out.println(n2.getName());

另外,您可以在Sample1類中嘗試使用參數化的構造函數,並像在sample2類中那樣進行訪問:

Sample1 n2= new  Sample1("your name goes here");
System.out.println(n2.getName());

構造函數將是:

public Sample2(String name){
this.name = n;
}

您可以在Sample1類中添加方法並在Sample2類中訪問它的三件事。

我不想在Sample2類中設置字符串值,僅需要在Sample1中分配字符串值,之后我就需要在Sample2類中使用該字符串值

    public class Sample1 {
    private String _name;
    public String getName() {
        return _name;
    }
    private setName(String name) {
        _name = name;
    }
    public SetNameHelper(){
       setName("somestring");//You will be setting the name in Sample 1
    }
}


public class Sample2 {
    public static void main(String[] args) {
        Sample1 n2= new  Sample1();
        n2.SetNameHelper();
        System.out.println(n2.getName());//You will be getting Name in Sample 2 class
    }
}
class Sample2 {

Sample1 sample1;

Sample2(Sample1 sample){
    this.sample1 = sample;
}

private String getSample1Name() {
    return this.sample1.getName();
}

public static void main(String[] args) {

    Sample1 sample1 = new Sample1();
    sample1.setName("Abc");

    Sample2 n2= new  Sample2(sample1);
    System.out.println(n2.getSample1Name());
}

}

我想我理解您的困惑:您將主要功能誤認為構造函數

我注意到您在每個類中創建了一個main函數,其唯一作用是創建實例並設置該類的內部字段。 它可能是您正在尋找的構造函數。

這是交易:

  • 主要方法是程序的入口點。 運行我,它就一直存在:開始執行代碼。 您可能(99.9%的情況)每個項目僅需要一種main方法。
  • 構造函數是一種創建每個類的實例的方法,即可以在代碼中其他位置操作的對象。 閱讀有關面向對象的編程的信息

所以這是您的示例,已固定(我認為),以某種方式可以將sample1的值帶入sample2 ,如您所說:

public class Sample1 {

    public String name;
    public String Sample1(String initialName){
         this.name = initialName;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

public class Sample2{
    public String name;
    public String Sample2(String initialName){
         this.name = initialName;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

public class ProgramEntryPoint{
    public static void main(String[] args) {
        Sample1 s1 = new  Sample1("a name");
        System.out.println("Initial sample1 name: " + s1.getName());
        s1.setName("a New Name!");
        System.out.println("New sample1 name: " + s1.getName());

        Sample2 s2 = new Sample2(s1.getName());
        System.out.println("Initial sample2 name: " + s2.getName());
    }
}

一旦運行ProgramEntryPoint.main,它將打印:

初始樣本1名稱:名稱
新的sample1名稱:新名稱!
sample2的初始名稱:新名稱!


這都是簡單的Java東西,您應該閱讀一些基本教程(oracle網站上的教程是一個好的開始)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM