Как создать переменную с глобальной областью видимости, но она не должна быть статической - PullRequest
0 голосов
/ 17 февраля 2020

Нужна переменная для хранения значения, которое будет присвоено один раз и будет использоваться каждым методом класса

, если я укажу его как переменную non stati c, оно не будет содержать значение

Class Test{

private String test;

public void method1(){
     test = "String1";
}

public void method2(){
     System.out.println(test.length());
}

} 

Получение исключения Null Pointer. значение теста будет использоваться в каждом методе.

Может кто-нибудь помочь мне, как решить проблему.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Возможно, ваша проблема в том, что вы создаете несколько объектов класса Test. Например, это должно работать:

Test test1=new Test();
test1.method1(); //call this first then other methods
test1.method2();

Вы должны использовать этот объект "test1" в качестве параметра там, где вам это нужно.

Если вы хотите получить доступ к переменной глобально, создайте класс Singletone :

    class Test{ 

    private static Test single_instance = null; 
    private String test; 

    // private constructor restricted to this class itself 
    private Test(){ 
    } 

    // static method to create instance of Singleton class 
    public static Test getInstance(){ 
        if (single_instance == null) 
            single_instance = new Test(); 

        return single_instance; 
    } 

    public void setTest(String value){ 
        test = value; 
    }  

    public String getTest(){ 
        return test; 
    }

  public static void main(String args[]){ 
        Test test = Test.getInstance(); 
        test.setTest("String1");
        test.getTest();
    }

} 
0 голосов
/ 17 февраля 2020

NullPointerException будет выброшено всякий раз, когда переменная test равна null, и вы пытаетесь вызвать методы для этой переменной. В вашем случае, когда вы вызываете method2() до method1(). Это не имеет ничего общего с глобальным, локальным или чем-либо еще, как уже упоминалось Long Vu .

Итак, сначала вы должны убедиться, что у вас нет доступа к неинициализированной переменной. Затем, если вам нужен класс с одним экземпляром, который должен быть доступен для всего приложения, вы можете реализовать это с помощью шаблона singleton. Чтобы узнать больше об этом, взгляните на эту страницу Википедии: https://en.wikipedia.org/wiki/Singleton_pattern

...