Метки: Java update scheduler что это, java 2, java язык программирования самоучитель для новичков.
Класс языка: |
объектно-ориентированный, структурный, императивный, кроссплатформенный |
---|---|
Появился в: |
1995 |
Автор(ы): |
Oracle Corporation (ранее Sun Microsystems) |
Релиз: |
Java SE 7 Update 7[1], Java SE 6 Update 35 (30 августа 2012) |
Типизация данных: |
строгая полиморфная, статическая, безопасная, именованная (англ.), явная (англ.) |
Основные реализации: | |
Диалекты: |
Generic Java (англ.), Pizza (англ.) |
Испытал влияние: |
Objective-C[2], Ада 83, Object Pascal[3], UCSD Pascal[4], Oberon[5][6],C++, C#[7], Smalltalk, Eiffel[8], Mesa (англ.)[9], Modula-3[10], Generic Java (англ.) |
Повлиял на: |
Ада 2005, C#, Clojure, D, ECMAScript, Groovy, J#, VJ#, JavaScript, PHP, Scala, Python, BeanShell |
Лицензия | |
Сайт: |
oracle.com/technetwork/java, java.com |
Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года.
В русском языке распространены два варианта написания: «Джава» и «Ява».[11] Правообладатели торговой марки Java считают, что правильное написание — транслитерация «Джава», и не признают слово «Ява», соответствующее традиционному произношению названия острова Ява. Компания Sun (ныне принадлежащая Oracle) придерживается англоязычного произношения во всех странах мира.[12]
Иногда в обиходе используют также жаргонное слово «Жаба» (например, изображение жабы есть на календариках группы российских пользователей Джавы (Java Users Group).[13]
Джавой называют не только сам язык, но и платформу для создания и исполнения приложений на основе данного языка.
Изначально язык назывался «Дубом» (Oak) и разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в «Джаву» и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе «Ява» (по имени одноименного острова, где производится этот сорт), поэтому на официальной эмблеме языка изображена чашка с дымящимся кофе. Существует и другая версия происхождения названия языка, связанная с аллюзией на кофе-машину, как пример бытового устройства, для программирования которого изначально язык создавался.
Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.
Достоинство подобного способа выполнения программ — в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.
Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. В последнее время был внесен ряд усовершенствований, которые несколько увеличили скорость выполнения программ на Java:
По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее.[14] С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и бо́льшее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++[15][16][17].
Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине.[18] Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft.
Разработка Java началась в 1990 году, первая официальная версия — Java 1.0, — была выпущена только в 1996 году.
К 1998 году была разработана обновлённая спецификация JDK 1.2, вышедшая под наименованием Java 2. Язык практически не изменился — было добавлено одно ключевое слово strictfp. Платформа получила следующие дополнения:
В данном случае встречается путаница. Выпускались книги, например, Beginning Java 2 by Ivor Horton (Mar 1999), фактически по JDK 1.2 (бывшее название — Java 2). Вместе с тем, по сей день такие книги публикуются, например: Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри. Технологии программирования на Java 2. Распределенные приложения (2011).
В то время, когда, как известно, Java 2 была исторически заменена следующими релизами, подобные названия книг дезориентируют в понимании, о какой же версии Java они написаны на самом деле. Если JDK 1.2 принято считать за Java 2, а авторы книг за Java 2 принимают JDK 7, это приводит к полной путанице.
Спецификация Java 5.0 была выпущена в сентябре 2004 года. C этой версии изменена официальная индексация, вместо Java 1.5 правильнее называть Java 5.0. Внутренняя же индексация Sun осталась прежней — 1.x. Минорные изменения теперь включаются без изменения индексации, для этого используется слово «Update» или буква «u», например Java Development Kit 5.0 Update 22. Предполагается, что в обновления могут входить как исправления ошибок так и небольшие добавления в API, JVM.
В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:
Релиз версии состоялся 11 декабря 2006 года. Изменена официальная индексация — вместо ожидаемой 6.0 версия значится как 6. Минорные изменения как и в Java 5.0 вносятся в обычные обновления версии, например Java SE Development Kit 6 Update 27. Внесены следующие изменения:
Релиз версии состоялся 28 июля 2011 года[20]. В финальную версию Java SE 7 не были включены все ранее запланированные изменения. Согласно плану развития (план «Б»)[21], включение нововведений будет разбито на две части: Java SE 7 (без лямбд, проекта Jigsaw, и части улучшений Coin) и Java SE 8 (все остальное), намеченный на конец 2012 года.
В новой версии, получившей название Java SE 7 (Java Platform, Standard Edition 7), помимо исправления большого количества ошибок были представлено несколько новшеств. Так, например, в качестве эталонной реализации Java SE 7 использован не проприетарный пакет JDK, а его открытая реализация OpenJDK, а сам релиз новой версии платформы готовился при тесном сотрудничестве инженеров Oracle с участниками мировой экосистемы Java, комитетом JCP (Java Community Process) и сообществом OpenJDK. Все поставляемые Oracle бинарные файлы эталонной реализации Java SE 7 собраны на основе кодовой базы OpenJDK, сама эталонная реализация полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с проприетарными продуктами. К другим нововведениям относится интеграция набора небольших языковых улучшений Java, развиваемых в рамках проекта Coin, добавлена поддержка языков программирования с динамической типизацией, таких как Ruby, Python и JavaScript, поддержка загрузки классов по URL, обновленный XML-стек, включающий JAXP 1.4, JAXB 2.2a и JAX-WS 2.2 и другие[22].
За 5 дней до выхода релиза Java SE 7 было обнаружено несколько серьёзных ошибок в горячей оптимизации циклов, которая включена по умолчанию и приводит виртуальную машину Java к краху. Специалисты Oracle найденные ошибки за столь короткий срок исправить не могли, но пообещали, что они будут исправлены во втором обновлении (Java 7 Update 2) и частично в первом[23].
Внутри Java существуют несколько основных семейств технологий:
Компанией Microsoft была разработана собственная реализация JVM (MSJVM[24]), включавшаяся в состав различных операционных систем, начиная с Windows 98 (также входила в Internet Explorer от версии 3 и выше, что позволяло использовать MSJVM в ОС Windows 95 и Windows NT 4 после установки IE3+ на данные ОС).
MSJVM имела cущественные отличия от Sun Java, во многом ломающие основополагающую концепцию переносимости программ между разными платформами:
Тесная интеграция Java с DCOM и Win32 ломала многоплатформенную суть языка. Впоследствии это явилось поводом для судебных исков со стороны Sun Microsystems к Microsoft. Суд принял сторону компании Sun Microsystems. В конечном счёте между двумя компаниями была достигнута договорённость о возможности продления срока официальной поддержки пользователей нестандартной Microsoft JVM до конца 2007 года, но не более.[24]
В 2005 году компанией Microsoft для платформы .NET был представлен Java-подобный язык J#, не соответствующий официальной спецификации языка Java и исключённый впоследствии из стандартного инструментария разработчика Microsoft Visual Studio, начиная с Visual Studio 2008[25].
Язык Java активно используется для создания мобильных приложений под операционную систему Android. При этом программы компилируются в нестандартный байт-код, для использования их виртуальной машиной Dalvik. Для такой компиляции используется дополнительный инструмент, а именно Software Development Kit, который предназначен для x86-машины под операционной системой Linux. Его разработали представители компании Google.
Разработку приложений можно вести в среде Eclipse, используя при этом плагин — Android Development Tools (ADT). Версия JDK при этом должна быть 5.0 или выше.
Следующие успешные проекты реализованы с привлечением Java (J2EE) технологий: RuneScape, Amazon[26][27], eBay[28][29], Yandex (неоднозначная информация в отношении Java)[30][31], LinkedIn[32], Yahoo![33].
Следующие компании в основном фокусируются на Java (J2EE) технологиях: SAP, IBM, Oracle. В частности, СУБД Oracle включает JVM как свою составную часть, обеспечивающую возможность непосредственного программирования СУБД на языке Java, включая, например, хранимые процедуры.[34]
Программы, написанные на Java, имеют репутацию более медленных и занимающих больше оперативной памяти, чем написанные на языке СиHotSpot. По состоянию на февраль 2012 года, код Java 7 приблизительно лишь в 1.8 раза медленнее кода, написанного на языке Cи[35].
. Тем не менее, скорость выполнения программ, написанных на языке Java, была существенно улучшена с выпуском в 1997—1998 годах так называемого JIT-компилятора в версии 1.1 в дополнение к другим особенностям языка для поддержки лучшего анализа кода (такие как внутренние классы, класс StringBuffer, упрощенные логические вычисления и т. д.). Кроме того была произведена оптимизация виртуальной машины Java — с 2000 года для этого используется виртуальная машинаНекоторые платформы предлагают аппаратную поддержку выполнения для Java
. К примеру, микроконтроллеры выполняющие код Java на аппаратном обеспечении вместо программной JVM, а также основанные на ARM процессоры, которые поддерживают выполнение байткода Java через опцию Jazelle.Идея пространств имён воплощена в Java-пакетах.
Программа, выводящая «Hello, world!»:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } }
Пример использования generics:
import java.util.*; public class Sample { public static void main(String[] args) { // Создание объекта по шаблону. List<String> strings = new LinkedList<String>(); strings.add("Hello"); strings.add("world"); strings.add("!"); for (String s : strings) { System.out.print(s); System.out.print(" "); } } }
Пример использования reflection:
import java.lang.reflect.Field; import java.lang.reflect.Method; class TestClass { private int value; public int getValue() { return value; } public void setValue(int valueIn) { this.value = valueIn; } } public class Main { public static void main(String[] args) { TestClass testClass = new TestClass(); for (Field field: testClass.getClass().getDeclaredFields()) { System.out.printf("name: %s, type: %s \n", field.getName(), field.getType().getCanonicalName()); } for (Method method : testClass.getClass().getDeclaredMethods()) { System.out.printf("name: %s, return type: %s \n", method.getName(), method.getReturnType().getCanonicalName()); } } }
Пример использования аннотаций:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Annotation { public boolean value() default false; } @Annotation(value=true) public class TestClass { } public class Main { public static void main(String[] args) { TestClass testClass = new TestClass(); Annotation annotation = testClass.getClass().getAnnotation(Annotation.class); if (annotation != null) { System.out.printf("value: %s \n", annotation.value()); } } }
В языке Java только 8 примитивных (скалярных, простых) Void можно узнать, является ли определённый метод типа void
: Hello.class.getMethod("main", Array.newInstance(String.class, 0).getClass()).getReturnType() == Void.TYPE
.
Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte, причем в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения , и «не число» (NaN). Для типа double они обозначаются Double.POSITIVE_INFINITY
, Double.NEGATIVE_INFINITY
, Double.NaN
; для типа float — так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже стандартизованы.
Тип | Длина (в байтах) | Диапазон или набор значений |
---|---|---|
boolean | 1 в массивах, 4 в переменных[36] | true, false |
byte | 1 | −128..127 |
char | 2 | 0..216−1, или 0..65535 |
short | 2 | −215..215−1, или −32768..32767 |
int | 4 | −231..231−1, или −2147483648..2147483647 |
long | 8 | −263..263−1, или примерно −9.2·1018..9.2·1018 |
float | 4 | -(2-2−23)·2127..(2-2−23)·2127, или примерно −3.4·1038..3.4·1038, а также , , NaN |
double | 8 | -(2-2−52)·21023..(2-2−52)·21023, или примерно −1.8·10308..1.8·10308, а также , , NaN |
Такая жёсткая стандартизация была необходима, чтобы сделать язык платформенно-независимым, что является одним из идеологических требований к Java. Тем не менее одна небольшая проблема с платформенной независимостью всё же осталась. Некоторые процессоры используют для промежуточного хранения результатов 10-байтовые регистры или другими способами улучшают точность вычислений. Для того, чтобы сделать Java максимально совместимой между разными системами, в ранних версиях любые способы повышения точности вычислений были запрещены. Однако это приводило к снижению быстродействия. Выяснилось, что ухудшение точности ради платформенной независимости мало кому нужно, тем более если за это приходится платить замедлением работы программ. После многочисленных протестов этот запрет отменили, но добавили ключевое слово strictfp
, запрещающее повышение точности.
В языке Java действуют следующие правила:
Данный способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в C++.[37]
В языке Java имеются только динамически создаваемые объекты. Причем переменные объектного типа и объекты в Java — совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных. Так, в Java нельзя писать:
double a[10][20]; Foo b(30);
а нужно:
double[][] a = new double[10][20]; Foo b = new Foo(30);
При присваиваниях, передаче в подпрограммы и сравнениях объектные переменные ведут себя как указатели, то есть присваиваются, копируются и сравниваются адреса объектов. А при доступе с помощью объектной переменной к полям данных или методам объекта не требуется никаких специальных операций разыменовывания — этот доступ осуществляется так, как если бы объектная переменная была самим объектом.
Объектными являются переменные любого типа, кроме примитивного. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование, в частности:
int
или любого другого примитивного типа в указатель или ссылку и наоборот.false
[38] (напр. a == b && foo() == bar()
не повлечёт вызовов foo()
и bar()
в случае, если a != b
, тогда как использование &
повлечёт в любом случае.Благодаря таким специально введенным ограничениям в Java невозможно прямое манипулирование памятью на уровне физических адресов (хотя ссылки, не указывающие ни на что, есть: значение такой ссылки обозначается null
).
Если нужен указатель на примитивный тип, используются классы-обёртки примитивных типов: Boolean
, Byte
, Character
, Short
, Integer
, Long
, Float
, Double
.
Из-за того, что объектные переменные являются ссылочными, при присваивании не происходит копирования объекта. Так, если написать
Foo foo, bar; … bar = foo;
то произойдет копирование адреса из переменной foo
в переменную bar
. То есть foo
и bar
будут указывать на одну и ту же область памяти, то есть на один и тот же объект; попытка изменить поля объекта, на который ссылается переменная foo
, будет менять объект, с которым связана переменная bar
, и наоборот. Если же необходимо получить именно ещё одну копию исходного объекта, пользуются или методом (функцией-членом, в терминологии C++) clone()
, создающим копию объекта, или (реже) копирующим конструктором (конструкторы в Java не могут быть виртуальными, поэтому экземпляр класса-потомка будет неправильно скопирован конструктором класса-предка; метод клонирования вызывает нужный конструктор и тем самым позволяет обойти это ограничение).
Метод clone()
требует, чтобы класс реализовывал интерфейс Cloneable
(об интерфейсах см. ниже). Если класс реализует интерфейс Cloneable
, по умолчанию clone()
копирует все поля (мелкая копия). Если требуется не копировать, а клонировать поля (а также их поля и так далее), надо переопределять метод clone()
. Определение и использование метода clone()
часто является нетривиальной задачей.[39]
В языке Java невозможно явное удаление объекта из памяти — вместо этого реализована сборка мусора. Традиционным приёмом, дающим сборщику мусора «намёк» на освобождение памяти, является присваивание переменной пустого значения null
. Это, однако, не значит, что объект, заменённый значением null
, будет непременно и немедленно удалён, но есть гарантия, что этот объект будет удалён именно в будущем. Данный приём всего лишь устраняет ссылку на объект, то есть отвязывает указатель от объекта в памяти. При этом следует учитывать, что объект не будет удален сборщиком мусора, пока на него указывает хотя бы одна ссылка из используемых переменных или объектов. Существуют также методы для инициации принудительной сборки мусора, но не гарантируется, что они будут вызваны исполняющей средой, и их не рекомендуется использовать для обычной работы.
Java не является процедурным языком: любая функция может существовать только внутри класса. Это подчёркивает терминология языка Java, где нет понятий «функция» или «функция-член» (англ. member function), а только метод. В методы превратились и стандартные функции. Например, в Java нет функции sin()
, а есть метод Math.sin()
класса Math
(содержащего, кроме sin()
, методы cos()
, exp()
, sqrt()
, abs()
и многие другие). Конструкторы в Java не считаются методами. Деструкторов в Java не существует, а метод finalize() ни в коем случае нельзя считать аналогом деструктора.
В Java (как и в C++) используются статические методы (англ. static method — в теории программирования их также называют методами класса), которые задаются при помощи ключевого слова static
. Статические поля (переменные класса) имеют тот же смысл, что и в C++: каждое такое поле является собственностью класса, поэтому для доступа к статическим полям не требуется создавать экземпляры соответствующего класса.
Например, математические функции, реализованные в классе Math
, представляют собой как раз статические методы данного класса. Поэтому можно писать
double x = Math.sin(1);
вместо
Math m = new Math(); double x = m.sin(1);
Поскольку статические методы существуют независимо от объектов (экземпляров класса), они не имеют доступа к обычным (нестатическим) полям и методам данного класса. В частности, при реализации статического метода недопустимо использовать идентификатор this
.
Ключевое слово final
(финальный) означает разные вещи при описании переменной, метода или класса. Финальное поле класса инициализируется при описании, или в конструкторе класса (а статичное поле — в статичном блоке инициализации) и дальше его значение не может быть изменено. Значения локальных переменных, а также параметров метода, помеченных ключевым словом final, не могут быть изменены после присвоения. Но при этом, их значения могут использоваться внутри анонимных классов. Если статичное поле класса, или переменная проинициализированны константным выражением, они рассматриваются компилятором, как именованная константа; в таком случае их значение может быть использовано в операторах switch (для констант типа int), а также для условной компиляции (для констант типа boolean) при использовании с оператором if.
Метод класса, отмеченный словом final, не может быть переопределён при наследовании. Финальный класс не может иметь наследников вообще.
В Java методы, не объявленные явно как static
, final
или private
, являются виртуальными в терминологии C++: при вызове метода, по-разному определённого в базовом и наследующем классах, всегда производится проверка времени выполнения.
Абстрактным методом (модификатор abstract
) в Java называется метод, для которого заданы параметры и тип возвращаемого значения, но не тело. Абстрактный метод определяется в классах-наследниках. В C++ то же самое называется чисто виртуальной функцией. Для того чтобы в классе можно было описывать абстрактные методы, сам класс тоже должен быть описан как абстрактный. Объекты абстрактного класса создавать нельзя.
Высшей степенью абстрактности в Java является интерфейс (interface
). Все методы интерфейса абстрактны: описатель abstract
даже не требуется. Интерфейс в Java не считается классом, хотя по сути является полностью абстрактным классом. Класс может наследовать/расширять (extends
) другой класс или реализовывать (implements
) интерфейс. Кроме того, интерфейс может наследовать/расширять другой интерфейс.
В Java класс не может наследовать более одного класса, зато может реализовывать сколько угодно интерфейсов. Множественное наследование интерфейсов не запрещено, то есть один интерфейс может наследоваться от нескольких.
Интерфейсы можно передавать методам как параметры, но нельзя создавать экземпляры интерфейсов.
В Java есть некоторые интерфейсы, которые не содержат методов для реализации, а специальным образом обрабатываются JVM. Это интерфейсы:
java.lang.Cloneable
java.io.Serializable
java.rmi.Remote
Начиная с версии Java 5 в языке появился механизм обобщённого программирования — шаблоны, внешне близкие к шаблонам C++. С помощью специального синтаксиса в описании классов и методов можно указать параметры-типы, которые внутри описания могут использоваться в качестве типов полей, параметров и возвращаемых значений методов.
// Объявление обобщённого класса class GenericClass<E> { E getFirst() { ... } void add(E obj) { ... } } // Использование обобщённого класса в коде GenericClass<String> var = new GenericClass<String>(); var.add("qwerty"); String p = var.getFirst();
Допускается обобщённое объявление классов, интерфейсов и методов. Кроме того, синтаксис поддерживает ограниченные объявления типов-параметров: указание в объявлении конструкции вида <T extends A & B & C...>
требует, чтобы тип-параметр T реализовывал интерфейсы A, B, C и так далее, а конструкция <T super C>
требует, чтобы тип-параметр T был типом C или одним из его предков.
В отличие от шаблонов C#, шаблоны Java не поддерживаются средой исполнения — компилятор просто создаёт байт-код, в котором никаких шаблонов уже нет. Реализация шаблонов в Java принципиально отличается от реализации аналогичных механизмов в C++: компилятор не порождает для каждого случая использования шаблона отдельный вариант класса или метода-шаблона, а просто создаёт одну реализацию байт-кода, содержащую необходимые проверки и преобразования типов. Это приводит к ряду ограничений использования шаблонов в программах на Java.
В Java можно явно проверить, к какому классу принадлежит объект. Выражение foo instanceof Foo
истинно, если объект foo
принадлежит классу Foo
или его наследнику, или реализует интерфейс Foo
(или, в общем виде, наследует класс, который реализует интерфейс, который наследует Foo
).
Далее, функция getClass()
, определённая для всех объектов, выдаёт объект типа Class
. Для каждого класса создаётся не более одного описывающего его объекта типа Class
, поэтому эти объекты можно сравнивать. Так, например, foo.getClass() == bar.getClass()
будет истинно, если объекты foo
и bar
принадлежат в точности к одному классу (но это не означает что это два одинаковых объекта).
Кроме того, объект типа Class
любого типа можно получить так: Integer.class
, Object.class
.
Однако прямое сравнение классов не всегда является оптимальным средством проверки на принадлежность к классу. Зачастую вместо него используют функцию isAssignableFrom()
. Эта функция определена у объекта типа Class
и принимает объект типа Class
в качестве параметра. Таким образом, вызов Foo.class.isAssignableFrom(Bar.class)
вернёт true
в случае, если Foo
является предком класса Bar
. Так как все объекты являются потомками типа Object
, вызов Object.class.isAssignableFrom()
всегда вернёт true
.
В паре с упомянутыми функциями объекта типа Class
используются также функции isInstance()
(эквивалентно instanceof
), а также cast()
(преобразует параметр в объект выбранного класса).
Java | ||
---|---|---|
Платформы | ||
Технологии Sun |
Java • Java Development Kit • OpenJDK • WTK • Java Virtual Machine • JavaFX • JAXP • Squawk |
|
Основные сторонние технологии |
GNU Classpath • GNU компилятор для Java • Kaffe • TopLink • Apache Harmony • Apache Struts • Spring Framework • Dalvik • Hibernate • JBoss • Processing • Dozer • AspectJ |
|
История | ||
Свойства языка |
Байткод • Синтаксис • Апплеты • Сервлеты • Мидлеты • JavaServer Pages • Web Start • Enterprise JavaBeans |
|
Скриптовые языки |
Java Tcl • Jython • JRuby • BeanShell • Groovy • Judoscript • Sleep • Bean Scripting Framework • Yoix • Rhino |
|
Конференции Java |
Основные языки программирования (сравнение • IDE • история • хронология) | |
---|---|
Используемые в разработке |
Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET) |
Академические | |
IEC 61131-3 |
Instruction List • ST • FBD • Ladder Diagram (LD) • SFC |
Прочие | |
Эзотерические | |
Визуальные |
Tags: Java update scheduler что это, java 2, java язык программирования самоучитель для новичков.