Java字符串返回null
我试图让一个类从另一个类返回一个字符串,虽然我得到的返回值为null。 我有一个set方法,可以在原始类中设置字符串,但是当我在第二个类中调用该方法时,我得到一个返回null。
这是第一堂课;
public class IceCream { // instance variables - replace the example below with your own private String flavour; public static double price; /** * Constructor for objects of class IceCream */ public IceCream() { // initialise instance variables String flavour = getFlavour(); price = 0.50; } /** * Gets price in pence. * * * @returns the price of the ice cream. */ public static double getPrice() { // put your code here return price; } public int getScoops() { return scoop; } public void setPrice(int newPrice) { price = newPrice; } public void setScoops(int scoopNumber) { scoop = scoopNumber; } public double totalCost() { double cost; cost = scoop * price; return cost; } public String getFlavour() { return flavour; } public void setFlavour(String whatFlavour) { flavour = whatFlavour; }
}
第二个类,我试图在sundaeDetails方法的println中调用我在setFlavour方法中输入的字符串。
import java.util.ArrayList; /** * Write a description of class Sundae here. * * @author (your name) * @version (a version number or a date) */ public class Sundae { // instance variables - replace the example below with your own private IceCream flavour; private Topping SundaeTopping; private int scoops; /** * Constructor for objects of class Sundae */ public Sundae() { flavour = new IceCream(); SundaeTopping = new Topping(); scoops = 0; } /** * Set scoop number. */ public void setScoops(int scoopNumber) { scoops = scoopNumber; } /** * Return scoop variable. */ public int getScoops() { return scoops; } /** * Get the price of the sundae. */ public void getPrice() { double cost; double scoopPrice = scoops * IceCream.getPrice(); if ( scoops > 0) { cost = scoopPrice * Topping.getToppingPrice(); System.out.println("Cost of Sundae: " + cost); } else { System.out.println("Need to have a scoop of ice cream in your Sundae."); } } /** * Return the details of the sundae; price, flavour, scoops etc. */ public void sundaeDetails() { System.out.println("You have " + scoops + " scoops of " + flavour.getFlavour() + "ice cream"); } }
在IceCream类构造函数中,您有:
String flavour = getFlavour()
您已创建局部变量,而不是对实例属性的引用。 getFlavour()方法返回您从未设置的属性实例,因此它为null。 你应该在构造函数中有这样的东西:
this.flavour = "default value";
或者在构造函数头上设置flavor参数:
public IceCream(String flavour) { this.flavour = flavour; (...) }
称之为:
IceCream chocolat = new IceCream(" chocolat");
如果你想改变味道,请使用setter。
你永远不会调用flavour.setFlavour()
,所以毫不奇怪flavour.getFlavour()
返回null。
风味未初始化private String flavour;
同样,当调用IceCream()
你设置String flavour = getFlavour()
,它将构造函数中的局部变量flavour
设置为null,因为getFlavour()
返回null
。 构造函数中的局部String flavour
变量IceCream
覆盖IceCream
类的String flavour
字段。 尝试将flavor作为构造函数的参数,然后将该字段设置为该字符串
public IceCream(String f) { this.flavour = f; price = 0.50; }
或者在使用您创建的对象之前调用setFlavour()
。
问题始于IceCream类的构造函数。
private String flavour; public IceCream() { // initialise instance variables String flavour = getFlavour(); price = 0.50; } public String getFlavour() { return flavour; }
第一个问题是你正在隐藏你的成员变量flavour
– 你声明另一个具有相同名称但其范围仅限于构造函数的变量。 第二个问题是你要分配getFlavour()
返回的值,它只是一个返回成员变量本身的访问者(其初始值为null)。
要修复它,您需要在构造函数中指定初始值
public IceCream() { // initialise instance variables this.flavour = "Vanilla" price = 0.50; }
在声明它时,也可以分配初始值
private String flavour = "Vanilla";
- 最长的子序列,动态编程
- java.lang.NoSuchMethodError:org.slf4j.spi.LocationAwareLogger.log(Lorg / slf4j / Marker; Ljava / lang / String; ILjava / lang / String; [Ljava / lang / Obje
- Spring-WS:指定Content-Type
- JSSE包创建两个需要两次unwraps的tls包。 为什么?
- Spring MVC 3:通过@ResponseBody返回XML
- Java addAll(集合)与新的ArrayList(集合)
- (Spring + JSP + jQuery-AJAX + JSON)设置UTF-8问题的环境?
- Java垃圾收集器是否会回收包含对其他对象的引用的非引用对象
- OS X中的Eclipse使用不同于CLI的Java版本