Объектно-ориентированный язык программирования JAVA

     СОДЕРЖАНИЕ

Документация по языку Java

САЙТЫ с материалами по языку Java

Общие сведения о языке Java

ОСНОВНЫЕ ОСОБЕННОСТИ ЯЗЫКА

ПРИМЕР создания байт-кода и запуска из командной строки выполнения программы

ПРИМЕР создания и выполнения апплета

Методы init, start, stop и destroy класса Applet

Класссы

Конструкторы

Модификатор static

Регулярные выражения

Документация по языку Java

1.The Java™ Language Specification Java SE 7 Edition В формате HTML
2.The Java™ Language Specification Java SE 7 Edition В формате PDF
3.Java™ Platform, Standard Edition 6 API Specification

САЙТЫ с материалами по языку Java

1.Программирование - это просто
В левой части окна главной страницы сайта выполнить пункт меню Уроки программирования
и в появившемся окне выполнить пункт Java для чайников.
В учебнике Java для чайников даются хорошие примеры апплетов.

2. http://frolov-lib.ru/programming/javasamples/index.html - Библиотека примеров приложений Java

3. http://www.javaprogr.com/graficheskiy-rezhim-risovanie-geometricheskih-obektov/ библиотека графического интерфейса (Widget toolkit) языка Java.

4. Картузов А.В. Программирование на языке JAVA

5. http://www.linkex.ru/ - «Сайт для вебмастеров». Учебник по JAVA

6. Учебник Добро пожаловать в мир Java! размещён на двух сайтах
Певый сайт - http://wm-help.net/books-online/book/12462.html
Второй сайт - http://ozlobin.narod.ru/uch/java/prjava/index.html
В главе 6. КОМПОНЕНТЫ рассказывается о создании экраных форм

7. http://litvinuke.hut.ru/articles/Java06.htm - Учим Java. Апплеты. Взаимодействие с CGI.

8 http://www.intuit.ru/department/pl/ - Язык программирования Java и среда NetBeans. Автор: В.В. Монахов

9. http://netbeans.org/kb/docs/java/quickstart_ru.html - Руководство по началу работы с Java в среде IDE NetBeans

10. http://netbeans.org/kb/docs/web/applets_ru.html - Создание и импорт апплета в среде IDE NetBeans

11. http://dobrochan.ru/src/pdf/1007/Java_Courses(Russian).pdf - Программирование на Java

Общие сведения о языке Java

Java — объектно-ориентированный язык программирования, разработанный компанией
Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения
Java обычно компилируются в специальный байт-код, поэтому они могут работать на
любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры.
Дата официального выпуска — 23 мая 1995 года.

Java Development Kit (сокращенно JDK) — бесплатно распространяемый компанией
Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на
языке Java, включающий в себя компилятор Java (javac), стандартные библиотеки классов
Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE).
В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик,
использующий только JDK, вынужден использовать внешний текстовый редактор и
компилировать свои программы, используя утилиты командной строки.

Java Runtime Environment (JRE) - виртуальная машина Java, позволяет запускать
приложения написанные на широко распространенном языке программирвоания Java,
без компилятора и других средств разработки.

Разработка Java началась в 1990 году, первая официальная версия Java 1.0 была
выпущена только в 1996 году.

К 1998 году была разработана обновлённая спецификация JDK 1.2, вышедшая под наименованием
Java 2. Язык практически не изменился — было добавлено одно ключевое слово strictfp.

Java 5.0
Спецификация Java 5.0 была выпущена в сентябре 2004 года. C этой версии изменена
официальная индексация, вместо Java 1.5 правильнее называть Java 5.0.
Внутренняя же индексация Sun осталась прежней — 1.x.

Версии Java

