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是输出以及如何从一次调用到另一个类获取字符串值?
答案 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
函数,它的唯一作用是创建一个实例并设置类的内部字段。它可能是您正在寻找的构造函数。
这是这笔交易:
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网站上的那些是一个好的开始)