Professional Documents
Culture Documents
Shmeiwseis Java Greek
Shmeiwseis Java Greek
Shmeiwseis Java Greek
2004 , markos@debian.org
: GNU FDL
1. Java
Java (object oriented)
.
1991 Sun Microsystems
.
C++ -
.
Java
Java
Java (
) .
Java Virtual Machine (JVM)
.
(.. C, C++, PASCAL)
. ,
.
,
Windows Macintosh. ,
(source code)
.
, Java
, bytecode.
, .
Java Virtual Machine (JVM) Java bytecode. JVM
bytecode (java bytecode to
native code translation, ).
Java, Java
(.. C++).
, Just In Time (JIT) compilers
scheduling JVM, Java
( Java 90%
C++),
.
Java
C++ Java.
(source code)
(source code)
C++ compiler
Java compiler
(Native code)
Java Bytecode
Java Virtual
Machine (JVM)
(CPU)
C++
Java
C++
. :
Java
C++
Java Bytecode
Native code
Portable
( JVM)
Java
Web, Applets
Web
(Procedural Structured
Programming)
C, PASCAL, FORTRAN
.
(code-centric ).
, .
(Object-Oriented Programming)
.
.
.
. , , , .
. .
/,
.
,
.
,
. ,
( ).
. ,
( .. , , ).
.
,
:
Encapsulation ()
.
Polymorphism ()
,
.
Inheritance ()
.
,
.
Java
2. Java
, Java
.
, , .
.
.
-' - .
:
type var;
type var .
Java
( ).
,
. ,
, loop for/while/do if/else/switch.
:
type var1;
if () {
// var1 ().
// var2 ().
type var2;
// var2 ()
}
// var1 ()
// var2 ()
Java C C++
( Java C++).
, C++
Java
.
Java pointers.
Java
Java:
( bytes)
byte
-128 127
short
-32768 32767
int
-2147483648 -2147483647
long
-9223372036854775808 -9223372036854775807
float
double
bool
true / false
char
String
(constants)
, .
( ) final. ,
final double pi = 3.1415;
(operators)
.
. 4 Java (
, ).
Java
++
--
,
(
, ). :
int x = 10;
x++; // x 11
x--; // 10
==
!=
>
<
>=
<=
Java
&
AND ()
OR ()
XOR ( )
&&
Short-circuit AND
||
Short-circuit OR
NOT ()
& && ,
.
,
(alpha == true) & (beta == 1)
(alpha == true) .
&&, (false)
,
.
.
.
. :
int x = 4;
x = 10;
x += 20; ( x = x + 20, 30)
x /= 10; ( x = x / 10, 3).
Java
x += y
x = x + y
x -= y
x = x - y
x *= y
x = x * y
x /= y
x = x / y
x %= y
x = x % y
x &= y
x = x & y
x |= y
x = x | y
^=
x = x ^ y
(Expressions)
, ,
.
Java (int, long, double, bool, )
String.
:
int b = 10, i;
i = 2*b*b; ( )
if (b * b <= 100 && i > 0)
System.out.println(The expression is true);
Java
3.
.
.
if
if
:
if ()
{
;
}
else
{
;
}
if ,
:
if (x == 1) {
System.out.println(x
} else if (x == 2) {
System.out.println(x
} else if (x == 3) {
System.out.println(x
} else if (x == 4) {
System.out.println(x
} else {
System.out.println(x
}
is one.);
is two.);
is three.);
is four.);
is not between 1-4.);
switch
switch
.
switch, :
switch (x) {
case 1;
System.out.println(x
break;
case 2;
System.out.println(x
break;
case 3:
System.out.println(x
break;
case 4:
System.out.println(x
break;
default:
Java
is one.);
is two.);
is three.);
is four.);
break. break
break switch.
.
switch (x) {
case 1;
System.out.println(x
case 2;
System.out.println(x
case 3;
System.out.println(x
case 4;
System.out.println(x
System.out.println(x
break;
case 5;
System.out.println(x
case 6;
System.out.println(x
case 7;
System.out.println(x
case 8;
System.out.println(x
System.out.println(x
break;
default:
System.out.println(x
break;
}
is one.);
is two.);
is three.);
is four.);
is between one and four.);
is five.);
is six.);
is seven.);
is eight.);
is between five and eight.);
is not between one and eight.);
for
for (loop) .
for,
( C/C++).
:
for ( ; ; ) {
;
}
(initialization) loop
(condition). ,
(iteration)
. , ...
Java
10
:
for (int i = 1; i < 20; i += 3)
System.out.println(i);
}
:
1
4
7
10
13
16
19
,
for.
';'. :
int x = 10;
for (; x < 5; x++) {
System.out.println(x);
}
double y = 20000; // (y = pi)
for (; y >= 10.0;) {
// y
// y.
// for loop y 10.0
System.out.println(y);
y = Math.sqrt(y);
}
for (;;) { // infinite loop
wait_for_signal();
}
while
while for
,
:
while () {
;
}
:
bool exit_from_loop = false;
while (exit_from_loop = false) {
//
read_bytes(file1);
//
write_bytes(file2);
Java
11
if (file_empty(file1) == true)
exit_from_loop = true;
}
do/while
do/while while, ,
loop
.
do {
;
} while ();
:
int x = 10;
do {
System.out.println(x);
x++;
} while (x <10);
:
10
loop
(x < 10).
break/continue
loop
. .. infinite loop,
(signal) (.. Control-C).
for (int i = 1; i < 20; i += 3)
if ( i*i > 100)
break;
System.out.println(i);
}
:
1
4
7
Java
12
continue;
System.out.println(i);
}
:
1
7
13
19
Java
13
4.Classes
Class: Car
Instance of Car
Object:
Audi TT
Instance of Car
Object:
Jaguar XK8
Instance of Car
Object:
Ferrari Modena
Instance of Car
Object:
Bertona Bella
Java
.
(instance) . ,
. , ,
, ,
,
(, , , ).
( /
). , .
Java ( C++ Java)
class. ,
Car:
class Car
{
(/)
(/)
}
member variables
. ,
: , ,
. ,
,
.
Java
14
Car, :
class Car
{
//
float steering_angle;
// (0 = , 100 = !)
float gas_pedal;
// (0 = , 100 = !)
float break_pedal;
// (0 = ,
// 100 = !)
float clutch;
// ( : 0, 1,2,3,4,5,
// 0 = , -1 = )
int gear;
// ,
//
float acceleration, speed, rpm;
}
, .
,
. ,
,
, float.
, , Car.
. '
interface . interface
(member methods).
member methods
(methods) ,
()
.
,
. ,
, ,
,
.
Java
15
Car :
// , <relative_angle>
// .
void turn_wheel(float relative_angle);
//
void press_gas_pedal(float amount);
//
void press_break_pedal(float amount);
//
void press_clutch_pedal(float amount);
// . true
// false (.. 5 ).
bool change_gear(int new_gear);
// ,
//
float get_acceleration();
float get_speed();
float get_rpm();
,
(float) get_*(), bool
change_gear(). void
.
,
' .
,
.
(implementation).
, turn_wheel() :
void turn_wheel(float relative_angle)
{
steering_angle += relative_angle;
if (steering_angle <= -720.0)
steering_angle = -720.0;
if (steering_angle >= 720.0)
steering_angle = 720.0;
}
, 2
.
, (.. ),
.
Java
16
new
, -
(instances) . , new
Java.
new , ,
(reference) .
(
). new :
Car acar = new Car();
Car anothercar = new Car();
acar anothercar
new.
. :
Car acar;
acar = new Car();
( )
, :
// acar
acar.steering_angle
// anothercar
anothercar.steering_angle
// acar 13.4 .
acar.turn(13.4);
// acar
float speed = acar.get_speed();
// anothercar 32
anothercar.turn(-32.0);
// anthercar
bool result = anothercar.ghange_gear(-1);
( ).
Java
.
','.
Constructors
new, Java,
,
, (constructor).
.
,
Java
17
,
SQL, (sockets) server
.
( ,
void).
, Car, :
Car()
{
steering_wheel = 0.0;
gas_pedal = 0.0;
break_pedal = 0.0;
float clutch = 0.0;
int gear = 0;
acceleration = 0.0;
speed = 0.0;
rpm = 0.0;
}
, (initialization)
.
,
.
,
(engine_cc: , engine_hp: ) ,
:
Car(int cc, int hp)
{
engine_cc = cc;
engine_hp = hp;
//
}
.
constructor overloading
Java, method overloading (
).
Destructors? Garbage collection Java
C++,
(destructors). C++, ,
( delete)
(
, , threads,
, ). Java ,
!
Java (garbage collection)
Java
18
,
. ,
(.. C++).
this
,
,
. ,
.
this
(
). this, turn_wheel()
:
void turn_wheel(float relative_angle)
{
this.steering_angle += relative_angle;
if (this.steering_angle <= -720.0)
this.steering_angle = -720.0;
if (this.steering_angle >= 720.0)
this.steering_angle = 720.0;
}
this
,
.
Method Overloading
,
.
/ .
, turn_wheel()
int float. C
/,
:
void turn_wheel_int(int relative_angle)
{
this.steering_angle += (float) relative_angle;
if (this.steering_angle <= -720.0)
this.steering_angle = -720.0;
if (this.steering_angle >= 720.0)
this.steering_angle = 720.0;
}
void turn_wheel_float(float relative_angle)
{
steering_angle += relative_angle;
if (steering_angle <= -720.0)
steering_angle = -720.0;
if (steering_angle >= 720.0)
Java
19
steering_angle = 720.0;
}
, .
turn_wheel_int() :
void turn_wheel_int(int relative_angle)
{
turn_wheel_float((float) relative_angle);
}
,
,
debugging,
. ObjectOriented Java C++ Method
Overloading. method overloading,
.
, :
void turn_wheel(float relative_angle)
{
steering_angle += relative_angle;
if (steering_angle <= -720.0)
steering_angle = -720.0;
if (steering_angle >= 720.0)
steering_angle = 720.0;
}
void turn_wheel(int relative_angle)
{
turn_wheel((float) relative_angle);
}
turn_wheel()
.
' ' , ( void
) .
Java
20
5.
Java
, .
C/C++, Java .
, ..
(
Java) , (
C/C++).
.
C/C++.
:
type table[];
, new:
table = new type[size];
:
type table[] = new type[size];
type
(bool, byte, short, int, long, float, double,
char, String) ( Java ). size
table.
C/C++,
table[i], i .
C/C++ Java
(0) size-1. A 10
A[0] A[9].
:
int data[] = new int[10];
int i;
System.out.println(Size of array data: + data.length);
for (i = 0; i < data.length; i++) {
data[i] = i*i;
System.out.println(data[ + i + ] = + data[i]);
}
:
Size of
data[0]
data[1]
data[2]
data[3]
data[4]
data[5]
array data: 10
= 0
= 1
= 4
= 9
= 16
= 25
Java
21
data[6]
data[7]
data[8]
data[9]
=
=
=
=
36
49
64
81
length
.
,
,
:
int dataset[] = { 22, 3, 54, 43, 199, 20, 20, 67, 7, 80 };
new
dataset.
.
Java, .
, :
int twodim[][] = new int[4][4];
int i, j, counter = 1;
for (i = 0; i < twodim.length; i++) {
for (j = 0; j < twodim[i].length; j++) {
twodim[i][j] = counter;
counter++;
System.out.print(twodim[i][j] + );
}
System.out.println();
}
:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
twodim[1][2]
twodim[3][1]
Java
9 10 11 12
13 14 15 16
22
Strings
strings
System.out.println(). strings
, Java strings ,
String.
println(),
String,
, new.
String str = new String(Hello);
System.out.println(str);
String :
String str2 = Another string;
System.out.println(str2);
String ,
String.
:
int length()
( ) String.
index String.
String.
(. compareTo())
str,
, ,
String
str.
str String.
, -1.
int lastIndexOf(String
str)
str String.
, -1.
strings Java:
String str1 = Hello there, from Java!;
String str2 = One two three four;
String str3 = Java strings are cool!;
String str4 = new String(str3);
int index, result;
System.out.println(str1 is + str1.length() + characters long.);
Java
23
:
H|e|l|l|o| |t|h|e|r|e|,|
str3 == str4
str3 != str2
str3 > str1
'Java' exists in str1 in
'Java' does not exist in
'Java' exists in str3 in
Java
|f|r|o|m| |J|a|v|a|!|
position 18
str2
position 1
24
6.
Java. ,
.
main()
Java, , C/C++,
/ main().
, main() ,
. Java:
class Example {
public static void main(String args[]) {
System.out.println(hello everyone);
}
}
(source code)
(compilation unit) Java,
.java.
. ,
, Java
.
javac (java compiler), :
(source code directory)# javac Example.java
(UNIX/Linux)
(Windows)
25
(UNIX/Linux)
(Windows)
.class Example.
.java, compiler java .class.
.class
.java .
.jar
,
.java .class,
, .class
.
.
, Java .class
JAR (Java Archive) .jar.
jar (
Windows UNIX/Linux):
C:\(source code directory)# jar cvf classes.jar MyClass1.class
Another.class
classes.jar
:
C:\(source code directory)\> java classes.jar
jar zip
.
args[] main()
main() args[],
String. argc
argv[] C/C++. ,
(DOS/Command Prompt
Windows, shell Linux).
:
Java
26
class ArgsExample {
public static void main(String args[]) {
for (int i=0; i < args.length; i++)
System.out.println(args[i]);
}
}
ArgsExample.java
javac :
# javac ArgsExample.java
:
# java ArgsExample hello mate what's up?
hello
mate
what's up?
Java
27
7.
Java
.
( Java JVM).
,
.
:
/ .
(
main()).
.
:
1 class ArgsExample {
2
public static void main(String args[]) {
3
for (int i=0; i < args.length; i++) {
4
if (args[i].equals(-file) == true) {
5
if (i+1 < args.length)
6
System.out.println(FILE: +args[i+1]);
7
}
8
}
9
}
10 }
1-3 : ,
main() loop for. 4
equals() String - args[]
-file. ( equals()
true) ( i+1
, 5)
( 6). args[].
javac,
:
Java
28
# javac ArgsExample.java
# java ArgsExample one -file two three -file
FILE: two
args[] :
args[0]
one
args[1]
-file
args[2]
two
args[3]
three
args[4]
-file
args.length
args.length = 5.
, :
i
args[i]
args[0].equals(-file)
Print?
one
false
no
-file
true
true
yes
two
false
no
three
false
no
-file
true
false
no
i ).
if 4
References
equals()
String.
==, int ;
Java, (bool, int, long, float, ),
,
( , String)
(instance). ,
str String,
. pointers
references C/C++.
, string:
Java
29
String a, b;
a = Hello;
b = a;
String c = new String(a);
.
a
Hello
Hello
a b
string Hello. b a,
. b,
a. c,
a
c. c, a .
Encapsulation
Person
, .. , , email
. ..
, , .
class Person
{
//
String Firstname_, Lastname_;
int Age_;
String Telephone_;
String Email_;
// constructor
Person(String fname, String lname, int age, String tel,
String email)
{
Firstname_ = new String(fname);
Lastname_ = new String(lname);
Age_ = age;
Telephone_ = new String(tel);
Email_ = new String(email);
}
}
_. ,
,
.
Java
30
,
:
Person bilbo = new Person( Bilbo, Baggins, 111, +306970123456,
bilbobaggins@theshire.net);
, bilbo
Bilbo Baggins, 111 . 306970123456 email bilbobaggins@theshire.net.
.
bilbo,
. , email email_
telephone_. :
bilbo.Firstname_
bilbo.Lastname_
bilbo.Age_
bilbo.Email_
bilbo.Telephone_
=
=
=
=
=
;
;
3;
this is definitely not a valid email address;
yeah, try to call this;
!!!
;
Java
,
.
, main() public
.
, public
. ,
private. private
( ). ,
. Person,
private, :
class Person
{
//
private String Firstname_, Lastname_;
private int Age_;
private String Telephone_;
private String Email_;
...
!
.
, .
.
Java
31
,
,
( getter/setter ).
, Person get/set
(age_ email_):
// Return the age
int getAge()
{
return Age_;
}
// return the Email address
String getEmail()
{
return new String(Email_);
}
// method to set the age of the person
bool setAge(int Age)
{
// check if given Age is non-negative (> 0)
if (Age > 0)
{
Age_ = Age;
return true;
} else
return false;
}
// method to set the email address
bool setEmail(String Email)
{
// call a helper method to check the validity of the email
// address (if it's in the form x@y.z).
// Ideally, the email address should be a class on its own.
if (isValid(Email) == true)
{
Email_ = new String(Email);
return true;
} else
return false;
}
.
email , ,
email ( x@y.z).
. ..
,
. O,
,
(.. setTelephone()).
Java
32
Inheritance
. ,
.
,
Person . Person
, .. ,
, ,
/ .
Person
( ).
,
.
/ , ;
. Person
(Clerk)
(Teacher).
Person.
Person.
(
):
class Clerk extends Person
{
private String JobTitle_;
private String CompanyName_;
private String JobAddress_;
private String JobEmail_;
private String JobTel_;
private String JobFax_;
private String JobDescription_;
public Clerk(String fname, String lname, int age, String tel,
String email, String jobtitle, String companyname,
String jobaddress, String jobemail,
String jobtel, String jobfax,
String jobdescription)
{
Firstname_ = new String(fname);
Lastname_ = new String(lname);
Age_ = age;
Telephone_ = new String(tel);
Email_ = new String(email);
JobTitle_ = new String(jobtitle);
CompanyName_ = new String(companyname);
JobAddress_ = new String(jobaddress);
JobEmail_ = new String(jobemail);
JobTel_ = new String(jobtel);
JobFax = new String(jobfax);
JobDescription_ = new String(jobdescription);
Java
33
}
// get/set
// ...
...
//
// .
String getInfo() {
return new String(getFirstname()+ +getLastname()
+ works at +CompanyName_
+, at +JobAddress_
+.\n Email: +getEmail()+\n
+Tel: +JobTel_);
}
}
, Teacher:
class Teacher extends Person
{
private String Title_;
private String School_;
private String SchoolAddress_;
private String SchoolTel_;
private String CourseName_;
private String CourseDescription_;
public Teacher(String fname, String lname, int age, String tel,
String email, String title, String school,
String schooladdress, String schooltel,
String coursename, String coursedescription)
{
Firstname_ = new String(fname);
Lastname_ = new String(lname);
Age_ = age;
Telephone_ = new String(tel);
Email_ = new String(email);
Title_ = title;
School_ = school;
SchoolAddress_ = schooladdress;
SchoolTel_ = jobtel;
CourseName_ = coursename;
CourseDescription_ = coursedescription;
}
// get/set
// ...
...
//
// .
String getInfo() {
return new String(getFirstname()+ +getLastname()
+ teaches +CourseName_+ at +School_
+, +SchoolAddress_+.\n
+Email: +getEmail()+\n
Java
34
+Tel: +SchoolTel_);
}
}
get() Person
( private).
private,
. .
;
:
Person bilbo = new Person( Bilbo, Baggins, 111, +306970123456,
bilbobaggins@theshire.net);
Clerk sam = new Clerk( Samwise, Gamgee, 33, +30697654321,
samgamgee@theshire.net,
Gardener, Baggins Inc.,
Bag End, Hobbiton, The Shire,
gardener@baggins.com,
+302103456789, +302103456780,
Garden Dept. Director);
Teacher pippin = new Teacher( Peregrin, Took, 27, +30690090090,
pippin@theshire.net, Dr.,
King's College, Hobbiton,
+30210000001, Philosophy,
Deal with the important matters of life, eg. what do we
eat?);
,
,
( ):
System.out.println(bilbo has email address: + bilbo.getEmail());
:
bilbo has email address: bilbobaggins@shire.net
:
System.out.println(sam works as a + sam.getJobTitle() + at +
sam.getCompanyame());
:
sam works as a Gardener at Baggins Inc.
, :
System.out.println(pippin teaches + pippin.getCourseName() + at +
pippin.getSchool());
:
pippin teaches Philosophy at King's College
Java
35
, :
System.out.println(sam's private telephone is + sam.getTel());
System.out.println(pippin is + pippin.getAge() + years old);
:
sam's private telephone is +30697654321
pippin is 27 years old
Person !!!
!
,
(code reusability).
,
, .
Polymorphism
; ,
getInfo(),
. ,
Person, getInfo().
getInfo() Person, .. :
String getInfo() {
return new String(getFirstname()+ +getLastname()
+is +getAge()+ years old);
}
: getInfo()
;
. getInfo()
.
, :
System.out.println(bilbo.getInfo());
System.out.println(sam.getInfo());
System.out.println(pippin.getInfo());
Bilbo Baggins is 111 years old
Samwise Gamgee works at Baggins Inc., at Bag End, Hobbiton, The Shire.
Email: gardener@baggins.com
Tel: +302103456789
Peregrin Took teaches Philosophy at King's College, Hobbiton.
Email: pippin@theshire.net
Tel: +30210000001
; (
getInfo()) . Person
getInfo() (Bilbo Baggins is 111 years old)
Java
36
Clerk Teacher .
, getInfo() Clerk, getInfo()
sam Samwise Gamgee is 33 year old.
Clerk
getInfo(), , .
Method Overriding
.
//
.
. (bilbo, sam, pippin).
Person who[3];
who[0] = bilbo;
who[1] = sam;
who[2] = pippin;
for (int i=0; i < who.length; i++)
System.out.println(who[i].getInfo());
,
Person
. sam Clerk pippin
Teacher. who;
Person, Clerk Teacher .
Clerk Person, Teacher
Person. Clerk Teacher.
Clerk Teacher Person,
. Person, getInfo()
.
(
);
super (
). super
( constructor
). .
getInfo() Teacher :
public Teacher(String fname, String lname, int age, String tel,
String email, String title, String school,
String schooladdress, String schooltel,
String coursename, String coursedescription)
{
super(fname, lname, age, tel, email);
Title_ = title;
School_ = school;
SchoolAddress_ = schooladdress;
SchoolTel_ = jobtel;
CourseName_ = coursename;
CourseDescription_ = coursedescription;
}
Java
37
String getInfo() {
return new String(super.getInfo()
+ and teaches +CourseName_+ at +School_
+, +SchoolAddress_+.\n
+Email: +getEmail()+\n
+Tel: +SchoolTel_);
}
(initialize)
. , getInfo(),
. ..
getInfo() Person,
getInfo() Teacher,
Person super.
method overriding
. ,
. ( )
(method overloading)
.
Abstract Classes
.
,
method overriding.
' .
.
.
( )
. :
abstract class Car {
...
// . true
// false (.. 5 ).
abstract bool change_gear(int new_gear);
...
}
class FerrariModena extends Car {
...
bool change_gear(int new_gear) {
//
}
...
}
Java
38
Final Classes
method overriding,
, .
(..
, /, ),
.
( )
.
.
final. final overriding
. final,
'
.
:
class A {
final int amethod() {
// sample code
}
}
class B extends A {
int amethod() {
// different code
}
}
// !!! !
final:
final class A {
// class internals
}
class B extends A { // !!! !
// class internals
}
final ,
( const C++).
class myfinal {
final int x = 1;
// int x 1
//
}
Object
Java '
.
,
Java
39
. Object
:
true Object
.
Object clone()
,
clone().
Class getClass()
getClass().
String toString()
String.
System.out.println(),
. overload.
Java
40
8.Exceptions
( !)
.
bugs ( ),
( , ,
, ) (..
).
/ (crash).
. ,
.
(C, PASCAL)
.
. ,
,
,
:
fc = open(.dat);
if (fc == 0 && errno != 0)
println(error);
success = read(fc, buffer);
if (success) {
// do stuff
}
success = write(fc, buffer);
if (success) {
// again, do stuff
}
, .
,
. ,
. ,
(
).
, ,
,
.
C, PASCAL, FORTRAN.
.
Java
41
C++ Java
, exceptions.
. ( ),
exceptions ,
,
. :
(try)
(exception)
(catch). , :
try {
fc = open(.dat);
read(fc, buffer);
// do stuff
write(fc, buffer);
// do stuff
} catch (Exception e) {
println(error);
}
(: , Java
, )
catch exception
(catch). Java exception
Exception , e
. Exception
exception, ,
, . :
String getMessage()
String toString()
String exception.
toString() ..
System.out.println().
void printStackTrace()
( exception)
.
Exception .
..
( )
.
Exception ( Exception)
.
exceptions Java:
Java
42
Exception
ArithmeticException
(..
).
ArrayIndexOutOfBoundsException
ArrayStoreException
NegativeArraySizeException
NullPointerException
null .
NumberFormatException
String
StringIndexOutOfBoundsException String
UnsupportedOperationException
ClassNotFoundException
IllegalAccessException
InstantiationException
(instance) .
NoSuchFieldException
NoSuchMethodException
exception catch.
, :
class ExceptionTest {
public static void main(String args[]) {
int val = -5;
int nums[] = new int[10];
for (int i=0; i < nums.length; i++, val++)
nums[i] = val;
for (int i=0; i < 2* nums.length; i++) {
try {
// 10 nums[i]
System.out.println(10 / nums[i]);
} catch (ArithmeticException e) {
System.out.println("Arithmetic Exception :"
+ e.getMessage());
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("non-existant elements, at pos:"
+ e.getMessage());
}
}
System.out.println(Program continues to run...);
}
Java
43
javac, java:
$ java ExceptionTest
-2
-2
-3
-5
-10
Arithmetic Exception :/ by zero
10
5
3
2
non-existant elements, at pos: 10
non-existant elements, at pos: 11
non-existant elements, at pos: 12
non-existant elements, at pos: 13
non-existant elements, at pos: 14
non-existant elements, at pos: 15
non-existant elements, at pos: 16
non-existant elements, at pos: 17
non-existant elements, at pos: 18
non-existant elements, at pos: 19
Program continues to run...
,
. exceptions,
:
$ java ExceptionTest
-2
-2
-3
-5
-10
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionTest.main(ExceptionTest.java)
,
,
, ,
.
Exceptions throws
exceptions
exceptions. Java
exception
( main()). exceptions
, .
exception , . main:
:
public static void main(String args[]) throws java.io.IOException {
Java
44
9.Java
, Java
, .
Java ,
, ..
String
.
,
, .. C
(memory mapped files) (structs)
/. C++
(streams).
, , Java.
I/O Streams
streams ,
. , Java
, byte (byte streams)
(character streams). , byte streams
,
.
, character streams ,
(.. ISO-8859-7, UTF-8)
Unicode.
, character streams byte streams.
Byte Streams
byte streams
InputStream OutputStream.
(.. , (pipes), ).
InputStream
OutputStream.
Java.
byte streams.
InputStream
()
byte stream (input).
OutputStream
()
byte stream (output).
BufferedInputStream
Stream buffer .
BufferedOutputStream
Stream buffer .
ByteArrayInputStream
Stream bytes.
Java
45
DataOutputStream
FileInputStream
Stream .
FileOutputStream
Stream .
FilterInputStream
Stream .
FilterOutputStream
Stream .
PipedInputStream
Stream (pipe).
PipedOutputStream
Stream (pipe).
PrintStream
PushBackInputStream
Stream .
RandomAccessFile
Stream .
SequenceInputStream
Stream
streams , .
InputStream :
int available()
bytes
stream.
void close()
stream .
int read()
byte stream
int, -1
.
bytes (
buffer[],
buffer.length)
buffer.
bytes , -1
.
Java
46
bytes (
maxBytes)
buffer,
offset.
bytes
, -1
.
( ) numBytes bytes
stream ,
bytes .
1 InputStream
OutputStream:
void close()
stream .
void flush()
void write(int b)
stream byte b. b
int, casting
byte .
buffer (
buffer.length) stream .
buffer (
maxBytes) offset,
stream .
2 OutputStream
,
InputStream OutputStream read() write() .
.
(I/O) , Java,
exception ( the method throws an exception).
InputStream, OutputStream
(package) Java java.io, Exceptions
, Exception java.io,
IOException. , java.io.IOException.
Java packages: Java ,
. ,
(C, C++).
,
.
Java
47
Java , ,
, , .
, , java.io.
import,
, :
import java.io.*;
java.io ( ) .
InputStream OutputStream,
( copy
DOS cp UNIX). CopyFile
:
C:\> java CopyFile file1.dat file2.dat
Java
48
}
//
// :
try {
do {
i = fin.read();
if (i != -1)
//
fout.write(i);
// fin
} while (i != -1);
} catch (IOException exc) {
System.out.println(File error);
}
//
fin.close();
fout.close();
}
}
FileInputStream FileOutputStream, .
copy. Linux Pentium III/ 700 Mhz,
56 MB cp 11 .
, 4 44 !!!
read() write()
buffer. ,
:
// 2
// blocks . 16384 bytes
//
//
int bufsize = 16384;
byte buffer[] = new byte[bufsize];
//
// :
try {
do {
// buffer, i
// bytes .
i = fin.read(buffer);
if (i != -1)
// fin
// fout bytes buffer
// read()
fout.write(buffer, 0, i);
} while (i != -1);
} catch (IOException exc) {
System.out.println(File error);
}
Java
49
.
8,6 !
.
byte streams
(..
ByteArrayOutputStream,
(pipe) PipedInputStream, ).
.
Streams
, Java
, streams (character streams).
' InputStream
OutputStream .
() Reader Writer
streams :
Reader
()
character stream (input).
Writer
()
character stream (output).
BufferedReader
Stream buffer .
BufferedWriter
Stream buffer .
CharArrayReader
Stream .
CharArrayWriter
Stream .
FileReader
Stream .
FileWriter
Stream .
FilterReader
Stream .
FilterWriter
Stream .
InputStreamReader
Stream bytes .
LineNumberReader
Stream .
Stream (pipe).
PipedWriter
Stream (pipe).
PrintWriter
PushBackReader
Stream .
StringReader
Stream String.
StringWriter
Stream String.
Java
50
, Reader Writer,
InputStream OutputStream,
:
int available()
bytes
stream.
void close()
stream .
int read()
stream int, -1
.
(
buffer[],
buffer.length)
buffer.
, -1
.
(
maxChars)
buffer, offset.
, -1
.
( ) numChars
stream ,
.
3 Reader
Writer:
abstract void close()
stream .
stream ch. ch
int,
casting char .
buffer (
buffer.length) stream .
buffer (
maxChars) offset,
stream .
Java
51
stream .
4 Writer
, stream
. ,
(
FileReader) BufferedReader.
( type DOS more/less UNIX).
PrintWriter.
System.out.println(), ,
(
, ).
import java.io.*;
class PrintFile {
public static void main(String args[]) {
//
FileReader fr;
BufferedReader br;
PrintWriter pw;
String str;
//
// .
if (args.length == 0)
System.out.println("Usage: PrintFile <file>...");
// block exceptions
try {
// PrintWriter
pw = new PrintWriter(System.out, true);
// , FileReader.
// FileReader, BufferedReader.
for (int i=0; i < args.length; i++) {
fr = new FileReader(args[i]);
br = new BufferedReader(fr);
// BufferedReader,
// . , PrintWriter
while ((str = br.readLine()) != null)
pw.println(str);
}
} catch (IOException e) {
System.out.println("File error: " +e);
}
}
}
Java
52
10.
Java.
, Java
Streams. Java
/stream Internet,
.
. java.net
TCP/IP UDP. ,
: URL, URLConnection, Socket, and ServerSocket
TCP, DatagramPacket, DatagramSocket, and MulticastSocket
UDP.
URL
(
HTTP, HTTPS, FTP, ),
web browsers. URL Uniform Resource
Locator.
, www.mysite.net, URLs
:
http://www.mysite.net/
http://www.mysite.net/pages/article.html
URL
:
URL mysite = new URL("http://www.mysite.net/pages/");
URL mysiteArticle = new URL(mysite, "article.html");
URL mysiteForm = new URL(mysite, "form.html");
, URL
(constructor) :
URL(URL baseURL)
URL(URL baseURL, String relativeURL)
URL
string, Exception MalformedURLException.
try {
URL myURL = new URL(. . .)
} catch (MalformedURLException e) {
. . .
// Exception
. . .
}
Java
53
URL, URL
.
:
String getProtocol()
(http, ftp).
String getHost()
, ..
www.mysite.net.
String getFile()
String getPort()
( 80
http 21 ftp).
String getRef()
( '#').
/pages/article.html.
..
, URL.
import java.net.*;
import java.io.*;
public class ParseURL {
public static void main(String[] args) throws Exception {
URL aURL = new URL("http://java.sun.com:80/docs/books/"
+ "tutorial/index.html#DOWNLOADING");
System.out.println("protocol = " + aURL.getProtocol());
System.out.println("host = " + aURL.getHost());
System.out.println("filename = " + aURL.getFile());
System.out.println("port = " + aURL.getPort());
System.out.println("ref = " + aURL.getRef());
}
}
:
protocol = http
host = java.sun.com
filename = /docs/books/tutorial/index.html
port = 80
ref = DOWNLOADING
URLConnection
URL,
URLConnection, HTTP.
URL
' .
Java
54
URLConnection
URLConnection :
import java.net.*;
import java.io.*;
public class URLConnectionReader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
openConnection() URL,
URLConnection yc.
www.yahoo.com, Streams (.
). , BufferedReader
InputStream www.yahoo.com.
URLConnection InputStream
getInputStream() ,
.
URLConnection
, HTML Internet
server ( ).
browser, CGI (
Perl/PHP/ASP/),
HTML. POST (POST METHOD)
HTML. Java
URL,
. ,
:
URL (, URL)
URL ( URLConnection)
URLConnection
stream (OutputStream).
(input stream) CGI server.
stream .
Java
55
stream .
-
Sun Java. HTML
browser .
import java.io.*;
import java.net.*;
public class JavaSearch {
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.err.println("Usage: java JavaSearch <string>");
System.exit(1);
}
String msg = URLEncoder.encode(args[0], "ISO-8859-1");
URL baseurl = new URL("http://onesearch.sun.com/");
URL url = new URL(baseurl, "search/developers/index.jsp");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
PrintWriter out = new PrintWriter(
connection.getOutputStream());
out.println("qt=" + msg);
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
:
if (args.length != 1) {
System.err.println("Usage: java JavaSearch <string>");
System.exit(1);
}
String msg = URLEncoder.encode(args[0], UTF-8);
, UTF-8
msg ( String).
msg CGI (
Java
56
browser ),
.
URLEncoder.
URL,
, URLConnection
:
URL baseurl = new URL("http://onesearch.sun.com/");
URL url = new URL(baseurl, "search/developers/index.jsp");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
stream
PrintWriter:
PrintWriter out = new PrintWriter(c.getOutputStream());
(
CGI script) getOutputStream()
UnknownServiceException.
stream
server.
stream .
PrintStream ( ..
System.out):
out.println("qt=" + msg);
out.close();
println().
. Java
.
(.. sockets TCP/IP,
packets, )
.
CGI script ,
HTML ( browser).
InputStreamReader,
- ( readline()):
BufferReader in = new BufferedReader(
new InputStreamReader(c.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
(System.out)
.
Java
57
URL
, CopyFile. URL
CopyFile.
FileInputStream ,
URL URLConnection.
import java.net.*;
import java.io.*;
public class URLConnectionReader {
public static void main(String[] args) throws Exception {
URL from;
FileOutputStream fout;
int i;
try {
try {
from = new URL(args[0]);
} catch (MalformedURLException exc) {
System.out.println("Error opening URL: " + args[0]);
return;
}
try {
fout = new FileOutputStream(args[1]);
} catch (FileNotFoundException exc) {
System.out.println("Error opening output file: " + args[0]);
return;
}
// ,
// args[] exception.
} catch (ArrayIndexOutOfBoundsException exc) {
System.out.println("Usage: URLConnectionReader From To");
return;
}
URLConnection yc = from.openConnection();
InputStream fin = yc.getInputStream();
//
// :
int bufsize = 8192;
byte buffer[] = new byte[bufsize]; //
// 2
//
// blocks
try {
do {
i = fin.read(buffer);
if (i != -1)
Java
//
58
Sockets
sockets
TCP/IP, Internet,
. sockets
URLConnection, Java
(.. C/C++)
sockets streams. Java
Socket, socket (client)
ServerSocket, sockets
/ (server).
ServerSocket,
Socket.
server
server.
( EchoClient), server
echo. echo
.
7 (port 7).
EchoClient Echo server socket,
. server
client .
server
client. , FTP, HTTP ,
client server
(.. ).
EchoClient:
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("server", 7);
out = new PrintWriter(echoSocket.getOutputStream(), true);
Java
59
.
try.
Socket server PrintWriter BufferReader Socket.
echoSocket = new Socket("server", 7);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
Socket echoSocket.
Socket ,
.
server,
server .
, IP DNS
(FQDN). 7 ( echo).
PrintWriter
BufferReader Socket. Reader Writer
Unicode.
socket PrintWriter
BufferedReader.
.
loop while,
(System.in) ,
Java
60
BufferedReader.
socket PrintWriter:
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
readLine(),
(stdIn) socket (in).
readLine() server client.
, echo: .
endof-input. loop
:
out.close();
in.close();
stdIn.close();
echoSocket.close();
.
PrintWriter BufferedReader socket,
BufferedReader
socket, server.
. socket
streams .
,
echo.
server (
server). server
client
( )
. :
socket.
streams server.
streams.
sockets.
Java
61
11. (JDBC)
Java
Java
SQL (Oracle, DB2, MS SQL, MySQL, PostgreSQL, ODBC, ).
(
API, ) Java
API
, .
, . : )
(driver) ) .
.
, JDBC-ODBC,
:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
. ,
jdbc.DriverXYZ,
:
Class.forName("jdbc.DriverXYZ");
,
:
Connection con = DriverManager.getConnection(url,
myLogin", "myPassword");
,
url, .
JDBC-ODBC, url jdbc:odbc:.
(DSN) . ,
, ODBC
myBase url jdbc:odbc:myBase.
myLogin
myPassword, , ..
Fred Fl1ntst0n3. :
Java
62
JDBC ( Sun)
,
, jdbc:
(.. acme, url
jdbc:acme).
.
DriverManager ,
getConnection(),
JDBC.
. con.
.
BIKES
.
BIKES:
BIKE_NAME
Yamaha XT 500
SUP_ID
101
PRICE
SALES TOTAL
5.000,00 0
7.300,00 0
150
5.300,00 0
101
7.900,00 0
49
7.000,00 0
BMW FS 650
150
8.900,00 0
(BIKE_NAME)
VARCHAR ( 32 ).
(
) .
, SUP_ID, INTEGER.
, PRICE,
FLOAT. SQL NUMERIC DECIMAL
,
.
, SALES TOTAL,
, INTEGER.
, SUPPLIERS,
:
Java
63
SUP_ID
SUP_NAME
101
49
STREET
CITY
ZIP
313 13131
7
150 1
76767
10000
( , JDBC
.)
JDBC,
String. Java ( )
string ,
'+'.:
String createTableBikes = "CREATE TABLE BIKES " +
"(BIKE_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)";
JDBC
SQL JDBC
Statement. Statement SQL
,
.
Statement, executeQuery() SELECT
executeUpdate()
. Statement :
Statement stmt = con.createStatement();
stmt.executeUpdate("CREATE TABLE BIKES ( BIKE_NAME VARCHAR(32), SUP_ID
+ INTEGER, PRICE FLOAT, SALES INTEGER, TOTAL INTEGER)");
, stmt
executeUpdate().
String SQL BIKES,
:
stmt.executeUpdate(createTableBikes);
Java
64
BIKES
. executeUpdate()
SQL:
Statement stmt = con.createStatement();
stmt.executeUpdate ( "INSERT INTO BIKES " +
"VALUES ('Yamaha XT 500', 101, 5000, 0, 0)");
BIKES .
Statement
.
stmt.executeUpdate ( "INSERT
"VALUES
stmt.executeUpdate ( "INSERT
"VALUES
stmt.executeUpdate ( "INSERT
"VALUES
stmt.executeUpdate ( "INSERT
"VALUES
stmt.executeUpdate ( "INSERT
"VALUES
SUPPLIERS.
SELECT. ,
SQL :
SELECT * FROM BIKES
:
BIKE_NAME
--------------Yamaha XT 500
KTM Adventurer 650
Kawasaki KLE 500
Honda TransAlp 650
Susuki VStrom 650
BMW FS 650
SUP_ID
-----101
49
150
101
49
150
PRICE
------5000,00
7300,00
5300,00
7900,00
7000,00
8900,00
SALES
----0
0
0
0
0
0
TOTAL
----0
0
0
0
0
0
, :
SELECT BIKE_NAME, PRICE FROM BIKES
:
BIKE_NAME
--------------Yamaha XT 500
KTM Adventurer 650
Kawasaki KLE 500
Java
PRICE
------5000,00
7300,00
5300,00
65
7900,00
7000,00
8900,00
7100 :
SELECT BIKE_NAME, PRICE FROM BIKES WHERE PRICE < 7100
PRICE
------5000,00
5300,00
7000,00
SQL ,
SQL. Java
ResultSet JDBC.
ResultSet
,
executeUpdate()
, SELECT, executeQuery().
executeQuery()
ResultSet. executeQuery()
:
ResultSet rs = stmt.executeQuery(SELECT BIKE_NAME, PRICE FROM BIKES");
rs SELECT,
.
. JDBC 1.0
( ),
JDBC 2.0 3.0
. , 1.0
.
next
next() ResultSet.
next(), (cursor)
( ).
ResultSet ( SQL
executeQuery()). ResultSet
, next()
ResultSet.
Java
66
getXXX
,
.
, CREATE TABLE,
Java.
(..
encoding, ISO-8859-7, TIMESTAMP). Java
( ).
, BIKE_NAME
SELECT ( VARCHAR), getString()
ResultSet, PRICE getFloat().
executeQuery(), ResultSet,
next(), getXXX() .
,
.
String query = "SELECT BIKE_NAME, PRICE FROM BIKES";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String s = rs.getString("BIKE_NAME");
float n = rs.getFloat("PRICE");
System.out.println(s + "
" + n);
}
:
Yamaha XT 500
5000,0
KTM Adventurer 650
7300,0
Kawasaki KLE 500
5300,0
Honda TransAlp 650
7900,0
Susuki VStrom 650
7000,0
BMW FS 650
8900,0
JDBC getXXX()
.
,
ResultSet.
1, 2, .
:
String s = rs.getString(1);
float n = rs.getFloat(2);
,
.
JDBC SQL.
:
Java
67
SQL
getByte()
TINYINT
byte
getShort()
SMALLINT
getInt()
INTEGER
int
getLong()
BIGINT
long
getFloat()
REAL
getDouble()
FLOAT, DOUBLE
getBoolean()
BIT
getString()
CHAR, VARCHAR
getDate()
DATE
Date
getTime()
TIME
Time
getTimestamp
()
TIMESTAMP
Timestamp
boolean
getString
SQL (
SQL3). (
) String,
. .
Java
68
7 , Susuki VStrom
650, 4 BMW FS 650. SALES TOTAL
BIKES UPDATE SQL.
:
String updateString = "UPDATE BIKES SET SALES = 7 " +
"WHERE BIKE_NAME LIKE 'Susuki VStrom 650'";
stmt.executeUpdate(updateString);
VStrom,
String updateString = "UPDATE BIKES SET SALES = 4 " +
"WHERE BIKE_NAME LIKE 'BMW FS 650'";
stmt.executeUpdate(updateString);
BMW.
BIKES :
BIKE_NAME
--------------Yamaha XT 500
KTM Adventurer 650
Kawasaki KLE 500
Honda TransAlp 650
Susuki VStrom 650
BMW FS 650
SUP_ID
-----101
49
150
101
49
150
PRICE
------5000,00
7300,00
5300,00
7900,00
7000,00
8900,00
SALES
----0
0
0
0
7
4
TOTAL
----0
0
0
0
0
0
TOTAL .
:
String updateString = "UPDATE BIKES SET TOTAL = TOTAL + 75";
stmt.executeUpdate(updateString);
TOTAL (
Susuki VStrom
BMW FS).
:
String query = "SELECT BIKE_NAME, SALES, TOTAL FROM BIKES " +
"WHERE SALES > 0";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String name = rs.getString(BIKE_NAME);
int sold = rs.getInt(SALES);
int tot = rs.getInt(TOTAL);
System.out.println(name+: Sold + sold +
bikes this week, + tot + in total);
}
:
Susuki VStrom 650: Sold 7 bikes this week, 7 in total
BMW FS 650: Sold 4 bikes this week, 4 in total
Java
69
12.; ;
, . Java ,
. ,
.
Applets, Swing
SWT, JavaBeans, Servlets, Java3D, Java, .
.
, URL
. .
, .
Java
70
Online:
http://java.sun.com/docs/books/tutorial/
Java
71