Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Мне нравится Java за её жёсткую стандартизованность. Спецификация определяет практически все тонкости с очень большой тонкостью. А значит — изучив эти тонкости один раз — вы сможете работать с ними везде.
Интересно, сколько пользователей, решивших этот тест, ответит больше чем на половину?
Long вместо long, то это совершенно не одно и то же, и так без нужды делать не стоит. Первое — объект, а второе — примитивный тип. В вычислениях объект придётся превращать в примитивный тип, и это вызовет ненужные проблемы с эффективностью кода. А если результат нужно будет записать обратно в переменную, то ещё и создастся новый объект в процессе автоупаковки.public static final long YEAR_201 = 201L;
Long year = 201L; автоупаковка будет также произведена.long единица, а в конце литерала L, а там на самом деле наоброт.Long year = 201L;
for (int offset = 0; offset < 100; offset++) {
year += offset;
}



И я бы сказал что шрифты и должны быть такими, в которых нельзя спутать 0/O, 1/l
Спецификация определяет практически все тонкости с очень большой точностью. А значит — изучив эти тонкости один раз — вы сможете работать с ними везде.
public A(int ctorNo, Object param) {
switch(ctorNo) {
case 1:
super(param);
default:
super();
}
}
число записано в шестнадцатеричной форме. Но ведь она допускает только A,B,C,D,E в качестве букв — кажете вы. Откуда тогда P и F?
class Base {
public static Base[] CHILDREN = { Child.NAME };
}
class Child extends Base {
public static String NAME = "child";
}
System.out.println(Base.CHILDREN[0]);
System.out.println(Child.NAME);
System.out.println(Child.NAME);
System.out.println(Base.CHILDREN[0]);
child
child
child
null
Before a class is initialized, its direct superclass must be initialized, but interfaces implemented by the class are not initialized.Если первым обращаются к
Base.CHILDREN, то это требует загрузки, верификации, подготовки и инициализации Base, в процессе которой происходит обращение к Child.NAME (при выполнении статического инициализации поля CHILDREN). Child. Child требует инициализации суперкласса (Base). Разрешение таких циклических зависимостей описано в JLS. Не касаясь синхронизации (для случая инициализации классов из разных потоков), произойдет следующее: JVM проверит состояние инициализации класса Base и, узнав что он инициализируется этим же потоком, продолжит процедуру инициализации класса Child. Это приведет к тому, что в static-поле NAME будет записана ссылка на соответствующую строку "child".Base продолжится и в массив CHILDREN будет записано значение инициализированного поля Child.NAME.Child, потом Base), произойдет следующее: после загрузки, верификации и подготовки класса Child его статической поле NAME будет создано и заполнено значением по умолчанию (для ссылочных полей — null). После чего JVM начнет инициализацию суперкласса Base.Base (загрузка, верификация и подготовка аналогичны) произойдет обращение к static-полю Child.NAME, что потребует инициализации Child, при попытке которой JVM выяснит, что класс находится в процессе инициализации этим же потоком и прекратит попытку. Из поля NAME будет считано текущее значение null.NAME модификатор final, тогда оно инициализируется раньше, чем будет предпринята попытка инициализировать суперкласс. Подробна эта процедура рассмотрена в 12 главе JLS. Правда, этот метод сработает только, если поле NAME инициализируется compile-time константой.\u0070u\u0062lic\u0020\u0063la\u0073\u0073
Pure \u007B\u0070ubl\u0069c\u0020st\u0061tic
void \u006Da\u0069n(\u0053tr\u0069ng[]\u0020
\u0061rgs)\u007B\u0053ys\u0074e\u006D. out.
\u0070\u0072int\u006Cn(\u0022H\u0061p\160y new \u0022+
// Мне нравится Java за её жёсткую стандартизованность.
\u0022ye\141r with Java!\r\u0022\u0029;\u007D\u007D
javac Pure.java
java Pure
Хитрые задачи по Java