Версии Java
Установка JDK
Установка JDK
Задание переменных окружения
Проверка установки
Создание приложения
Точка входа
Компиляция приложения
Компиляция приложения
Запуск приложения
Байт код
Дизассемблирование с Jasper
Байт код
Коды типов
jasmin

Введение в Java

1.

I. Введение
1. Первые шаги
1

2.

Java — объектно-ориентированный,  платформо-независимый  язык 
программирования.  Приложения  Java  обычно компилируются в 
платформо-независимый байт-код  который  может  выполняться  с 
использованием специального приложения называемым виртуальной 
машиной Java (Java Virtual Machine JVM). Компилятор и  виртуальная 
машина для каждой архитектуры и операционной системы свои.
2

3.

3

4.

4

5.

Java  Runtime  Environment  (JRE) — исполнительная 
среда Java состоит 
из 
реализации виртуальной 
машины  Java,  необходимой  для  исполнения Java  - 
приложений и библиотеки Java  - классов.
Java  Development  Kit  (JDK) — комплект  разработчика 
приложений  на  языке  Java  включает  компилятор 
Java (javac),  стандартные  библиотеки  классов Java, 
примеры,  документацию,  различные  утилиты  и 
исполнительную среду Java (JRE).
5

6.

История Java
6

7. Версии Java

Версия
Год
Число классов
и интерфейсов
в библиотеке
JDK 1.0
1996
211
45.3
Сам язык
JDK 1.1
1997
477
45.3
Внутренние классы
J2SE 1.2
1998
1,524
46.0
Ничего
J2SE 1.3
2000
1,840
47.0
Ничего
J2SE 1.4
2002
2,723
48.0
Утверждения
Версия
сlass файлов
Что нового
J2SE 5.0
2004
3,279
49.0
Цикл for each. Родовые типы. Автоматическая 
упаковка и распаковка. Перечисления. Метаданные. 
Переменное число аргументов. static import.
Java SE 6
2006
3,777
50.0
Ничего
51.0
Использование класса String в блоке switch. 
Объединённая обработка исключений. 
Подчёркивание в числовых литералах.
Java SE 7
2011

8.

Загрузка и установка JDK
8

9.

JDK  можно  абсолютно  бесплатно  загрузить  с  сайта  http://
www.oracle.com/technetwork/java/javase/downloads 
На  момент  разработки  курса  последней  версии  Java  SE  6 
была Java SE 6 Update 33. 
9

10.

Для загрузки необходимо принять условия лицензионного 
соглашения и выбрать архитектуру/операционную систему. 
В данном примере выбран вариант windows-i586. 
10

11. Установка JDK

11

12. Установка JDK

12

13. Задание переменных окружения

В переменную среды Path необходимо добавить 
поддиректорию bin из директории установки JDK. 
Переменные  окружения  будут  действительны 
только во вновь открытой консоли.  
13

14. Проверка установки

Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator>java -version
java version
version "1.6.0_33"
"1.6.0_33"
java
Java(TM) SE
SE Runtime
Runtime Environment
Environment (build
(build 1.6.0_33-b03)
1.6.0_33-b03)
Java(TM)
Java HotSpot(TM)
HotSpot(TM) Client
Client VM
VM (build
(build 20.8-b03,
20.8-b03, mixed
mixed mode,
mode, sharing)
sharing)
Java
C:\Documents and Settings\Administrator>javac -version
javac 1.6.0_33
1.6.0_33
javac
C:\Documents and Settings\Administrator>
14

15.

Простейшее приложение
15

16. Создание приложения

Для разработки java приложений можно использовать 
любой  текстовый  редактор.  Убедитесь  что  созданный 
файл не имеет скрытое расширение txt.
16

17. Точка входа

