Wpis z mikrobloga

A tak mnie naszło ( ͡º ͜ʖ͡º) jeśli mam statyczną klasę, to instancja jej jest tak jakby tworzona przy odpalaniu się programu? W związku z tym jak to działa? Jeśli mam kontruktor, to jest on wywoływany (tak wiem, że inaczej się wywoła defaultowy)? Aktualnie nie mam dostępu do kompa, a później zapomnę XD
#java #naukaprogramowania
  • 12
@TMBRK: jeśli nie tworzysz instancji to kod z konstruktora nie jest wykonywany, ale zawsze przed konstruktorami jeśli są to polecą jeszcze bloki statyczne (jak chcesz zainicjalizować jakąś zmienną statyczną czymś bardziej skomplikowanym niż "static public int dupa=123" to możesz tam je umieścić, będzie to brzydkie - jak wszystko co statyczne ( ͡° ͜ʖ ͡°), i może spowolnić start aplikacji w razie upchnięcia tam czegoś kosztownego - ale
@TMBRK: instancja statycznej klasy nie jest tworzona przy odpalaniu programu ale przy pierwszym odniesieniu do czegokolwiek w owej statycznej klasie - krótko mówiąc, dopiero wtedy kiedy jest potrzebna. Jeśli masz w kodzie statyczną klasę i nigdy nigdzie jej nie używasz to jej instancja nie zostanie stworzona.
instancja statycznej klasy nie jest tworzona przy odpalaniu programu ale przy pierwszym odniesieniu do czegokolwiek w owej statycznej klasie - krótko mówiąc, dopiero wtedy kiedy jest potrzebna. Jeśli masz w kodzie statyczną klasę i nigdy nigdzie jej nie używasz to jej instancja nie zostanie stworzona.


@Myzreal: Bzdury!
@63274682374: Sam jesteś bzdurą.

A class or interface type T will be initialized immediately before the first occurrence of any one of the following:

- T is a class and an instance of T is created.

- T is a class and a static method declared by T is invoked.

- A static field declared by T is assigned.

- A static field declared by T is used and the field
@asunez:
@Myzreal:
Instancja klasy to inaczej obiekt klasy. W Javie obiekt danej klasy (obojętnie czy statycznej czy nie) standardowo tworzymy przy użyciu operatora new (są też inne sposoby, ale nie o tym teraz mówimy) wskazując konstruktor, który ma zostać wywołany.
Pomyliłeś ładowanie klasy i inicjalizację jej pól statycznych z tworzeniem obiektu klasy - a o tym było pytanie.

PS. Twoje wypowiedzi są kolejnym przykładem na to że certy są bezużyteczne.
@Myzreal: Swoją drogą to też trzeba być nieźle "zacertyfikowanym", żeby napisać coś z podstawowymi błędami i jeszcze próbować udowodnić poprawność wypowiedzi cytatami z JLS, które mówią coś wprost przeciwnego.

Pomijając już ten błąd odnośnie terminologii - instancja, inicjalizacja... oraz to co jest następstwem czego.

Piszesz

instancja statycznej klasy nie jest tworzona przy odpalaniu programu ale przy pierwszym odniesieniu do czegokolwiek w owej statycznej klasie


a potem cytujesz


A class or interface
@63274682374:

Odwołanie do statycznego finalnego pola

Nie, do wartości constant - czyli final static i typu prymitywnego lub stringa - bo te są inlinowane przy kompilacji więc w rzeczywistości nie ma odwołania do klasy.

A tak to pojawia się problem że "instancja klasy" użyte przez @Myzreal odwołuje się do instancji klasy "Class", więc jak by nie patrzeć jest to poprawne określenie tylko mylące bo nie wiesz czy chodzi o jakąś
Nie, do wartości constant - czyli final static i typu prymitywnego lub stringa - bo te są inlinowane przy kompilacji więc w rzeczywistości nie ma odwołania do klasy.


@GotoFinal: Jak najbardziej, dzięki za sprostowanie.

A tak to pojawia się problem że "instancja klasy" użyte przez @Myzreal odwołuje się do instancji klasy "Class", więc jak by nie patrzeć jest to poprawne określenie tylko mylące bo nie wiesz czy chodzi o jakąś klasę