Задать вопрос
  • При инициализации класса, загружаются ли в память его instace-члены?

    Vamp
    @Vamp
    Могут загружаться, а могут и нет. JVMS не определяет должны ли загружаться все, часть или вообще никакие типы, на которые ссылается загружаемый класс. Так что данное поведение остаётся на усмотрение разработчика JVM.

    HotSpot, например, реализует ленивую загрузку классов. То есть не загружает классы, если в этом нет строгой необходимости. Он может даже не все static члены загрузить во время статической инициализации класса.

    Пример:
    import java.time.LocalDateTime;
    import java.util.concurrent.CountDownLatch;
    
    public class A {
    
        private static LocalDateTime ldt;
    
        private static CountDownLatch cdl;
    
        static {
            ldt = LocalDateTime.now();
            cdl = null;
        }
    
        public static void main(String[] args) {
            System.out.println("123");
        }
    
    }

    При запуске данного кода с аргументом JVM "-verbose:class" выведется список всех загруженных классов. Пример запуска на openjdk 12:

    ...
    [0,100s][info][class,load] java.time.temporal.TemporalAccessor source: shared objects file
    [0,100s][info][class,load] java.time.temporal.Temporal source: shared objects file
    [0,100s][info][class,load] java.time.temporal.TemporalAdjuster source: shared objects file
    [0,101s][info][class,load] java.time.chrono.ChronoLocalDateTime source: shared objects file
    [0,101s][info][class,load] java.time.LocalDateTime source: shared objects file
    ...

    Видно, что загрузился LocalDateTime и все имплементируемые им интерфейсы, но CountDownLatch в списке отсутствует, несмотря на то, что существует статическая переменная с этим типом.

    Аналогично происходит и с instance членами - классы, на которые они ссылаются, будут загружаться только по мере необходимости (использования). Вполне нормальна ситуация, когда объекты одного класса активно используются в программе, но при этом не все используемые им типы загружены. Более того, это относится не только к членам класса или объекта, но и к локальным переменным и даже просто коду:

    import java.math.BigDecimal;
    import java.time.LocalDateTime;
    
    public class A {
    
        public static void main(String[] args) {
            if ("world".equals(System.getenv("HELLO"))) {
                System.out.println(LocalDateTime.now());
            } else {
                System.out.println(BigDecimal.TEN);
            }
        }
    
    }

    В этом примере будет загружен класс BigDecimal, но не LocalDateTime. Если инвертировать условие или запустить код с выставленной переменной окружения HELLO=world, то в списке классов появится LocalDateTime, но BigDecimal будет отсутствовать.
    Ответ написан
    2 комментария
  • Ноутбук или компьютер для программирования?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    При выборе между ноутбуком и стационарным компьютером, должен возникать только один критерий - мобильность. Если вам нужна мобильная рабочая станция, чтобы можно было брать на учебу, в дорогу, куда угодно - то определенно, ноутбук ваш выбор. Если нет, то однозначно стационарный компьютер, т.к. стационарник за ту же стоимость будет в разы мощнее, его можно легко апгрейдить, и проживет он больше (если что-то сломается, то легко поменять).

    какие должны быть характеристики?


    Тут зависит от бюджета. Минимум 8 гб оперативы, современный 4-х ядерный процессор, и SSD какой-нибудь.
    Ответ написан
    Комментировать
  • Имеет ли смысл учить java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Если хочется уверенности в завтрашнем дне, то лучше Java ничего нет. С очень высокой вероятностью следующие 50 лет на джавистов будет спрос, а у джавистов будут высокие зарплаты.
    Ответ написан
  • Почему у LinkedList нет метода iterator?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Как это его нет в доках? https://docs.oracle.com/javase/7/docs/api/java/uti...
    Ответ написан
    Комментировать
  • Почему skip у new FileInputStream(FileDescriptor.in) не работает?

    @gansm
    Так как FileInputStream перекрывает skip из InputStream и вызывает нативный skip. Оберни в BufferedInputStream
    Ответ написан
    4 комментария
  • Типы объектов в java определяются во-время выполнения?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Нет, в джаве статическая типизация. Типы известны во время компиляции. В твоём примере типы объекта и переменной известны и не совпадают(и тип объекта не может быть приведён к типу переменной).
    Ответ написан
    5 комментариев
  • Чем представлена абстракция (принцип ООП) в Java?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Абстракция — ключевое явление в ООП

    Сам класс — уже абстракция чего-то, когда я создаю класс Product, то это абстракция некоторых объектов моей системы, что их отличает от всего внутреннего мира системы уже как минимум названием (и потом интерфейсом и поведением, описанным в классе).

    Но ключевое для абстракции — интерфейс, он есть в каждом классе (публичный и приватный), но тк у класса есть уже описание поведения и объекта, то такую абстракцию тяжело отделить, потому придумали конструкцию интерфейс — абстракция в чистейшем виде. Мы просто передаем абстракную договоренность и все, кто умеет с ней работать — работают с теми объектами, кто этот интерфейс реализует. Это полиморфизм.

    Также мы можем абстрагировать некий функционал от привязки к конкретному типу. И создать функционал над абстрактным (обобщенным) типом — дженерики (параметрический полиморфзм).

    Наследование, инкапсуляция и полиморфизм — ключевые способы для создания абстракции.
    • Полимофризм — создаем или интерфейс или абстрактный класс, что очертит границы абстракции и уже в конкретных реализациях абстракцию "материализуем". Или создаем некий класс, который работает с любым типом, но строго указанным при создании объекта (параметрический полиморфизм)
    • Наследование — похожее поведение у ряда классов выносим в абстракцию (родительский класс, абстрактный класс)
    • Инкапсуляция — очищаем абстракцию, отдав наружу только публичный интерфйес (границы абстракции), все остальное (не относящиеся к нашей абстракции) прячем
    Ответ написан
    Комментировать
  • Чем отличаются понятия функции, процедуры и метода в программировании?

    @D3lphi
    Функция - подпрограмма, выполняющая какие-либо операции и возвращающая значение.
    Процедура - подпрограмма, которая только выполняет операции, без возврата значения.
    Метод - это функция или процедура, которая принадлежит классу или экземпляру класса.
    Ответ написан
    5 комментариев
  • В какой зоне лучше регистрировать домен?

    Это зависит от того, какой аудитории адресован сайт.

    Обычные пользователи (не программисты, сисадмины и прочие гики) не очень-то знают о существовании разных доменных зон и запоминают доменное имя без суффикса зоны, суффикс же у всех доменов предполагают один и тот же: американцы .com, россияне .ru, финны .fi и так далее. То есть если Вы разместите сайт на домене, условно говоря, foo.ru и расскажете о нём, к примеру, немецким пользователям, то многие из них будут искать Ваш сайт по адресу foo.de, а если Вы разместите сайт на bar.de и расскажете о нём российским пользователям, многие из них будут искать его на bar.ru.

    Поэтому, если Ваш сайт адресован главным образом российской аудитории, то .ru; аналогично .ua для украинской аудитории, .by для белорусской и так далее. Впрочем, можно разместить сайт на домене в какой-то другой зоне, но в этом случае нужно зарегистрировать домены в зонах, наиболее привычных для основной аудитории сайта, и разместить на них перенаправления на основной адрес сайта.
    Ответ написан
    2 комментария
  • В какой зоне лучше регистрировать домен?

    akelsey
    @akelsey
    А смысл мучиться, ведь не имя домена делает контент, а вовсе наоборот.
    Ответ написан
    4 комментария