在Java中,在子类的函数中使用字符串会得到null
我最近一直在学习Java,它与大多数其他语言有很大的不同。 我和其他一些人站在那里挠头,不明白为什么有些东西不起作用,这是我所看到的所有问题。这个时间 这是令人沮丧和恼火的,希望我能为其他人解释一下 问过你自己吗 “我已经试着让它工作了几个小时,但我似乎看不到它。 我试图将字符串“reducerFractions”传递给FractionReducer类,但不知何故,当它进入该类时,它会变成null 我对Java非常陌生,这只是我的第二个Java程序,我不太明白为什么它不起作用 父类: 终端输出 这里有一个明显的(对大多数人来说)问题,但只有当你经常使用对象时,这个问题才明显。好吧,天哪。 问题显然是与共享权限有关 对 大多数人会认为你只需要将字符串交换给公众,我们不想这样做,我们需要保护我们的数据,严密地保护它,以防止错误、错误和错误信息 这里需要认识到的是,您需要从子类中看到它。当然,子类可以看到它,因为它是受保护的,但它也是动态的。 所以它在本质上发生了变化 没错,所以我们所需要做的就是将其更改为静态,这样信息就可以流动,而且由于它受到保护,所以不会受到干扰 我希望这对你们中的一些人有所帮助,或者至少对某些人有所帮助在Java中,在子类的函数中使用字符串会得到null,java,oop,object,inheritance,nullpointerexception,Java,Oop,Object,Inheritance,Nullpointerexception,我最近一直在学习Java,它与大多数其他语言有很大的不同。 我和其他一些人站在那里挠头,不明白为什么有些东西不起作用,这是我所看到的所有问题。这个时间 这是令人沮丧和恼火的,希望我能为其他人解释一下 问过你自己吗 “我已经试着让它工作了几个小时,但我似乎看不到它。 我试图将字符串“reducerFractions”传递给FractionReducer类,但不知何故,当它进入该类时,它会变成null 我对Java非常陌生,这只是我的第二个Java程序,我不太明白为什么它不起作用 父类: 终端输出
protected static String reducerFractions;
从我所看到的,您将reducerFractions作为字符串参数a传递到FractionReducer。因此,如果您将对reducerFractions的引用替换为对a的引用,它应该适用于您。如下所示:
public void setFraction(String a)
{
System.out.println(a);
//Right here it's saying it's null, I don't understand why...
String[] stringReducedFraction = a.split("/");
double numerator = Float.valueOf(stringReducedFraction[0]);
double denominator = Float.valueOf(stringReducedFraction[1]);
//split up the string here for other uses
}
使字符串受保护且保持静态并不是真正可行的方法。如果您在FractionReducer中需要它,则应将其传入。您尝试从初始化器调用的方法访问字段
reducerFractions
。我认为在调用该方法时,字段未完全初始化
您可以发布符合条件的代码吗?如果没有一些省略的代码,您将无法理解。这不是问题的正确答案,因为静态变量与实例变量完全不同。您的程序在使用静态变量和多个线程时将无法按预期工作。请将您的问题扩展到告诉你正确的答案。嘿,这真的很好,我甚至没有想到。很好的捕获。我在帮助我的朋友解决这个代码,我们花了大约20分钟的时间才弄明白如何使它静态工作,但你的更好。
2/1 //The string prints out fine in the parent class
null//but null in the child?
Exception in thread "main" java.lang.NullPointerException
at FractionReducer.setFraction(FractionReducer.java:25)
at FractionCalc.FractionCalc(FractionCalc.java:73)
at FractionUI.Run(FractionUI.java:47)
at MainP2.main(MainP2.java:19)
protected static String reducerFractions;
public void setFraction(String a)
{
System.out.println(a);
//Right here it's saying it's null, I don't understand why...
String[] stringReducedFraction = a.split("/");
double numerator = Float.valueOf(stringReducedFraction[0]);
double denominator = Float.valueOf(stringReducedFraction[1]);
//split up the string here for other uses
}