Różnica między kodem znajdującym się w main(), a poza nią.

0

Witam, zastanawiam się jaka jest różnicą między przykładowo takim kodem:

import java.util.ArrayList;

public class Test
{
	public static void main(String[] args)
	{
		ArrayList<Integer> array = new ArrayList<Integer>();
		String tablica[] = new String[2];
		tablica[0] = "jeden";
		tablica[1] = "dwa";
	}
}

a takim

import java.util.ArrayList;

public class Test
{
	ArrayList<Integer> array = new ArrayList<Integer>();
	String tablica[] = new String[2];
	tablica[0] = "jeden";
	tablica[1] = "dwa";
	public static void main(String[] args)
	{
		
	}
}

Poprawnie działa tylko pierwsza druga wersja. Podałem tylko przykład, byłbym wdzięczny gdyby ktoś mi wyjaśnił różnicę.

0

Zamiast się zastanawiać, nie lepiej czytać książkę o składni języka?
To są podstawy składni Java. Umiejętność czytanie dokumentacji/książek jest ważniejsza niż poznanie składni jakiegokolwiek języka programowania.
Dlatego lepiej będzie jak nie dostaniesz odpowiedzi.
Nie piszę ze złośliwości, tylko ucząc się Java zapewne nie jesteś biednym studentem, który musi zaliczyć programowanie na jakimś dziwnym kierunku, ale wiążesz swoją karierę z programowaniem.
Pytając o takie podstawy udowadniasz, że marna będzie twoja kariera programisty.

0

Znam rozwiązanie tego problemu, wystarczy umieścić ten kod w nawiasach "{}" i wtedy ten kod jest dodawany automatycznie, w tym przypadku do konstruktora domyślnego. Zastanawia mnie jedynie dlaczego bez nawiasów nie działa, tym bardziej, że w tym przypadku już mnie ma problemów przy kompilacji:

import java.util.ArrayList;
public class Test
{
	ArrayList<Integer> array = new ArrayList<Integer>();
	String tablica[] = {"jeden","dwa"};
	Test test = new Test();

	public static void main(String[] args)
	{
		
	}
}
0

Wychodzi na to, że zmienne muszą być statyczne dla całej klasy, ponieważ rozwiązać można też problem umieszczając go w static{...}.
Tylko pytanie dlaczego muszą być statyczne dla całej klasy?

0
Biały Marian napisał(a):

Zastanawia mnie jedynie dlaczego bez nawiasów nie działa, tym bardziej, że w tym przypadku już mnie ma problemów przy kompilacji:

import java.util.ArrayList;
public class Test
{
	ArrayList<Integer> array = new ArrayList<Integer>();
	String tablica[] = {"jeden","dwa"};
	Test test = new Test();

	public static void main(String[] args)
	{
		
	}
}

Nieskończona rekurencja w konstruktorze domyślnym.

0
MarekR22 napisał(a):
Biały Marian napisał(a):

Zastanawia mnie jedynie dlaczego bez nawiasów nie działa, tym bardziej, że w tym przypadku już mnie ma problemów przy kompilacji:

import java.util.ArrayList;
public class Test
{
	ArrayList<Integer> array = new ArrayList<Integer>();
	String tablica[] = {"jeden","dwa"};
	Test test = new Test();

	public static void main(String[] args)
	{
		
	}
}

Nieskończona rekurencja w konstruktorze domyślnym.

to czy wtedy nie powinien powstac stack overflow?

0

Metoda main jest to szczególna metoda, która jest wykonywana jako pierwsza gdy uruchomimy aplikację konsolową bądź okienkową. Musi być ona zdefiniowana w jakiejś klasie w twoim przypadku jest to klasa Test. Dlaczego musi się znajdować w klasie? Osobiście nigdy nic więcej na ten temat nie szukałem, ale przypuszczam, że jest to spowodowane tym, że metody musimy umieszczać w klasach. Jak by wyglądał plik klasy

.java
z samą jedną metodą statyczną? Po prostu ta specjalna metoda jak każda inna w Javie musi należeć do jakiejś klasy. Jest ona statyczna, dlatego że jest uruchamiana bez utworzenia obiektu klasy otaczającej. Jej uruchomienie może wyglądać np. tak

Test.main()

Dlatego w momencie jej uruchomienia nie masz dostępu do zmiennych zadeklarowanych w klasie Test, bo po prostu obiekt typu Test nie istnieje. Jeśli chcesz mieć do niego dostęp musisz w metodzie main stworzyć taki obiekt Test test = new Test();

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