static-initialization
Java: kiedy statyczny blok inicjalizacji jest przydatny?
Jaka jest różnica między inicjalizacją w bloku static:
public class staticTest {
static String s;
static int n;
... lass staticTest {
static String s = "I'm static";
static int n = 500;
static double d = 4000.0001;
....
Czy ostateczny termin jest źle zdefiniowany?
Po pierwsze, puzzle:
Co drukuje poniższy kod?
public class RecursiveStatic {
public static void main(String[] args) {
... e następujące wyjście:
a=5
a=5
Co nie wiąże się z główną częścią mojego pytania: jak zmienna final zmienia swoją zmienną?
Dlaczego kwalifikowana statyczna zmienna końcowa nie jest dozwolona w statycznym bloku inicjalizacji?
Przypadek 1
class Program {
static final int var;
static {
Program.var = 8; // Compilation error
}
... void main(String[] args) {
System.out.println(Program.var);
}
}
Dlaczego Przypadek 1 powoduje błąd kompilacji?
Jak wymusić inicjalizację statycznego członka?
Rozważ ten przykładowy kod:
template<class D>
char register_(){
return D::get_dummy(); // static function
}
temp ... atic char const get_dummy() { (void)dummy; return 42; }
};
Mimo to chciałbym, aby Klasa pochodna nie musiała tego robić. :|
Thread-bezpieczna inicjalizacja funkcji-Lokalne statyczne obiekty const
To pytanie skłoniło mnie do zakwestionowania praktyki, którą stosowałem od lat.
Dla thread-safe initializationof function- ... z 1 . i 2. powyżej), zacznę bounty na tym. Again:nie interesuje mnie, co mogę zrobić zamiast , naprawdę chcę wiedzieć o to.