1 JDK 1.0 (23 января 1996)
2 JDK 1.1 (19 февраля 1997)
3 J2SE 1.2 (8 декабря 1998)
4 J2SE 1.3 (8 мая 2000)
5 J2SE 1.4 (6 февраля 2002)
6 J2SE 5.0 (30 сентября 2004)
7 Java SE 6 (11 декабря 2006)
8 Java SE 7.0 (7 июля 2011)
8.1 Java SE 7 Update 1
8.2 Java SE 7 Update 2
8.3 Java SE 7 Update 3
9 Java SE 8.0
J2SE - Java 2 Platform Standard Edition — Стандартная версия платформы Java 2

Апплеты
Java-апплет — прикладная программа, чаще всего написанная на языке программирования
Java в форме байт-кода. Java-апплеты выполняются в веб-браузере с использованием
виртуальной Java машины (JVM), или в Sun's AppletViewer, автономном инструменте для
тестирования апплетов. Java-апплеты были внедрены в первой версии языка Java в 1995 году.
Java-апплеты обычно пишутся на языке программирования Java, но могут быть написаны и на
других языках, которые компилируются в байт-код Java, таких, как Jython.

Сервлеты
Сервлет является Java-интерфейсом, реализация которого расширяет функциональные
возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ.
Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения
веб-серверов. Для таких приложений технология Java Servlet определяет HTTP-специфичные
сервлет классы. Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и
классы для создания сервлетов.

ОСНОВНЫЕ ОСОБЕННОСТИ ЯЗЫКА

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java 
(JVM) — программой, обрабатывающей байтовый код и передающей инструкции 
оборудованию как интерпретатор.
Достоинство подобного способа выполнения программ — в полной независимости 
байт-кода от операционной системы и оборудования, что позволяет выполнять 
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.
 К примеру, микроконтроллеры выполняющие код Java на аппаратном обеспечении вместо 
программной JVM, а также основанные на ARM процессоры, которые поддерживают 
выполнение байткода Java через опцию Jazelle.

ПРИМЕР создания байт-кода и запуска из командной строки выполнения программы

Текст программы
public class HelloWorld 
{ public static void main(String[] args) 
  {  System.out.println("Hello World!");
  }
}
Модификатор public указываем, что мы можем объявлять ссылки на этот класс в любом коде.
Если же модификатор public не задан, то использовать класс мы можем исключительно внутри пакета.
Модификаторы доступа:
      private – метод или поле класса, помеченные этим модификатором, доступны только в пределах данного класса;
     package – поле/метод доступно в пределах всего пакета; это значение по умолчанию для всех полей или методов объявленных без модификаторов доступа;
      protected – здесь доступ разграничивается для всех “родных” (т.е. производных или родительских) классов данного класса;
      public – доступ открыт отовсюду и для всех;

Java package (пакет Java) — механизм, позволяющий организовать Java классы в
пространства имен аналогично модулям в языке программирования Модула.
Java пакеты могут содержаться в сжатом виде в JAR файлах. Обычно в пакеты
объединяют классы одной и той же категории, либо предоставляющие сходную
функциональность.
Каждый пакет предоставляет уникальное пространство имен для своего содержимого.
Допустимы вложенные пакеты.
Классы, определенные без явно заданных модификаторов доступа (public, protected,
private), видимы только внутри пакета.
Каждый Java-объект существует в пакете.Если вы не укажете явно, к какому из них он
принадлежит, Java поместит его в пакет по умолчанию.

Модификатор static показывает, что метод статический. То есть, он работает даже тогда,
когда экземпляр класса (объект) не создан. 1. Если исходный текс в файле C:\javaPrim\HelloWorld.java,то выполнить команду
C:\>cd javaPrim

2.Создание байт-кода
В командном окне выполнить следующие команды

а)если не прописан путь к компилятору в байт-код, то 
C:\javaPrim>path c:\Program Files\Java\jdk1.7.0_06\bin
b)Создать байт-код (скомпилировать):
C:\javaPrim>javac.exe HelloWorld.java
Или указать полный путь к компилятору:
C:\javaPrim>"C:\Program Files\Java\jdk1.7.0_06\bin\javac.exe" HelloWorl.java
Так как Program Files содержит пробел, то всю спецификацию файла javac.exe
нужно заключить в кавычки
3. Выполнить
C:\javaPrim>java.exe HelloWorld
Напечатается 
Hello World!

