Java:无法从静态上下文错误引用非静态变量值
我正在两个独立的类中编写一个代码,该类将一个temp作为两个独立的变量,并将其打印出来,然后运行转换方法以获得其他级别的temp。我不断得到错误,非静态变量值无法从代码的Temperature.java部分的静态上下文中引用,因为变量位于非静态的构造函数中。整个概念对我来说有点混乱,我喜欢任何关于希望静态和非静态工作的输入,以及如何在它们之间切换而不会产生问题 代码如下:Java:无法从静态上下文错误引用非静态变量值,java,static,Java,Static,我正在两个独立的类中编写一个代码,该类将一个temp作为两个独立的变量,并将其打印出来,然后运行转换方法以获得其他级别的temp。我不断得到错误,非静态变量值无法从代码的Temperature.java部分的静态上下文中引用,因为变量位于非静态的构造函数中。整个概念对我来说有点混乱,我喜欢任何关于希望静态和非静态工作的输入,以及如何在它们之间切换而不会产生问题 代码如下: public class Temperature { int value = 50; String scale =
public class Temperature
{
int value = 50;
String scale = "F";
public Temperature(int value, String scale){
value = value;
scale = scale;
}
public static void value(int value){
int number;
}
public static boolean scale(String scale){
if (scale == "C"){
return true;
}
else if (scale == "F"){
return true;
}
else if (scale == "K"){
return true;
}
else{
return false;
}
}
public static void convertToCelsius(int value, String scale){
if (scale == "F"){
int newValue = (5/9) * (value - 32);
System.out.println("The equivalent tempurature is " + newValue + "C");
}
else if (scale == "K"){
double newValue = value - 273.15;
System.out.println("The equivalent tempurature is " + newValue + "C");
}
else{
}
}
public static void convertToFarenheit(int Value, String scale){
if (scale == "C"){
int newValue = ((9/5) * (value + 32));
System.out.println("The equivalent tempurature is " + newValue + "F");
}
else if (scale == "K"){
int newValue = ((9/5) * (value - 273) + 32);
System.out.println("The equivalent tempurature is " + newValue + "F");
}
else{
}
}
public static void convertToKelvin(int value, String scale){
if (scale == "F"){
int newValue = ((5/9) * (value - 32) + 273);
System.out.println("The equivalent tempurature is " + newValue + "C");
}
if (scale == "C"){
double newValue = (value + 273.15);
System.out.println("The equivalent tempurature is " + newValue + "C");
}
else{
}
}
}
对于main方法,代码位于单独的类中,如下所示:
public class UsingTemperature
{
public static void main(String[] args)
{
Temperature t = new Temperature(50, "F");//declaring an object
System.out.println(t);
// Test out conversions:
System.out.println("Test out conversions:");
// F to C
t.convertToCelsius();
System.out.println(t);
// C to F
t.convertToFahrenheit();
System.out.println(t);
// F to K
t.convertToKelvin();
System.out.println(t);
// K to F
t.convertToFahrenheit();
System.out.println(t);
// F to K:
t.convertToKelvin();
System.out.println(t);
// K to C
t.convertToCelsius();
System.out.println(t);
// C to K
t.convertToKelvin();
System.out.println(t);
}
}
t
是一个对象,但所有的convertToScale
方法都是静态的。使用Temperature.convertToScale(t.value,t.scale)
而且,t.convertToCelsius();
System.out.println(t);
可能不会做你期望它做的事情。你的convertToScale
方法没有一个是变种(它们只是打印东西),因此调用t.convertToCelsius()
只打印出转换所做的事情,然后System.out.println(t)
将打印默认对象.toString()(这会给你@0012378或其他东西)
另外,我刚刚注意到你所有的
(5/9)
和(9/5)
,这几乎肯定会打破给定的数学,因为整数除法是如何工作的。在方法中使用Static修饰符时,这些方法将独立于为类创建的任何实例而存在。
因此,在您的课堂上,您可以使用静态方法:
- 在创建新的温度实例之前先存在
- 不管有多少个温度实例,静态方法只有一个副本
当您需要使用Temperature中的方法时:Temperature.name_method(params)另请参见:Static指的是不创建对象就可以在类之外访问的内容。谢谢jhobbie!这是一个非常清晰和简单的表达方式,你在这个网站上搜索过吗?有许多可能的重复。可能的重复对主要方面来说是个好主意,但不幸的是不能解决另一方面的问题methods@user3889083还有什么问题?你的问题只是问‘不能指非静态…’我的意思是,即使替换它们也不能解决静态/非静态的初始问题,这实际上是一个很好的观点。有人建议我使用构造器,但如果没有构造器,可能会简化很多事情。非常感谢。