Android studio, utworzenie nowego Activity i odwołanie do niestatycznych pól

0

Witam Wszystkich.

Moje pytanie związane jest techniczną naturą android studio jak i samego języka Javy zawartego w IDE.

Dajmy na to że mamy klasę JAVA:

public class JavaTest {

int a;
static int b;    
    
    public static void main(String[] args) {
    
        b = 5; 
        
        JavaTest jt = new JavaTest();
        jt.a = 10;
        
       System.out.println(b);
       System.out.println(jt.a);
       
    
    }
    
}

Oczywiście tutaj wszystko jest dla mnie zrozumiałem, do pól statycznych można odwołać się bez tworzenia instancji klasy, znowu do pół niestatycznych trzeba utworzyć instancję klasy.
Moje pytanie brzmi, dlaczego w android studio tworząc activity np.:

public class UstawieniaActivity extends AppCompatActivity {

    String a;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ustawienia);
        
        a = "aaa";
    }
}

kompilator nie zgłasza błędu "non-static variable"?

1

Metoda onCreate() nie jest statyczna i każde Activity ma swoją własną. onCreate() nie jest odpowiednikiem public static void main() znanego z Javy.

0

Michale, dziękuję za odpowiedź.
Faktycznie masz rację, przeoczyłem to że onCreate jest niestatyczną metodą.
Miałbym jeszcze jedno pytanie. Czy tworzenie nowego activity jest równoznaczne z utworzeniem instancji tego activity?

1

Jeżeli robisz new MyActivity(), to tak. Zawsze będziesz miał nową instancję. Niestety tworzenie aktywności przez konstruktor nie ma żadnego celu i zazwyczaj robi się coś w tym stylu startActivity(new Intent(context, MyActivity.class)). Wtedy aktywność jest zarządzana przez framework i to, czy będziesz miał nową instancję czy wrócisz do już utworzonej, zależy już od flag ustawionych w manifeście. Więcej o tym możesz poczytać tutaj -https://developer.android.com/guide/components/activities/tasks-and-back-stack#TaskLaunchModes.

0

Dziękuje Michale. Tylko co jeśli chcemy przekazać zmienne-klasowe-niestatyczne do innej klasy? Dajmy na to że mamy kilka zmiennych niestatycznych w klasie (np.String), których wartość zmieniamy poprzez EditTexty. Skoro od momentu utworzenia activity operujemy na jakiejś instancji, to jak mamy się do niej odnieść by przekazać ją obiektowo do innej klasy?
Wiem że można użyć putExtra, ale z tego co kojarzę to tyczy się to tylko przejścia do kolejnego activity.

0

W podanym przeze mnie linku jest opisane, co się stanie, jeśli przekażesz argumenty do aktywności, która już istnieje, i której może być tylko jedna instancja. W każdym razie, wtedy Intent przyjdzie do metody onNewIntent() w aktywności. Na razie na Twoim miejscu bym się tym nie przejmował, bo aktywności są domyślnie zawsze tworzone od nowa przy startActivity().

1 użytkowników online, w tym zalogowanych: 0, gości: 1