ПРИМЕР создания и выполнения апплета

Апплет встроен в HTML-страницу HelloJava.html на сайте hello (в каталоге ../hello/www).
Текст страницы
<HTML><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Апплет HelloWorld</title></head>
<BODY vLink=#000066 bgColor=#fafcfe leftMargin=0 topMargin=0>
<H2 style="color:770055;font-size:20pt;font-family:'times new roman';text-align:center">
Пример использования Java</h2>
<APPLET CODE="HelloWorldApp.class" WIDTH="200" HEIGHT="140" ALIGN="left" ALT="Апплет">
Если вы видите этот текст, значит ваш браузер не поддерживает Java.</APPLET>
</body></html>
Текст программы
import java.applet.Applet;
import java.awt.*;

// Applet code for the "Hello, world!" example.
// This should be saved in a file named as "HelloWorld.java".
public class HelloWorldApp extends Applet
{ // This method is mandatory, but can be empty (i.e., have no actual code).
  public void init() { }

  // This method is mandatory, but can be empty (i.e., have no actual code).
  public void stop() { }

  // Print a message on the screen (x=20, y=10).
  public void paint(Graphics g) 
  {  g.drawString("Hello, world!", 20,10);
  // Draws a circle on the screen (x=40, y=30).
    g.drawArc(40,30,20,20,0,360);
  }
}
Последовательность создания и просмотра сайта с апплетом
1. Если исходный текс находится в файле C:\javaPrim\HelloWorldApp.java,
то выполнить команду 
C:\cd javaPrim
2.Создание байт-кода
В командном окне выполнить следующие команды

а)если не прописан путь к компилятору в байт-код, то 
C:\javaPrim>path c:\Program Files\Java\jdk1.7.0_06\bin
b)Создать байт-код (скомпилировать):
C:\javaPrim>javac.exe HelloWorldApp.java
или
C:\javaPrim>"C:\Program Files\Java\jdk1.7.0_06\bin\javac.exe" HelloWorldApp.java
Получившийся в результате компиляции байт-код находится в файле HelloWorldApp.class в каталоге C:\javaPrim\ 

3. Скопировать файл HelloWorldApp.class в каталог сайта (../hello/www).

4. Запустить сайт в браузере: HTTP://helo/HelloJava.html
В окне браузера появится текст

Пример использования Java 
Hello World!

 и gпод текстом нарисована полуокружность

Методы init, start, stop и destroy класса Applet

При создании апплета переопределяются некоторые методы базового
класса Applet.

Метод init
Метод init определен в базовом классе Applet, от которого наследуются все аплеты.
Определение его таково, что этот метод ровным счетом ничего не делает.

Когда вызывается метод init и зачем он нужен?
Метод init вызывается тогда, когда браузер загружает в свое окно документ HTML с
оператором <APPLET>, ссылающимся на данный апплет. В этот момент аплет может
выполнять инициализацию, или, например, создавать потоки, если он работает в
многопоточном режиме.
Существует контрпара для метода init - метод destroy. О нем мы расскажем ниже.

Метод destroy
Перед удалением аплета из памяти вызывается метод destroy, который определен в
базовом классе Applet как пустая заглушка. Мастер проектов добавляет в исходный
текст класса переопределение метода destroy, которое вы можете при необходимости
изменить.
Методу destroy обычно поручают все необходимые операции, которые следует
выполнить перед удалением аплета. Например, если в методе init вы создавали
какие-либо потоки, в методе destroy их нужно завершить.

Метод start.
Метод start вызывается после метода init в момент, когда пользователь начинает
просматривать документ HTML с встроенным в него аплетом.
Вы можете модифицировать текст этого метода, если при каждом посещении пользователем
страницы с аплетом необходимо выполнять какую-либо инициализацию.

