С чего начать изучение язык программирования java

Загрузка классов

Теперь, разобравшись с общей структурой файла, посмотрим, как JVM его обрабатывает.

Чтобы попасть в JVM, класс должен быть загружен. Для этого существуют специальные классы-загрузчики:

  1. Bootstrap — базовый загрузчик, загружает платформенные классы. Этот загрузчик является родителем всех остальных классов и частью платформы.
  2. Extension ClassLoader — загрузчик расширений, потомок Bootstrap-загрузчика. Загружает классы расширений, которые по умолчанию находятся в каталоге .
  3. AppClassLoader — системный загрузчик классов из classpath, который является непосредственным потомком Extension ClassLoader. Он загружает классы из каталогов и jar-файлов, указанных переменной среды , системным свойством или параметром командной строки .
  4. Собственный загрузчик — у приложения могут быть свои собственные загрузчики.

Главный класс приложения всегда загружается системным загрузчиком, остальные же классы могут быть загружены различными пользовательскими загрузчиками. Стоит упомянуть, что имя загрузчика создаёт уникальное пространство имён, то есть в программе может существовать несколько классов с одним и тем же полным именем, если они обрабатывались разными загрузчиками.
Поэтому каждый загрузчик делегирует свои полномочия родителю, то есть перед поиском класса для загрузки он попытается узнать, не был ли загружен нужный класс раньше.

После загрузки класса начинается этап линковки, который делится на три части.

  1. Верификация байт-кода. Это статический анализ кода, выполняется один раз для класса. Система проверяет, нет ли ошибок в байт-коде. Например, проверяет корректность инструкций, переполнение стека и совместимость типов переменных.
  2. Выделение памяти под статические поля и их инициализация.
  3. Разрешение символьных ссылок — JVM подставляет ссылки на другие классы, методы и поля. В большинстве случаев это происходит лениво, то есть при первом обращении к классу.

Класс инициализируется, и JVM может начать выполнение байт-кода методов.

JVM получает один поток байтовых кодов для каждого метода в классе. Байт-код метода выполняется, когда этот метод вызывается в ходе работы программы. Поток байт-кода метода — это последовательность инструкций для виртуальной машины Java. Каждая инструкция состоит из однобайтового кода операции, за которым может следовать несколько операндов. Код операции указывает действие, которое нужно предпринять. Всего на данный момент в Java более 200 операций. Все коды операций занимают только 1 байт, так как они были разработаны компактными, поэтому их максимальное число не может превысить 256 штук.

В основе работы JVM находится стек — основные инструкции работают с ним.

Рассмотрим пример умножения двух чисел. Ниже представлен байт-код метода:

На Java это будет выглядеть так:

По листингу выше можно заметить, что коды операций сами по себе указывают тип и значение. Например, код операции указывает JVM на целочисленное значение, равное единице. Такие байт-коды определены для самых часто используемых констант. Эти инструкции занимают 1 байт и введены специально для повышения эффективности выполнения байт-кода и уменьшения размера его потока. Подобные короткие константы также присутствуют и для других типов данных.

Всего JVM поддерживает семь примитивных типов данных: byte, short, int, long, float, double и char.

Если бы мы хотели положить в переменную а другое значение, например 11112, то нам пришлось бы использовать инструкцию :

Данные операции выполняются в так называемом фрейме стека метода. У каждого метода есть некоторая своя часть в общем стеке. Таким образом в нашем главном потоке исполнения программы создаются множество подстеков на каждый вызов метода. Более наглядно это представлено на картинке ниже:

В каждом стек-фрейме хранится массив локальных переменных, который позволяет сохранять и доставать локальные переменные, как мы сделали в примере выше, поместив значения 1 и 5 в переменные 1 и 2. Стоить отметить, что здесь компилятор также оптимизировал байт-код, используя однобайтовые инструкции. Если бы переменных в нашем методе было много, использовался бы код операции сохранения значения вместе с указанием позиции переменной в массиве.

Чтобы достучаться до пула констант класса и получить нужное значение, используются инструкции и . При этом может ссылаться только на константы с индексами от 1 до 255, поскольку размер её операнда составляет всего 1 байт. имеет 2-байтовый индекс, поэтому может ссылаться на более широкий диапазон индексов.

