Язык и технология Java. Язык и технология Java Термин Java Термин Java
Скачать 401.79 Kb.
|
Язык и технология Java Термин Java Термин Java может означать: Язык программирования. Технологию. Команду запуска интерпретатора (JVM). Языки В рамках технологии Java можно использовать следующие языки: Java Clojure — функциональный язык, диалект Lisp; Groovy — сценарный язык; Kotlin — объектно-ориентированный язык для индустриальной разработки Scala — объектно-ориентированный и функциональный язык; Ceylon — объектно-ориентированный язык со строгой статической типизацией; JRuby — реализация Ruby; Jython — реализация Python; Nashorn — реализация JavaScript. История Язык Java разрабатывался в 1991-1995 в компании Sun Изначально язык разрабатывался как замена С++ Главная причина недовольства С++ Необходимо перекомпилировать, а зачастую и переписывать код под каждую новую архитектуру микропроцеcсора, операционную систему Сборка и выполнение программы на С++ Сборка и выполнение программ на JAVA Сборка и выполнение JAVA История выпусков Java 1 - 1996. Начальный релиз. Java 2 - 1998. Swing, коллекции, Java2D. Java 3 - 2000. JavaSound, JNDI Java 4 - 2002. Регулярные выражения, xml, работа с изображениями. Java 5 - 2004. Enum, аннотации, generics. Java 6 - 2006. Улучшение производительности Java 7 - 2011. Новая JVM, JavaFX. Java 8 - 2014. Lambda-выражения и др. поддержка ФП. История_выпусков Java 9 - сен 2017. Модульная система, jshell, List.of,Map.of, Set.of. Java 10 - мар 2018. Вывод типов локальных переменных (var a). Java 11 - сен 2018. Вывод типов в lambda, пропуск компиляции однофайлового приложения. Java 12 - мар 2019. Новая форма switch. Java 13 - сен 2019. Текстовые блоки. Java 14 - coming soon. Особенности лицензирования Компания Oracle собирает и публикует две версии JDK: Oracle JDK (aka Java SE, расположена на Open JDK (расположена на OpenJDK — это эталонная реализация JDK, Oracle JDK базируется на OpenJDK. Раньше были различия между OpenJDK и Oracle JDK, теперь их нет. OpenJDK полностью бесплатная и распространяется под GPL. Oracle JDK раньше была бесплатной, теперь платная. Oracle JDK отличается от OpenJDK только наличием платной поддержки. Программное обеспечение Среды разработки (IDE): Netbeans Eclipse Intellij Idea JDK Intellij Idea Scene Builder Maven (Gradle) Особенности Ключевые особенности языка Java архитектурная независимость и переносимость кода полная объектная ориентированность устойчивость (надежность) кода безопасность Java-программ механизм поддержки многопоточности возможность создания приложений и апплетов Важность классов Основная структурная единица программы – класс, весь код Java-программы должен находиться внутри одного или нескольких классов. Надежность кода отсутствие множественного наследования запрет перегрузки операторов отсутствие адресной арифметики строгая типизация технология «сборки мусора» (garbage collection) встроенная обработка исключений Особенности Поддержка многопоточности. Имеется встроенная поддержка параллельно выполняющихся потоков (класс Thread) Безопасность. Код выполняется внутри изолированного виртуального компьютера. Встроенные коллекции. Удобны для работы со сложно организованными данными. Удобство разработки GUI. Библиотеки оконного интерфейса входят в состав стандартного набора. Web. Программы Java можно встраивать в веб-страницы. Окружения есть два основных окружения: JRE – Java Runtime Environment. Для выполнения готовых Java приложений JDK (JSDK, SDK) - Java (Software) Development Kit. Для разработки Java приложений. Уже включает в себя JRE Классы и программа Текст всей программы состоит из описания классов. В отличие от С++ глобального кода не существует. Описания классов группируются в пакеты. Все поля и методы класса могут быть статическими - элемент принадлежит классу; обычными - элемент принадлежит объекту; Для работы со статическими членами не требуется выделять память под объект (пример: Hello world). Пример программы Программа печати приветствия (“Hello World!”) public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } Построение и запуск программы Текст программы помещается в файл HelloWorld.java. Компиляция из командной строки осуществляется командой: javac HelloWorld.java В результате компиляции появляется файл с байт-кодом HelloWorld.class. Запуск программы на выполнение: java HelloWorld (без расширения!) Ключевые слова В языке Java 50 ключевых слов, которых нужно избегать при выборе имен для идентификаторов и объектов: abstract continue for new switch assert default goto* package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const* float native super while Зарезервированные литералы: true,false,null const,goto зарезервированы, но не используются. Данные Рассмотрим встроенные типы языка Java, которые используются при объявлении переменных: int a, b, c; a = 1234; b = 99; Отличия от С++ В языке Java нет беззнаковых типов данных Встроенные типы Целочисленные типы
Вещественные типы
Символьный тип
Логический тип boolean Принимает два значения: true и false. Логические операции: Строки Строковый тип String является ссылочным типом, но работает как простой: String name="Ann"; System.out.println(name); Строки String являются константами! String name="Vasya"; String name1=name; // ссылка String name2=new String(name); // копия Операции равенства строк: // сравниваем ссылки name==name1 // true name1==name2 // false // сравниваемсодержимое name1.equals(name2) // true Константы Типы констант целочисленные: 1 2 3 3453 -123 0x55 123L с плавающей точкой: 3.14159 314159E-5 .45f булевские: true false символьные: ‘a’ строковые: “hello” Целочисленные константы Целочисленные константы можно задавать в разных системах счисления int num111 = 0x6F; // 16-тиричная система, число 111 int num8 = 010; // 8-ричная система, число 8 int num13 = 0b1101; // 2-ичная система, число 13 Ключевое слово final Ключевое слово final применяется для фиксации значения переменной final int N=1024; // аналог именнованной константы ... N++; // ошибка! Работа с двоичным представлением public class BinIntMul { static int mul(int x,int y) { return x*y; } public static void main(String[] args) { int num1=0b100; int num2=0b101; System.out.println(Integer.toString(mul(num1,num2),2)); System.out.println(Integer.toBinaryString(mul(num1,num2))); } } Преобразования типов Преобразование типов Сужение: int i=260; byte b=(byte)i; Усечение: double i=260.34; int b=(int)i; Сужение+усечение: double i=260.435; byte b=(byte)i; Массивы Одномерные массивы: int arr1[ ]=new int[3]; int arr2[ ]={1,2,3}; int [ ] arr3=new int[3]; Многомерные и ступенчатые массивы: int massiv[ ][ ] = new int[3][ ]; massiv[1] = new int[1]; massiv[2] = new int[2]; massiv[3] = new int[3]; Стили обявления: int nums[]; char[] stroka; Работа с массивами: int[] nums = new int[4]; nums[0] = 1; nums[1] = 2; nums[2] = 4; nums[3] = 100; Альтернативная инициализация: int[] nums1 = new int[] { 0, 1, 2, 3, 4, 5 }; int[][] nums2 = { { 0, 1, 2 }, { 3, 4, 5 } }; У каждого массива есть поле для хранения количества элементов: import java.util.Random; public class Arr { static int[] arr; static Random rand=new Random(); public static void main(String[] args) { arr=new int[Integer.parseInt(args[0])]; int sum=0; for(int i=0;i<arr.length;i++) { arr[i]=rand.nextInt()%100; sum+=arr[i]; } System.out.println("len="+arr.length+" sum="+sum); } } Ссылки и копии для массивов Пример с ссылкой на массив: int[] numbers = new int[] { 1, 2, 3, 5 }; int[] figures = numbers; figures[2]=30; System.out.println(numbers[2]); // равно 30 А вот пример с копированием: import java.util.Arrays; public class Program { public static void main(String[] args) { int[] numbers = new int[] { 1, 2, 3, 5 }; int[] figures = Arrays.copyOf(numbers, numbers.length); figures[2]=30; System.out.println(numbers[2]); // равно 3 } } Сортировка Пример с сортировкой: // элементы массива в произвольном порядке int[] numbers = new int[] { 1, 7, 3, 5, 2, 6, 4 }; Arrays.sort(numbers); // в цикле выводим все элементы массива по порядку for(int i=0;i<numbers.length;i++) System.out.println(numbers[i]); Операторы и операции Операторы ветвления и цикла совпадают с аналогичными в С/С++: if..else.. switch for while do..while Можно использовать break,continue,return Оператора goto нет! Отличия от С++ Проверяемые выражения в заголовках операторов должны иметь логический тип (а не целый) Операция ++ может применяться к вещественным типам public class PlusPlus { public static void main(String[] args) { for(float x=0.0f;x<=20.0f;x++) System.out.println("x="+x+" y="+x*x); } } Функции Функции в java могут быть только методами классов. Могут быть статическими или нестатическими. Внутри класса методы могут описываться в любой последовательности. class FirstProg { public static void main(String args[ ]) { say ("Hello, world"); int res = calc ( 3, 5 ); say( "Result is: " + res); } public static void say (String str){ System.out.println (str); } public static int calc (int a, int b){ int result = a+b; return result; } } По значению – копируется значение аргумента в формальный параметр функции, сама переменная в вызывающем коде не меняется. Все простые типы. По ссылке - передается ссылка на ячейку памяти, функция работает с тем же самым объектом, может его изменять. Все ссылочные типы. Пример с вычислением последовательности Коллатца: public class Collatz { public static void collatz(int n) { System.out.print(n + " "); if (n == 1) return; else if (n % 2 == 0) collatz(n / 2); else collatz(3*n + 1); } public static void main(String[] args) { int N = Integer.parseInt(args[0]); collatz(N); System.out.println(); } } Преобразование в двоичную систему: public class IntegerToBinary { public static void convert(int n) { if (n == 0) return; convert(n / 2); System.out.print(n % 2); } public static void main(String[] args) { int N = Integer.parseInt(args[0]); convert(N); System.out.println(); } } Приложение Имя файла исходного кода обязательно должно совпадать с именем класса, чей метод main() вызывается при запуске Java машины. Object - класс от которого наследуются все объекты в Java, включая массивы и строки (см. таблицу). Спецификаторы доступа индивидуальны для каждого члена (указываются перед объявлением). Все члены класса по умолчанию открыты для области видимости пакета. Область видимости “по умолчанию” - это нечто среднее между private и protected. Каждый java файл может содержать только один класс объявленный как public и доступный извне. Определение и объявление класса всегда находится в одном файле, невозможно вынести прототипы в заголовки. Отсутствуют указатели. Все переменные классов - на самом деле ссылки на объекты а не сами объекты. Инициализация их для использования обязательно должна выполняться через new <конструктор-класса>(...). Исходя из предыдущего пункта - при присвоении одной переменной-объекта другой выполняется только изменение ссылки но не копирование объекта. Переменные в функции передаются по значению если это элементарные типы (int, byte, long, etc...), или по ссылке, если это объекты. Доступ к публичным статическим членам класса осуществляется через оператор точки ., а не через ::. Отсутствует деструктор, но есть finalize(). Не стоит путать finalize() и деструктор С++. finalize() вызывается только при сборке мусора, которая никак не связана с выходом объекта из области видимости и отсутствием хотя бы одной ссылки на данный объект. Сборку мусора можно форсировать вызвав метод Runtime.gc() на текущем объекте Runtime или статический метод System.gc(). Освобождение памяти работает только в пределах виртуальной машины Java и однажды выделенную память в ОС не возвращает пока не завершится машина. В Java-стиле написания кода функции генерируют исключения, вместо возврата кода системной ошибки или ошибки логики виртуальной машины. Потому множество функций обязательно должно выполняться внутри блока try { ... ** catch (...) { ... обрабатывающего исключения, либо метод вызывающий их должен явно указывать через **throws список не обрабатываемых им исключений генерируемых этими функциями, для обработки их методами “выше” по стеку вызовов. |