Главная страница

Язык и технология Java. Язык и технология Java Термин Java Термин Java


Скачать 401.79 Kb.
НазваниеЯзык и технология Java Термин Java Термин Java
Дата06.09.2022
Размер401.79 Kb.
Формат файлаdocx
Имя файлаЯзык и технология Java.docx
ТипДокументы
#664507

Язык и технология Java

Термин Java

Термин Java может означать:

  1. Язык программирования.

  2. Технологию.

  3. Команду запуска интерпретатора (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:

  1. Oracle JDK (aka Java SE, расположена на )

  2. Open JDK (расположена на ).

  • OpenJDK — это эталонная реализация JDK, Oracle JDK базируется на OpenJDK.

  • Раньше были различия между OpenJDK и Oracle JDK, теперь их нет.

  • OpenJDK полностью бесплатная и распространяется под GPL.

  • Oracle JDK раньше была бесплатной, теперь платная.

  • Oracle JDK отличается от OpenJDK только наличием платной поддержки.

Программное обеспечение

Среды разработки (IDE):

  1. Netbeans

  2. Eclipse

  3. 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

Классы и программа

Текст всей программы состоит из описания классов.

В отличие от С++ глобального кода не существует.

Описания классов группируются в пакеты. Все поля и методы класса могут быть

  1. статическими - элемент принадлежит классу;

  2. обычными - элемент принадлежит объекту;

Для работы со статическими членами не требуется выделять память под объект

(пример: 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 нет беззнаковых типов данных

Встроенные типы

Целочисленные типы

Имя типа

Ширина

Диапазон

byte

8

-128 … 127

short

16

-32 768 … 32 767

int

32

-2 147 483 648 … 2 147 483 647

long

64

-9 223 372 036 854 775 808 … 9 223 372 036 854 775 807

Вещественные типы

Имя типа

Ширина

Диапазон

float

32

3.4е-038 … 3.4е+038

double

64

1.7е-308 … 1.7е+308

Символьный тип

Имя типа

Ширина

Диапазон

char

16

0 … 65535

Логический тип

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 список не обрабатываемых им исключений генерируемых этими функциями, для обработки их методами “выше” по стеку вызовов.


написать администратору сайта