Когда простого пунктира мало: как подружить Java AWT Stroke и 10 приказ Минэкономразвития РФ

Мы тут в ИТМО занимаемся созданием всяких ГИС на заказ. И вот пришел к нам заказчик и попросил сделать демку, умеющую генерировать и отображать различные градостроительные планы и схемы и делать по ним кое-какую аналитику.

И все бы ничего — взяли стандартные средства для работы с изображениями, отрендерили в текстуру по шаблону сгенерированный текст, пунктирчиком разметили границы участков и показали пользователю в браузере. Но тут всплыла такая штука как ЗОУИТ — Зоны с особыми условиями использования территории. Это могут быть всякие зоны защиты инженерных сетей, водоохранные зоны и т.п.

И вот тут-то началась засада. У каждого ЗОУИТа есть свой стиль для отображения, описанный в 10 приказе Минэкономразвития (вообще порадовало, что оказывается есть цельный отдельный приказ, где прописано все в деталях, от RGB цветов линий до названий и значений полей с данными). И стили эти все достаточно непростые.

Если простую линию или пунктир нарисовать через стандартные механизмы AWT просто, для этого есть класс BasicStroke, то вот рисовать что-то такое этакое, с галочками, крестиками и прочими закорючками в разрывах или вдоль линии, из коробки в джаве не получится. При этом документация и примеры в сети довольно скудные — везде обычно пишут, как нарисовать пунктир тем же стандартным BasicStroke и на этом успокаиваются. А что делать с более сложными видами линий — нигде не сказано. Пришлось осваивать это самому.

Под катом — описание того, как сделать свой собственный Stroke, позволяющий рисовать произвольные шейпы вдоль контура фигуры.

Язык Java

Java

  • Базовые инструменты для написания и запуска программ на Java.
  • Библиотеки и классы — ядро языка. Они обеспечивают основные функциональные возможности программирования на Java: обработку исключений, многопоточность, коллекции, логирование, рефлексию, безопасность, работу с сетью, работу с XML, сериализацию, регулярные выражения.
  • Инструменты для развертывания и автоматического запуска приложений.
  • Инструменты для создания фронтенда (GUI, интерфейса пользователя). Это классы библиотек JavaFX, Swing и Java2D.
  • Библиотеки, для работы с базами данных, удаленно по сети, такие как JDBC, JNDI, RMI и Java RMI-IIOP.
  • Невысокий порог вхождения.
    Изучать Java проще, чем большинство языков с Си-подобным синтаксисом.

  • Объектно-ориентированность.
    Программы в Java строятся на основании объектов и их взаимодействии, что позволяет задействовать все преимущества ООП.

  • Переносимость.
    Благодаря использованию интерпретатора — виртуальной машины Java, — программы переносятся на различные платформы и устройства.

  • Платформенная независимость
    Программа, написанная на Java для одной платформы, компилируется в промежуточный байт-код, который может запускаться на других платформах благодаря интерпретации с помощью JVM под каждую платформу.

  • Развитая многопоточность.
    Средства Java позволяют управлять выполнением нескольких потоков, что позволяет создавать многопоточные приложения.

  • Безопасность.
    Благодаря встроенной в JVM верификации байт-кода, отсутствии в Java ручного управления памятью, слежением за переполнением стека, а также наличию различных API, которые позволяют контролировать безопасность, на этом языке можно создавать действительно безопасные приложения.

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

  • Интерпретируемость.
    Java-интерпретатор может выполнять байт-коды Java на любой машине, на которой имеется JVM и JRE.

  • Распределенность.
    У Java есть инструменты для создания распределенных приложений.

Как начать программировать на Java?

Чтобы начать изучение Java с нуля, желательно разобраться с основными понятиями: что включает в себя язык Java, что такое программа на Java и как происходит ее выполнение. Затем — переходить к синтаксису языка, его основам, изучению библиотек. После прочтения пары статей о языке Java, можно браться за его основы.

Что нужно для программирования на Java?

Для начала вам нужно установить программное обеспечение для разработки и запуска программ — JDK (Java Development Kit). После этого настройте JDK на компьютере, скачайте и установите одну из IDE (Integrated Development Environment) — это среда для разработки программного обеспечения. Самая популярная IDE — IntelliJ IDEA. Альтернативы — Eclipse, NetBeans, JCreator и даже обычный блокнот.

