Java 全局变量使我为null
我想在我的项目中使用全局变量,所以我只需要一个类,在这个类中我可以轻松地设置和获取任何变量数据 像这样: 但是当我初始化它时,我得到一个空异常。 我已经通过创建Glob_变量类的对象初始化了它 比如: 当我调用第二个活动时,当我跟踪时,得到了null变量。 我打过这样的电话:Java 全局变量使我为null,java,android,Java,Android,我想在我的项目中使用全局变量,所以我只需要一个类,在这个类中我可以轻松地设置和获取任何变量数据 像这样: 但是当我初始化它时,我得到一个空异常。 我已经通过创建Glob_变量类的对象初始化了它 比如: 当我调用第二个活动时,当我跟踪时,得到了null变量。 我打过这样的电话: Glob_variable g = new Glob_variable(); g.getPath(); 那么你能告诉我在哪一点上我犯了错误吗?Glob\u variable g=新的Glob\u variable;将创建
Glob_variable g = new Glob_variable();
g.getPath();
那么你能告诉我在哪一点上我犯了错误吗?Glob\u variable g=新的Glob\u variable;将创建新实例,使用静态变量或应用单音
单音:
Glob_变量g=新的Glob_变量;将创建新实例,使用静态变量或应用单音
单音:
我认为这是因为您正在从Glob_变量类的另一个实例调用get方法
Glob_variable g = new Glob_variable();
g.setPath("asdasd");
String path = g.getPath();
以上代码是有效的。但是,如果在一个类中使用了上面的代码之后在另一个类/活动中使用了下面的代码,那么它是无效的,因为您已经在另一个类/活动中创建了Glob_变量的另一个实例
Glob_variable g = new Glob_variable();
String path = g.getPath();
试着在你的代码中遵循单吨模式
public class Glob_variable
{
private Glob_variable GVariableClass;
private static String Path;
private Glob_variable()
{
GVariableClass = this;
}
public static Glob_variable getInstance()
{
if ( GVariableClass == null )
{
GVariableClass = new Glob_variable();
}
return GVariableClass;
}
/**********************************************/
public void setPath(String Path) {
this.Path = Path;
}
public String getPath() {
return Path;
}
/**********************************************/
}
我认为这是因为您正在从Glob_变量类的另一个实例调用get方法
Glob_variable g = new Glob_variable();
g.setPath("asdasd");
String path = g.getPath();
以上代码是有效的。但是,如果在一个类中使用了上面的代码之后在另一个类/活动中使用了下面的代码,那么它是无效的,因为您已经在另一个类/活动中创建了Glob_变量的另一个实例
Glob_variable g = new Glob_variable();
String path = g.getPath();
试着在你的代码中遵循单吨模式
public class Glob_variable
{
private Glob_variable GVariableClass;
private static String Path;
private Glob_variable()
{
GVariableClass = this;
}
public static Glob_variable getInstance()
{
if ( GVariableClass == null )
{
GVariableClass = new Glob_variable();
}
return GVariableClass;
}
/**********************************************/
public void setPath(String Path) {
this.Path = Path;
}
public String getPath() {
return Path;
}
/**********************************************/
}
嗯,这里有很多答案,但我想你和我一样,也来自VBor类似的世界。我看到你所有的变量都是用大写字母声明的 您必须了解,与VB不同,Java中没有真正的全局访问。当您使用“new”运算符时,将创建该类的新实例,并根据构造函数约定重新分配所有值。所以,从头开始实例化一个用于存储全局值的变量 第二种选择是静态变量,但我发现您在使用它们时也有困难。在这里,我有一种强烈的感觉,有时在赋值之前使用静态变量。你必须确保你的二传手总是在你的接球手之前被召唤。您甚至可以通过如下自定义异常
public class Glob_variable {
static String Path = "";
/**********************************************/
public static void setPath(String Path) {
Glob_variable.Path = Path;
}
public static String getPath() throws Exception{
if("".equals(Path)){
throw new Exception("Variable no inited yet")
}
return Path;
}
/**********************************************/
}
使用Glob_variable.getPath等访问变量。还可以尝试以下Java命名约定,从长远来看,这将对您有所帮助:
我发现下面的链接对理解Singlton非常有用,请阅读
全局值是常量还是必须在运行时设置?如果它们是常量,那么我会说你创建了一个带有最终变量的接口,并在代码中使用它们。好吧,这里有很多答案,但我想你和我一样,也来自VBor类似的世界。我看到你所有的变量都是用大写字母声明的 您必须了解,与VB不同,Java中没有真正的全局访问。当您使用“new”运算符时,将创建该类的新实例,并根据构造函数约定重新分配所有值。所以,从头开始实例化一个用于存储全局值的变量 第二种选择是静态变量,但我发现您在使用它们时也有困难。在这里,我有一种强烈的感觉,有时在赋值之前使用静态变量。你必须确保你的二传手总是在你的接球手之前被召唤。您甚至可以通过如下自定义异常
public class Glob_variable {
static String Path = "";
/**********************************************/
public static void setPath(String Path) {
Glob_variable.Path = Path;
}
public static String getPath() throws Exception{
if("".equals(Path)){
throw new Exception("Variable no inited yet")
}
return Path;
}
/**********************************************/
}
使用Glob_variable.getPath等访问变量。还可以尝试以下Java命名约定,从长远来看,这将对您有所帮助:
我发现下面的链接对理解Singlton非常有用,请阅读
全局值是常量还是必须在运行时设置?如果它们是常量,那么我会说您创建了一个带有最终变量的接口,并在代码中使用它们。我之前使用过静态变量,但我有些时候没有获得成功。如果是静态变量,它总是一样的,如果不喜欢静态变量,则使用单例静态变量应该可以工作。如果不成功,可能是因为其他错误。请参阅,因此只有一个Glob_变量实例会被使用。我之前使用过静态变量,但我没有获得成功。如果它是静态的,它总是得到相同的结果。如果不喜欢静态的,则使用单例静态变量应该可以工作。如果不成功,可能是因为其他错误。请参阅,因此只会使用Glob_变量的一个实例。可能是因为我在第二个活动中调用get方法而引发此问题。使用Glob_变量g=新Glob_变量;g、 getPath;所以可能是一次创建一个新实例……不是吗?你能告诉我新的字符串变量machinename有额外的过程吗?或者和它一样,这个问题可能是因为我在第二个activity.with using Glob_variable g=new中调用get方法而引起的
Glob_变量;g、 getPath;所以可能是一次创建一个新实例……不是吗?你能告诉我新的字符串变量machinename有额外的过程吗?还是和现在一样