Метод stop
Дополнением к методу start служит метод stop. Он получает управление,
когда пользователь покидает страницу с аплетом и загружает в окно браузера
другую страницу. Заметим, что метод stop вызывается перед методом destroy.

К Л А С С Ы

Для того,чтобы создать класс, достаточно иметь исходный файл, в котором будет
присутствовать ключевое слово class, и вслед за ним — допустимый идентификатор
и пара фигурных скобок для его тела.
class Point {
}
Имя исходного файла Java должно соответствовать имени хранящегося в нем
класса. Регистр букв важен и в имени класса, и в имени файла.
Общая форма определения класса.
class имя_класса extends имя_суперкласса 
{ type
	переменная1_объекта:
	type переменная2_объекта:
	type переменнаяN_объекта:
	type имяметода1(список_параметров) 
	{ тело метода;
	}
	type имяметода2(список_параметров)
	{		тело метода;
	}
	type имя методаМ(список_параметров)
	{	тело метода;
	}
}
Ключевое слово extends указывает на то,что «имя_класса» — это подкласс класса
«имя_суперкласса».
Данные инкапсулируются в класс путем объявления переменных между открывающей и
закрывающей фигурными скобками, выделяющими в определении класса его тело:
class Point { int х, у;}
Оператор new
Оператор new создает экземпляр указанного класса и возвращает ссылку на
вновь созданный объект.
Point р = new Point();
Метод Main
Обычно программа состоит из нескольких классов. Один из классов программы
должен содержать метод main.
Рассмотрим программу, состоящую из двух классов: описанного выше класса Point
и класса TwoPoints, содержащего метод main. Метод main указывает точку начала выполнения программы.
class TwoPoints 
{  public static void main(String args[]) 
   { Point p1 = new Point();
     Point p2 = new Point();
     p1.x = 10;
     p1.y = 20;
     р2.х = 42;
     р2.у = 99;
     System.out.println("x = " + p1.x + " у = " + p1.y);
     System.out.println("x = " + р2.х + " у = " + р2.у);
   }
}
Ниже приведен результат, полученный при выполнении этой программы.
С:\> Java TwoPoints
х = 10 у = 20
х = 42 у = 99
Если в класс Point добавить метод main, то получится законченная программа,
включающая в себя один пользовательский класс:
class Point 
{ int х, у;
  public static void main(String args[])
  { Point p = new Point();
    р.х = 10;
    p.у = 20;
    System.out.println("x = " + р.х +" у = " + p.y);
  }
}
Объявление методов
Методы — это подпрограммы, присоединенные к конкретным определениям классов.
Они описываются внутри определения класса на том же уровне, что и переменные
объектов. При объявлении метода задаются тип возвращаемого им результата
и список параметров. Общая форма объявления метода такова:
тип имя_метода (список формальных параметров) 
{ тело метода;
}
Пример объявления методов Ниже приведена программа, состоящая из двух классов. Класс Point содержит метод
class Point 
{ int х, у;
  void init(int х, int у) 
  {  this.x = х;
    // this служит ссылкой на объект, для которого был вызван метод
     this.у = у 
  } 
}
class TwoPointsInit 
{ public static void main(String 	args[])
  {  Point p1 = new Point();
     Point p2 = new Point();
     p1.init(10,20);
     p2.init(42,99);
     System.out.println("x = " + p1.x + " у = " + pl.y);
     System.out.printlnC'x = " + p2.x + " у = " + p2.y);
   } 
}

КОНСТРУКТОРЫ

В объектно-ориентированном программировании конструктор класса (от англ.
constructor, иногда сокращают ctor) — специальный блок инструкций,
вызываемый при создании объекта. Конструктор схож с методом, но отличается
от метода тем, что не имеет явным образом определённого типа возвращаемых
данных, не наследуется, и обычно имеет различные правила для рассматриваемых
модификаторов. Конструкторы часто выделяются наличием одинакового имени с
именем класса, в котором объявляется. Их задача — инициализировать члены
объекта и определить инвариант класса, сообщив в случае некорректности
инварианта. Корректно написанный конструктор оставит объект в «правильном»
состоянии. Неизменяемые объекты тоже должны быть проинициализированы конструктором.