Установка Java на компьютер

JDK

  1. Выбрать и скачать установочный файл в зависимости от вашей операционной системы.
  2. Выполнить установку, следуя рекомендациям программы-установщика.
  3. Настроить переменную окружения, если вы используете Windows.

Жизненный цикл программы

Integrated Development Environment (IDE)

Компилятор

Исполнение программы

  1. В оперативной памяти компьютера запускается JVM. По сути это программа, которая служит для выполнения написанных нами Java-программ.
  2. С помощью начального загрузчика классов JVM загружает и инициализирует наш класс в памяти компьютера. В нашем примере это класс .
  3. Далее в нашем классе JVM ищет метод .
  4. Выполняется код метода . Если это необходимо для выполнения программы, производиться загрузка и инициализация других классов.
  5. После выполнения кода производится уборка мусора — очистка памяти и закрытие программы JVM.

IDE

  • IntelliJ IDEA
  • Eclipse
  • NetBeans

IntelliJ IDEAздесьв начале третьего уровняонлайн-курса JavaRush

За сколько можно выучить Java?

На изучение основ Java и выработку навыка программирования, скорее всего, уйдет от 6 до 12 месяцев, в зависимости от интенсивности вашего обучения. Чтобы сделать этот процесс систематическим, составьте план обучения, соберите необходимые источники и выделяйте несколько часов в день на занятия. Не забывайте о том, что ключевое в обучении программированию — это практика.

Заключение

  1. Установите Java на компьютер
  2. Изучите основные понятия
  3. Установите среду разработки
  4. Напишите и запустите свою первую программу.

Преимущества Java как языка программирования

Объектно-ориентированный: в Java все является объектом. Дополнение может быть легко расширено, так как он основан на объектной модели.

Платформонезависимый: в отличие от многих других языков, включая C и C++, Java, когда был создан, он не компилировался в платформе конкретной машины, а в независимом от платформы байт-коде. Этот байт код распространяется через интернет и интерпретируется в Java Virtual Machine (JVM), на которой он в настоящее время работает.

Простой: процессы изучения и введение в язык программирования Java остаются простыми. Если Вы понимаете основные концепции объектно-ориентированного программирования, то он будет прост для Вас в освоении.

Безопасным: методы проверки подлинности основаны на шифровании с открытым ключом.

Архитектурно-нейтральным: компилятор генерирует архитектурно-нейтральные объекты формата файла, что делает скомпилированный код исполняемым на многих процессорах, с наличием системе Java Runtime.

Портативный: архитектурно-нейтральный и не имеющий зависимости от реализации аспектов спецификаций — все это делает Java портативным. Компилятор в Java написан на ANSI C с чистой переносимостью, который является подмножеством POSIX.

Прочный: прилагает усилия, чтобы устранить ошибки в различных ситуациях, делая упор в основном на время компиляции, проверку ошибок и проверку во время выполнения.

Многопоточный: функции многопоточности, можно писать программы, которые могут выполнять множество задач одновременно. Введение в язык Java этой конструктивной особенности позволяет разработчикам создавать отлаженные интерактивные приложения.

Интерпретированный: Java байт-код переводится на лету в машинные инструкции и нигде не сохраняется. Делая процесс более быстрым и аналитическим, поскольку связывание происходит как дополнительное с небольшим весом процесса.

Высокопроизводительный: введение Just-In-Time компилятора, позволило получить высокую производительность.

Распространенный: предназначен для распределенной среды интернета.

Динамический: программирование на Java считается более динамичным, чем на C или C++, так как он предназначен для адаптации к меняющимся условиям. Программы могут выполнять обширное количество во время обработки информации, которая может быть использована для проверки и разрешения доступа к объектам на время выполнения.

После небольшого введения, обзора преимуществ и истории Java, приступим к нашему обучению.

Платформы

