如何将一个类的String值调用到Java

时间:2016-09-23 12:32:11

标签: 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是输出以及如何从一次调用到另一个类获取字符串值?

4 个答案:

答案 0 :(得分:1)

我认为你误解了主要方法,也许我错了,但是只执行了一个主要方法。

如果在Sample1上运行Sample2.main - 您没有设置名称,因此它为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());
}

或通过constuctor进行。

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

答案 1 :(得分:1)

考虑代码:

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;
}

3件事你可以在Sample1类中添加方法并在Sample2类中访问它。

  

我不想在Sample2类中设置String值,只需在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
    }
}

答案 2 :(得分:0)

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());
}

}

答案 3 :(得分:0)

我想我理解你的困惑:你错误地将main函数误认为是constructor

我注意到你在每个类中创建了一个main函数,它的唯一作用是创建一个实例并设置类的内部字段。它可能是您正在寻找的构造函数。

这是这笔交易:

  • 主要方法是程序的入口点。它只是停留,运行我:开始执行代码。您可能(99.9%的情况)每个项目只需要一个main方法。
  • 构造函数是一种创建每个类的实例的方法,即您可以在代码中的其他位置操作的对象。阅读Object-Oriented Programming

所以这是你的例子,修复(我相信),可以将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网站上的那些是一个好的开始)