Пример. Создаётся класс krug с шестью полями (свойствами)и два экземпляра круга
Приводятся два варианта:
- без использования явно заданного конструктора;
- с конструктором.
Вариант без конструктора закомментирован.

package krug;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Krug 
{   public int D;
    public String cvetKruga;
    private String granicaVid;
    private String granicaCvet;
    private int Xkruga;//координаты центра
    private int Ykruga;//круга
    //Конструктор
    public Krug(int D,String cvetKruga,String granicaVid,String granicaCvet,int Xkruga,int Ykruga )
    {  this.D=D;
       this.cvetKruga=cvetKruga;
       this.granicaVid=granicaVid;
       this.granicaCvet=granicaCvet;
       this.Xkruga=Xkruga;
       this.Ykruga=Ykruga;     
    }
    public static void main(String[] args) 
    { //Поля двух экземпляров круга задаются без явного конструктора
     /*  Krug krug1=new Krug();
       krug1.D=80;
       krug1.cvetKruga="красный";
       krug1.granicaVid="пунктир";
       krug1.granicaCvet="синий";
       krug1.Xkruga=100;
       krug1.Ykruga=120;
       Krug krug2=new Krug();
       krug2.D=60;
       krug2.cvetKruga="зелёный";
       krug2.granicaVid="сплошная линия";
       krug2.granicaCvet="розовый";
       krug2.Xkruga=50;
       krug2.Ykruga=70;
       */
       //Поля двух экземпляров круга задаются с помощью конструктора
       Krug krug1=new Krug(80,"красный","пунктир","синий",100,120);
       Krug krug2=new Krug(60,"зелёный","сплошная линия","розовый",50,70);
       double S=krug1.alfa("круг 1");
       System.out.println(" Площадь круга="+S);
    }
    
     private double  alfa(String kr)
    {  double L=Math.PI*D;
       //Округление до одного знака после запятой
       L = new BigDecimal(L).setScale(1, RoundingMode.HALF_UP).doubleValue();
       double S=Math.PI*Math.pow(D/2,2);
       S= new BigDecimal(S).setScale(1, RoundingMode.HALF_UP).doubleValue();
       System.out.println(kr + "\n Цвет круга - "+cvetKruga+".\n Диаметр - "+D+" "
               + "\n Длина окружности = "+L);
       return(S);
    }
}
Результат:
круг 1
 Цвет круга - красный.
 Диаметр - 80 
 Длина окружности = 251.3
 Площадь круга=5026.5

Модификатор static

    В общем случае модификатор static означает, что данная сущность принадлежит
классу, а не экземпляру класса. Модификатор static применим к
   - внутренним классам,
   - методам,
   - данным.

   Внутренним (inner) назывется класс, описанный внутри другого класса.
Если внутренний класс static - то к нему извне охватывающего класса можно
обратиться с помощью ИмяОхватывающегоКласса.ИмяВнутреннегоКласса.
Иначе - только через экземпляр.ИмяВнутреннегоКласса.

   Модификатор static нужен для данных, которые должны
существовать в единственном экземпляре на весь класс,
    Метод, не имеющий модификатора static, называется методом
экземпляра. Метод экземпляра может быть вызван только для созданного
экземпляра класса или подкласса. Такой метод нельзя вызывать
непосредственно, квалифицируя его именем класса.
Метод, объявленный с модификатором static, называется статическим методом
(или методом класса) и может быть вызван без создания экземпляра класса.
Этот метод всегда вызывается непосредственно из класса. Статический метод
имеет доступ к другим статическим переменным и методам данного класса.
Если статический метод определен как final-метод, то он не может быть переопределен.