public
public class
class HelloWorld
HelloWorld {{
public
public static
static void
void main(String[]
main(String[] args)
args) {{
}}
}}
System.out.println("Hello
System.out.println("Hello World!");
World!");
Точкой    входа  приложения    может  быть  любой 
класс  содержащий  метод  public  static  void 
main(String[] args).
17

18. Компиляция приложения

I:\helloworld>dir
I:\helloworld>dir
Volume
Volume in
in drive
drive II has
has no
no label.
label.
Volume
Volume Serial
Serial Number
Number is
is 44AB-CB89
44AB-CB89
Directory
Directory of
of I:\helloworld
I:\helloworld
02/20/2013
02/20/2013
02/20/2013
02/20/2013
11/14/2012
11/14/2012
10:17
<DIR>
..
10:17 AM
AM
<DIR>
10:17
<DIR>
..
10:17 AM
AM
<DIR>
..
03:16
PM
140
HelloWorld.java
03:16 PM
140 HelloWorld.java
HelloWorld.java
11 File(s)
140
File(s)
140 bytes
bytes
22 Dir(s)
Dir(s) 48,620,081,152
48,620,081,152 bytes
bytes free
free
I:\helloworld>
javac HelloWorld.java
HelloWorld.java
I:\helloworld> javac
I:\helloworld>dir
I:\helloworld>dir
Volume
Volume in
in drive
drive II has
has no
no label.
label.
Volume
Volume Serial
Serial Number
Number is
is 44AB-CB89
44AB-CB89
Directory
Directory of
of I:\helloworld
I:\helloworld
02/20/2013
02/20/2013
02/20/2013
02/20/2013
02/20/2013
02/20/2013
11/14/2012
11/14/2012
10:17
<DIR>
..
10:17 AM
AM
<DIR>
10:17
<DIR>
..
10:17 AM
AM
<DIR>
..
10:17
426
HelloWorld.class
10:17 AM
AM
426 HelloWorld.class
HelloWorld.class
03:16
PM
140
HelloWorld.java
03:16 PM
140 HelloWorld.java
22 File(s)
566
File(s)
566 bytes
bytes
22 Dir(s)
Dir(s) 48,620,081,152
48,620,081,152 bytes
bytes free
free
I:\helloworld>
I:\helloworld>
Для  компиляции  используется  компилятор  javac.exe.  В  качестве  параметра  ему 
передаётся название модуля компиляции. Для каждого класса из модуля компиляции 
создаётся class файл содержащий байт код. По умолчанию class файлы добавляются 
в директорию где находится модуль компиляции.
18

19. Компиляция приложения

javac
–verbose
HelloWorld.java
javac -verbose
–verbose HelloWorld.java
HelloWorld.java
G:\>javac
G:\>javac
-verbose
HelloWorld.java
[parsing
[parsing started
started HelloWorld.java]
HelloWorld.java]
[parsing
completed
[parsing completed 31ms]
31ms]
[search
path
for
source
[search path for source files:
files: .]
.]
[search
[search path
path for
for class
class files:
files: C:\Program
C:\Program Files
Files (x86)\Java\jdk1.6.0_35\jre\lib\re
(x86)\Java\jdk1.6.0_35\jre\lib\re
sources.jar,C:\Program
sources.jar,C:\Program Files
Files (x86)\Java\jdk1.6.0_35\jre\lib\rt.jar,C:\Program
(x86)\Java\jdk1.6.0_35\jre\lib\rt.jar,C:\Program Fi
Fi
les
les (x86)\Java\jdk1.6.0_35\jre\lib\sunrsasign.jar,C:\Program
(x86)\Java\jdk1.6.0_35\jre\lib\sunrsasign.jar,C:\Program Files
Files (x86)\Java\jd
(x86)\Java\jd
k1.6.0_35\jre\lib\jsse.jar,C:\Program
Files
(x86)\Java\jdk1.6.0_35\jre\lib\jce.j
k1.6.0_35\jre\lib\jsse.jar,C:\Program Files (x86)\Java\jdk1.6.0_35\jre\lib\jce.j
ar,C:\Program
ar,C:\Program Files
Files (x86)\Java\jdk1.6.0_35\jre\lib\charsets.jar,C:\Program
(x86)\Java\jdk1.6.0_35\jre\lib\charsets.jar,C:\Program Files
Files
(x86)\Java\jdk1.6.0_35\jre\lib\modules\jdk.boot.jar,C:\Program
(x86)\Java\jdk1.6.0_35\jre\lib\modules\jdk.boot.jar,C:\Program Files
Files (x86)\Java
(x86)\Java
\jdk1.6.0_35\jre\classes,C:\Program
\jdk1.6.0_35\jre\classes,C:\Program Files
Files (x86)\Java\jdk1.6.0_35\jre\lib\ext\dns
(x86)\Java\jdk1.6.0_35\jre\lib\ext\dns
ns.jar,C:\Program
ns.jar,C:\Program Files
Files (x86)\Java\jdk1.6.0_35\jre\lib\ext\localedata.jar,C:\Pro
(x86)\Java\jdk1.6.0_35\jre\lib\ext\localedata.jar,C:\Pro
gram
Files
(x86)\Java\jdk1.6.0_35\jre\lib\ext\sunjce_provider.jar,C:\Program
gram Files (x86)\Java\jdk1.6.0_35\jre\lib\ext\sunjce_provider.jar,C:\Program Fil
Fil
es
(x86)\Java\jdk1.6.0_35\jre\lib\ext\sunmscapi.jar,C:\Program
Files
(x86)\Java\
es (x86)\Java\jdk1.6.0_35\jre\lib\ext\sunmscapi.jar,C:\Program Files (x86)\Java\
jdk1.6.0_35\jre\lib\ext\sunpkcs11.jar,.]
jdk1.6.0_35\jre\lib\ext\sunpkcs11.jar,.]
[loading
[loading java\lang\Object.class(java\lang:Object.class)]
java\lang\Object.class(java\lang:Object.class)]
[loading
[loading java\lang\String.class(java\lang:String.class)]
java\lang\String.class(java\lang:String.class)]
[checking
[checking HelloWorld]
HelloWorld]
[loading
java\lang\System.class(java\lang:System.class)]
[loading java\lang\System.class(java\lang:System.class)]
[loading
[loading java\io\PrintStream.class(java\io:PrintStream.class)]
java\io\PrintStream.class(java\io:PrintStream.class)]
[loading
[loading java\io\FilterOutputStream.class(java\io:FilterOutputStream.class)]
java\io\FilterOutputStream.class(java\io:FilterOutputStream.class)]
[loading
[loading java\io\OutputStream.class(java\io:OutputStream.class)]
java\io\OutputStream.class(java\io:OutputStream.class)]
[wrote
HelloWorld.class]
[wrote HelloWorld.class]
[total
[total 157ms]
157ms]
G:\>
G:\>
Для получения подробной информации 
во 
время 
компиляции 
можно 
использовать флаг -verbose. 
19

20. Запуск приложения

F:\>dir
F:\>dir
Volume
Volume
Volume
Volume
in
in drive
drive FF has
has no
no label.
label.
Serial
Number
is
58B9-DDFE
Serial Number is 58B9-DDFE
Directory
Directory of
of F:\
F:\
10/15/2012
10/15/2012
10/15/2012
10/15/2012
05:54
426
HelloWorld.class
05:54 PM
PM
426 HelloWorld.class
HelloWorld.java
05:52
131
HelloWorld.java
05:52 PM
PM
131 HelloWorld.java
HelloWorld.java
22 File(s)
557
File(s)
557 bytes
bytes
00 Dir(s)
Dir(s) 41,562,402,816
41,562,402,816 bytes
bytes free
free
F:\>java
java
HelloWorld
F:\>java
java HelloWorld
HelloWorld
Hello
World!
Hello World!
F:\>
F:\>
Для  запуска  приложения  используется 
виртуальная машина Java – java.exe. В 
качестве 
параметра 
указывается 
название  класса  который  будет  точкой 
входа.
20

21.

Байт код
21

22. Байт код

javap
-c
HelloWorld
F:\>javap
javap-c
-cHelloWorld
HelloWorld
F:\>javap
-c
HelloWorld
Compiled
Compiled from
from "HelloWorld.java"
"HelloWorld.java"
public
public class
class HelloWorld
HelloWorld extends
extends java.lang.Object{
java.lang.Object{
public
HelloWorld();
public HelloWorld();
Code:
Code:
0:
aload_0
0:
aload_0
1:
invokespecial
#1;
1:
invokespecial
#1; //Method
//Method java/lang/Object."<init>":()V
java/lang/Object."<init>":()V
4:
return
4:
return
public
public static
static void
void main(java.lang.String[]);
main(java.lang.String[]);
Code:
Code:
0:
getstatic
#2;
0:
getstatic
#2; //Field
//Field java/lang/System.out:Ljava/io/PrintStream;
java/lang/System.out:Ljava/io/PrintStream;
3:
ldc
#3;
3:
ldc
#3; //String
//String Hello
Hello World!
World!
5:
invokevirtual
#4;
//Method
5:
invokevirtual
#4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
java/io/PrintStream.println:(Ljava/lang/String;)V
8:
return
8:
return
}}
F:\>
F:\>
Для  просмотра  байт  кода  можно 
использовать дизассемблер javap.
Более  удобными  средствами  для   
дизассемблирования  класс  файлов  и 
ознакомления с байт кодом являются 
пара jasper – jasmin. 
22

23. Дизассемблирование с Jasper

java
–jar
Jasper.jar
HelloWorld.class
I:\helloworld>java
java-jar
–jarJasper.jar
Jasper.jarHelloWorld.class
HelloWorld.class
I:\helloworld>java
-jar
Jasper.jar
HelloWorld.class
HelloWorld.class
Reading:
HelloWorld.class
HelloWorld.class
Reading:
Generated:
HelloWorld.j
Generated: HelloWorld.j
HelloWorld.j
I:\helloworld>
I:\helloworld>
Для дизассемблирования можно использовать Jasper. 
В  качестве  параметра  передаётся  название  class 
файла. Создаётся текстовый файл с расширением j.
23

24. Байт код

После дизассемблирования в байт код 
можно  внести  изменения  чтобы  потом 
заново получить class файл.
24

25. Коды типов

B
byte
C
char
D
double
F
float
I
int
J
long
L
object
S
short
Z
boolean
[
array
25

26. jasmin

java
–jar
jasmin.jar
HelloWorld.j
I:\helloworld>java
java-jar
–jarjasmin.jar
jasmin.jarHelloWorld.j
HelloWorld.j
I:\helloworld>java
-jar
jasmin.jar
HelloWorld.j
HelloWorld.class
Generated:
HelloWorld.class
Generated: HelloWorld.class
HelloWorld.class
I:\helloworld>java
I:\helloworld>java HelloWorld
HelloWorld
Helloooooooooooooooooooooooooooooooo
Helloooooooooooooooooooooooooooooooo World!
World!
I:\helloworld>
I:\helloworld>
Для  получения  class  файла  можно  использовать 
jasmin.  В  качестве  параметра  передаётся  название  j 
файла. Создаётся class файл.
26
English     Русский Правила