Платформа может относиться к типу процессора (ЦП) или другому оборудованию, на котором работает данная операционная система или приложение , типу операционной системы на компьютере или комбинации типа оборудования и типа операционной системы, работающей на нем. Пример распространенной платформы — Microsoft Windows, работающая на архитектуре x86 . Другие хорошо известные платформы настольных компьютеров включают Linux / Unix и macOS, обе из которых сами по себе являются кроссплатформенными. Однако существует множество устройств, таких как смартфоны , которые также фактически являются компьютерными платформами, но о них меньше думают. Прикладное программное обеспечение может быть написано в зависимости от функций конкретной платформы — оборудования, операционной системы или виртуальной машины, на которой оно работает. Платформа Java — это платформа виртуальных машин, которая работает во многих операционных системах и типах оборудования, и является общей платформой для написания программного обеспечения.

Аппаратные платформы

Аппаратная платформа может относиться к архитектуре набора команд . Например: архитектура x86 и ее варианты, такие как IA-32 и x86-64 . На этих машинах часто работает одна версия Microsoft Windows, хотя они могут работать и с другими операционными системами, включая Linux, OpenBSD , NetBSD , macOS и FreeBSD .

Эти 32-разрядные архитектуры ARM (и более новые 64-разрядные версии) является общим на смартфоны и планшетные компьютеры , которые работают Android , IOS , и других мобильных операционных систем .

Программные платформы

Программные платформы могут быть либо операционной системой, либо средой программирования , хотя чаще это комбинация того и другого. Заметным исключением из этого правила является Java , которая использует независимую от операционной системы виртуальную машину для своего скомпилированного кода, известного в мире Java как байт-код . Примеры программных платформ:

  • BlackBerry
  • Android для смартфонов и планшетных компьютеров (x86, ARM)
  • iOS ( ARM )
  • Microsoft Windows (x86, ARM

    Интерфейс командной строки , также известный под именами реализации .NET Framework (от Microsoft) и кроссплатформенным вариантом Mono (ранее Novell, а теперь Xamarin )

    )

  • Ява
  • Веб-браузеры — более или менее совместимы друг с другом, работают с веб-приложениями на JavaScript.
  • Linux (x86, PowerPC, ARM и другие архитектуры)
  • macOS (x86, PowerPC (на 10.5 и ниже))
  • Mendix
  • Solaris (SPARC, x86)
  • SymbianOS
  • SPARC
  • PlayStation 4 (x86), PlayStation 3 (на базе PowerPC) и PlayStation Vita (ARM)
  • Unix
Незначительный / исторический
  • AmigaOS (m68k), AmigaOS 4 (PowerPC), AROS (x86, PowerPC, m68k), MorphOS (PowerPC)
  • Atari TOS , MiNT
  • BSD (многие платформы; см., Например, NetBSDnet)
  • Системы типа DOS на x86: MS-DOS , IBM PC DOS , DR-DOS , FreeDOS
  • OS / 2 , eComStation

Платформа Java

Как отмечалось ранее, платформа Java является исключением из общего правила, согласно которому операционная система является программной платформой. Язык Java обычно компилируется в виртуальную машину: виртуальный ЦП, на котором выполняется весь код, написанный для языка. Это позволяет запускать один и тот же исполняемый двоичный файл во всех системах, реализующих виртуальную машину Java (JVM). Программы Java могут выполняться изначально с использованием процессора Java . Это нечасто и в основном используется для встроенных систем.

Код Java, работающий в JVM, имеет доступ к службам, связанным с ОС, таким как дисковый ввод-вывод и доступ к сети, если предоставлены соответствующие привилегии. JVM делает системные вызовы от имени приложения Java. Эта настройка позволяет пользователям выбирать соответствующий уровень защиты в зависимости от ACL . Например, дисковый и сетевой доступ обычно разрешен для настольных приложений, но не для апплетов на основе браузера . JNI также можно использовать для обеспечения доступа к специфическим функциям операционной системы.

В настоящее время программы Java Standard Edition могут работать в Microsoft Windows, macOS, нескольких Unix-подобных операционных системах и еще нескольких не-UNIX-подобных операционных системах, таких как встроенные системы. Для мобильных приложений используются плагины браузера для устройств на базе Windows и Mac, а Android имеет встроенную поддержку Java. Также существуют подмножества Java, такие как Java Card или Java Platform, Micro Edition , предназначенные для устройств с ограниченными ресурсами.

Профессия «Программист Java» от GeekBrains

Длительность 7 месяцев
Уровень с нуля
Для кого подходит ● Новичкам в разработке
● Начинающим программистам
Формат видеолекции в формате вебинаров по вторникам и субботам + домашнее задание + обратная связь от ментора
Гарантии ● Гарантированная стажировка у партнёров курса или опыт участия в стартапе.
● Помощь при составлении резюме
Итоги Диплом в соответствии с установленным образцом + проекты в портфолио
Цена ● Полная – 7 332 руб. в месяц.
● УСПЕЙ НА СКИДКУ! – 4 399 руб. в месяц!
● Есть рассрочка без первого платежа
● 13% от стоимости обучения можно вернуть в качестве налогового вычета
Ссылка
  • База по программированию. Интерактивная программа: 2 недели
  • 1-й уровень: 1 мес.
  • Базовый курс
  • Видеоуроки по принципам работы с базами данных
  • 2-й уровень: 1 мес.
  • 3-й уровень: 2 мес.
  • Алгоритмы и структура языка Java. Базовая подготовка: 1 мес.
  • Базовая подготовка CSS/HTML: 1 мес.
  • Базовая веб-разработка с применением Spring-фреймворка: 1 месяц
  • Стажировка на протяжении 2-месяцев в Geek Brains

Преподаватели:

  • Евдокимов Артем — Java developer, разработчик системы электронного документооборота в «Башнефть-Информ».
  • Кадочников Алексей — Frontend-developer в Ru Group.
  • Кручинин Сергей — разработчик военных систем связи. Преподает компьютерные сети и введение в GNU/Linux.

По окончании вы сможете:

  • Использовать Java Core
  • Заниматься разработкой Swing-приложений
  • Отлаживать Java-приложения
  • Заниматься разработкой графического интерфейса пользователей
  • Разрабатывать ПО: от постановки задач до архитектуры приложений и тестирования
  • Работать с SQL
  • Делать юнит-тестирование, применяя JUnit

Мои впечатления: Достаточно долгий курс с обширной образовательной программой. Подходит тем, кто не торопится получать знания в срочном порядке. Дополнительный бонус в том, что предлагается полноценная двухмесячная стажировка в самой обучающей компании. Это отличный шанс для начинающих программистов.

Помимо портфолио из домашнего задания у вас уже будет полноценный опыт работы. Это значительно увеличит шансы не только найти работу, но и увеличить гонорар уже на начальном этапе.

Гарантированного трудоустройства здесь нет, поэтому нужно будет проявлять себя при обучении и стажировке.

Получить скидку →

iPhone 5S ошибка 9: советы от производителя

Некоторые советы дает сама Apple. Компания утверждает, что эта ошибка всплывает при утрате связи между iOS-гаджетов и ПК. А именно речь идет об обрыве связи с утилитой iTunes, осуществляемой через USB-шнур.

Иногда подобное случается, когда юзер сам отключает гаджет от ноутбука или ПК в процессе прошивки.

Чаще всего возникает ошибка 9 при восстановлении iPhone пятой версии, но не редкость, когда такое случается на 6S и других моделях телефонов.

Решения этой проблемы Apple предлагает следующее:

  • Устранение неисправностей подключения по USB.
  • Использование другого шнура.
  • Выбор другого порта ПК или ноутбука.
  • Прошивка на другом ноутбуке или ПК.
  • Тщательный анализ стороннего софта и устранение конфликтов с «антивирусниками».

Как видите, все предложенные Apple варианты носят общий характер. Безусловно, все их стоит опробовать, если ошибка 9 появилась у вас в процессе прошивки смартфона. Но посмотрим, что советуют специалисты, исходя их своего практического опыта.

Пакеты специального назначения

java.applet

Этот пакет, созданный для поддержки создания Java-апплетов , позволяет загружать приложения по сети и запускать их в защищенной песочнице. Ограничения безопасности легко накладываются на песочницу. Разработчик, например, может применить цифровую подпись к апплету, тем самым пометив его как безопасный. Это позволяет пользователю предоставить апплету разрешение на выполнение ограниченных операций (таких как доступ к локальному жесткому диску) и снимает некоторые или все ограничения песочницы. Цифровые сертификаты выдаются центрами сертификации .

java.beans

В пакет включены различные классы для разработки и управления beans, повторно используемые компоненты, определенные архитектурой JavaBeans . Архитектура предоставляет механизмы для управления свойствами компонентов и запуска событий при изменении этих свойств.

API-интерфейсы в предназначены для использования инструментом редактирования bean-компонентов, в котором bean-компоненты можно комбинировать, настраивать и управлять ими. Один из типов редакторов компонентов — это дизайнер графического интерфейса пользователя в интегрированной среде разработки .

java.awt

Набор инструментов абстрактного окна предоставляет доступ к базовому набору виджетов графического интерфейса пользователя на основе набора виджетов базовой собственной платформы, ядра подсистемы событий графического интерфейса пользователя и интерфейса между собственной оконной системой и приложением Java. Он также предоставляет несколько основных менеджеров компоновки , пакет передачи данных для использования с буфером обмена и перетаскиванием , интерфейс для устройств ввода, таких как мыши и клавиатуры , а также доступ к панели задач на поддерживающих системах. Этот пакет вместе с содержит наибольшее количество перечислений (всего 7) в JDK 6.

java.rmi

Пакет обеспечивает Java удаленный вызов метода для поддержки удаленных вызовов процедур между двумя приложениями ява , работающих в разных виртуальных машинах .

javax.rmi

Пакет обеспечивает поддержку удаленного обмена данными между приложениями, используя RMI над IIOP протокола. Этот протокол сочетает в себе функции RMI и CORBA.

javax.swing

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

Этот пакет содержит наибольшее количество классов (всего 133) в JDK 6. Этот пакет, а также также содержит наибольшее количество перечислений (всего 7) в JDK 6. Он поддерживает подключаемые стили (PLAF), так что виджеты в графическом интерфейсе может имитировать те из базовой собственной системы. Шаблоны проектирования пронизывают систему, особенно модификация шаблона модель-представление-контроллер , которая ослабляет связь между функцией и внешним видом. Одно несоответствие заключается в том, что (начиная с J2SE 1.3) шрифты отрисовываются базовой собственной системой, а не Java, что ограничивает переносимость текста. Существуют обходные пути, например использование растровых шрифтов. Как правило, используются «макеты», которые удерживают элементы в рамках эстетически согласованного графического интерфейса пользователя на разных платформах.

javax.swing.text.html.parser

Пакет содержит HTML анализатор ошибок толерантный , который используется для написания различных веб — браузеров и веб — ботов.

javax.xml.bind.annotation

Пакет содержит большое число типов аннотаций (30 всего) в JDK 6. Он определяет аннотации для настройки программных элементов Java для отображения XML — схема.

Переменные

В самоучителе языка программирования Java отдельное место занимают переменные. У всех переменных есть конкретный тип, он определяет требуемое место для хранения значений, диапазон возможных значений, список операций. Прежде чем манипулировать значениями, переменные объявляются.

Одновременно может быть объявлено несколько переменных. Для их перечисления используется запятая:

int a, b, c;

Инициализации осуществляется после или во время объявления:

int a = 10, b = 10;

Существует несколько типов:

  • local variables (локальные);
  • instance variables (переменные экземпляра);
  • static variables (статические).

Local variables объявляют в методах и конструкторах, они создаются во время запуска последних и уничтожаются после завершения. Для них запрещено указывать access modifiers и управлять уровнем доступности. Они не видимы за пределами объявленного блока. В Java переменные не имеют начального значения, поэтому оно в обязательном порядке присваивается перед первым использованием.

Instance variables должны быть объявлены внутри класса. Они используются как методы, но получить к ним доступ можно только после создания объекта. Переменная разрушается, когда уничтожается объект. У экземплярных переменных, в отличе от локальных, существуют значения по умолчанию:

  • числа — 0;
  • логика — false;
  • ссылки — null.

Static variables называются переменными класса. Их имена начинаются с символа в верхнем регистре, конкретизируются модификатором static. Они используются как константы, соответственно, к ним прибавляется один спецификатор из списка:

  • final;
  • private;
  • public.

Запускаются в начале программы, уничтожаются после остановки выполнения. Так же, как переменные экземпляра, имеют стандартные значения, которые присваиваются пустым переменным. У чисел — значение 0, булевые переменные имеют значение false, ссылки на объект изначально имеют null. Статические переменные вызываются в следующем виде:

ClassName.VariableName.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector