Úvod do programovacích jazyku˚ (java) · package chess; import java.lang.*; import...

Post on 07-Aug-2020

7 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Úvod do programovacíchjazyku (Java)

Michal Kratky

michal.kratky@vsb.cz

Katedra informatiky

A1004

http://www.cs.vsb.cz/kratky

Uvod do programovacch jazyku (Java) – p. 1/82

Zápocet a zkouška

Zápocet >= 21b (ze 40 možných). Dvasemestrální projekty.

Predmet ukoncen klasifikovaným zápoctem.Min. 30b z 60 možných.

Uvod do programovacch jazyku (Java) – p. 2/82

JDK a vývojováprostredí

http://java.sun.com – JDK – JavaPlatforma, aktuální verze 1.5

http://www.eclipse.org – Eclipse,vývojové prostredí

http://jikes.sourceforge.net/ –rychlý prekladac

Uvod do programovacch jazyku (Java) – p. 3/82

Literatura

B. Eckel: Thinking in Java. 2002,http://www.mindview.net/Books/TIJ

Sun MicroSystems: Sun Developer Network.2005, http://java.sun.com

R. Szturc: Introduction to Programming(Java). Department of Computer Science,VŠB – Technical University of Ostrava, 2004,http://www.cs.vsb.cz/java/index.html

Uvod do programovacch jazyku (Java) – p. 4/82

Example 1

public class Example1

{

public static void main(String[] args)

{

int i = 5;

int j = i + 3;

System.out.println("i=" + i + ", j=" +

j + "\n");

}

}

i=5, j=8Uvod do programovacch jazyku (Java) – p. 5/82

Example 2

public class Example2

{

public static void main(String[] args)

{

int i = 6, j = 3;

int div = i / j;

int mod = i % j;

System.out.println("div = " + div +

", mod = " + mod + "\n");

}

}

div = 2, mod = 0Uvod do programovacch jazyku (Java) – p. 6/82

Example 3

public class Example3

{

public static void main(String[] args)

{

int i = 6;

System.out.println("i = " + (-i));

System.out.println("i = " + (++i));

System.out.println("i = " + (i++));

System.out.println("i = " + i);

}

}

i = -6 i = 7 i = 7 i = 8Uvod do programovacch jazyku (Java) – p. 7/82

Example 4

public class Example4

{

public static void main(String[] args)

{

float a = (float)9.0;

if (a / 3 == 3.0)

{

System.out.println("ok");

}

}

}Uvod do programovacch jazyku (Java) – p. 8/82

Example 5

public class Example5

{

public static void main(String[] args)

{

int value = 1 << 2;

System.out.println(value);

}

}

4

00000001 << 2 = 00000100

Uvod do programovacch jazyku (Java) – p. 9/82

Complement –negative numbers

-1, 1 = 00000001

˜00000001 = 11111110 + 1 = 11111111 = 255

-1 >> 2 = -1

-1 << 2 = -4 (11111011 + 1 = 11111100)

-1 >>> 30 = 3

Uvod do programovacch jazyku (Java) – p. 10/82

Example 6

public class Example6 {

public static void main(String[] args)

{

boolean val = true;

double res = 0.0;

res1 = (val == true) ? 1.0 : 3.0;

res2 = (val) ? 1.0 : 3.0;

System.out.println(res1 + "," + res2);

}

}

1.0, 1.0

Uvod do programovacch jazyku (Java) – p. 11/82

Example 7

public class Example7

{

public static void main(String[] args)

{

double val = 3.14;

int res = (int)val;

System.out.println(res);

}

}

3

Uvod do programovacch jazyku (Java) – p. 12/82

Example 7.5

public class Example7DOT5

{

public static void main(String[] args)

{

int res = 0, a = 2, b = 1;

if ((res = a + b) > 2)

{

System.out.print("ok");

}

}

}

ok

Uvod do programovacch jazyku (Java) – p. 13/82

Example 8

public class Example8

{

public static void main(String[] args)

{

int i = 0;

for ( ; i < 8 ; i++)

{

int val = 1 << i;

System.out.println(val);

}

}

}

1 2 4 8 16 32 64 128 ... Uvod do programovacch jazyku (Java) – p. 14/82

Example 9

public class Example9 {

public static void main(String[] args) {

int val = 1;

int i = 0;

while (val > 0)

{

System.out.print(val + ", ");

val <<= 1;

}

...

1, 2, 4, 8, 16, 32, 64, ... , 1073741824

Uvod do programovacch jazyku (Java) – p. 15/82

Example Triangle1/11

import java.math.*;

public class Coordinate {

public static int DEFAULT_DIMENSION = 2;

private int mDimension;

private double mValues[];

public Coordinate(int dimension) {

mDimension = dimension;

mValues = new double[mDimension];

}Uvod do programovacch jazyku (Java) – p. 16/82

Example Triangle2/11

public void SetValue(int order, double value){

if (order >= 0 && order < mDimension) {

mValues[order] = value;

}

}

public double GetValue(int order) {

if (order >= 0 && order < mDimension) {

return mValues[order];

}

else {

return -1.0;

}

}Uvod do programovacch jazyku (Java) – p. 17/82

Example Triangle3/11

public int GetDimension()

{

return mDimension;

}

public void Print()

{

for (int i = 0 ; i < mDimension ; i++)

{

System.out.print(mValues[i] + ",");

}

System.out.println(" ");

}Uvod do programovacch jazyku (Java) – p. 18/82

Example Triangle4/11

public static double Distance(Coordinate c1,

Coordinate c2) {

double distance = 0.0;

for (int i=0 ; i < c1.GetDimension() ; i++)

{

double diff=c2.GetValue(i)-c1.GetValue(i);

distance += diff * diff;

}

return Math.sqrt(distance);

}

}

Uvod do programovacch jazyku (Java) – p. 19/82

Example Triangle5/11

public class Triangle {

public static final int VERTEXES_NUMBER = 3;

private Coordinate mVertexes[];

public Triangle() {

int dimension = 2;

mVertexes = new Coordinate[VERTEXES_NUMBER];

for (int i = 0 ; i < VERTEXES_NUMBER ; i++)

{

mVertexes[i] = new Coordinate(dimension);

}

}Uvod do programovacch jazyku (Java) – p. 20/82

Example Triangle6/11

public Coordinate GetVertex(int order)

{

if (order >=0 && order < VERTEXES_NUMBER)

{

return mVertexes[order];

}

else

{

return null;

}

}

Uvod do programovacch jazyku (Java) – p. 21/82

Example Triangle7/11

public double Perimeter()

{

return

Coordinate.Distance(mVertexes[0],

mVertexes[1]) +

Coordinate.Distance(mVertexes[1],

mVertexes[2]) +

Coordinate.Distance(mVertexes[2],

mVertexes[0]);

}

}

Uvod do programovacch jazyku (Java) – p. 22/82

Example Triangle8/11

import java.io.*;

public class TriangleRun {

private Triangle mTriangle;

...

public static void main(String args[])

{

new TriangleRun().Run();

}

}Uvod do programovacch jazyku (Java) – p. 23/82

Example Triangle9/11

public TriangleRun()

{

mTriangle = new Triangle();

}

public int Run()

{

byte array[] = new byte[1024];

for (int i=0 ; i < Triangle.VERTEXES_NUMBER ;

{

Uvod do programovacch jazyku (Java) – p. 24/82

Example Triangle10/11

for (int j=0 ; j<mTriangle.GetVertex(i)

.GetDimension() ; j++) {

try {

System.in.read(array);

String str = new String(array);

double value = Double.parseDouble(str);

mTriangle.GetVertex(i).SetValue(j, value);

} catch (IOException ioe) {

System.out.println( "IO error:" + ioe );

}

}

Uvod do programovacch jazyku (Java) – p. 25/82

Example Triangle11/11mTriangle.GetVertex(i).Print();

}

System.out.println("perimeter: " +

mTriangle.Perimeter());

return 0;

}

Uvod do programovacch jazyku (Java) – p. 26/82

Chess – Files1/5

<chess>

<gui>

<model>

<view>

Board.java

ChessRun.java

Uvod do programovacch jazyku (Java) – p. 27/82

Chess – Compilation& Run – 2/5

d:\projs> javac chess\ChessRun.java

d:\projs>set PATH=%PATH%;d:\...\jdk1.5.0_03\bin

d:\projs>set CLASSPATH=%CLASSPATH%;.

d:\projs> java chess.ChessRun

Uvod do programovacch jazyku (Java) – p. 28/82

Chess – ChessRun3/5

/**

* Class of the chess game

*

* @author Michal Kratky

* @created 7.11.2005

*/

package chess;

public class ChessRun {

public static void main(String args[]) {

new Board().Run();

}

}Uvod do programovacch jazyku (Java) – p. 29/82

Chess – Board I4/5

package chess;

import java.lang.*;

import chess.model.*;

public class Board

{

public static int FIELD_NUMBER = 8;

private ChessPiece mGameArray[][];

Uvod do programovacch jazyku (Java) – p. 30/82

Chess – Board II4/5

/**

* Board class constructor

*

* @param value Description of the Parameter

*/

public Board()

{

mGameArray =

new ChessPiece[FIELD_NUMBER][FIELD_NUMBER];

}

...

}Uvod do programovacch jazyku (Java) – p. 31/82

Chess – ChessPiece5/5

/**

* ChessPiece - parent of the all chess pieces

*

* @author Michal Kratky

* @created 7.11.2005

*/

package chess.model;

abstract public class ChessPiece

{

...Uvod do programovacch jazyku (Java) – p. 32/82

Chess – jar file – 6/d:\projs> jar cvfm mymanifest chess.jar chess/*

file: mymanifest

Main-Class: chess.ChessRun

d:\projs>java -jar chess.jar

Uvod do programovacch jazyku (Java) – p. 33/82

GUI Example -Waterwolf 1/11

WWW browser, HTTP client

Uvod do programovacch jazyku (Java) – p. 34/82

Waterwolf 2/11/**

* Author: Michal Kratky

* Project: WaterwolfForm

* File: WaterwolfForm.java

* Data: 11.12.2005

*/

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.net.*;

import java.io.*;Uvod do programovacch jazyku (Java) – p. 35/82

Waterwolf 3/11public class WaterwolfForm extends JFrame

implements ActionListener

{

public final static int BUFFER_LENGTH =1024;

public final static int TEXT_AREA_ROWS = 20;

public final static int TEXT_AREA_COLUMNS=100;

JTextField mTfUrl = new JTextField("");

JButton mBtnGo = new JButton("Go!");

JTextArea mTextArea = new JTextArea("",

TEXT_AREA_ROWS, TEXT_AREA_COLUMNS);

Uvod do programovacch jazyku (Java) – p. 36/82

Waterwolf 4/11public WaterwolfForm(String strUrl)

{

JLabel lblUrl = new JLabel("URL:");

JPanel northPanel = new JPanel(

new BorderLayout());

mTfUrl.setText(strUrl);

northPanel.add(BorderLayout.WEST, lblUrl);

northPanel.add(BorderLayout.CENTER, mTfUrl);

northPanel.add(BorderLayout.EAST, mBtnGo);

Uvod do programovacch jazyku (Java) – p. 37/82

Waterwolf 5/11JPanel mainPanel = new JPanel();

mainPanel.add(BorderLayout.NORTH,

northPanel);

JScrollPane scrollPane = new JScrollPane(

mTextArea);

getContentPane().add(BorderLayout.NORTH,

northPanel);

getContentPane().add(BorderLayout.CENTER,

scrollPane);

Uvod do programovacch jazyku (Java) – p. 38/82

Waterwolf 6/11// set gui

pack();

setTitle("Waterwolf 0.0001");

// add listeners

mBtnGo.addActionListener(this);

}

Uvod do programovacch jazyku (Java) – p. 39/82

Waterwolf 7/11/** Button events. */

public void actionPerformed(ActionEvent e)

{

System.out.println(mTfUrl.getText());

StringBuffer line = new StringBuffer(

BUFFER_LENGTH);

try

{

URL url = new URL(mTfUrl.getText());

InputStream in = url.openStream();

BufferedInputStream bufIn =

new BufferedInputStream(in);Uvod do programovacch jazyku (Java) – p. 40/82

Waterwolf 8/11// Repeat until end of file

int ch;

while ((ch = bufIn.read()) != -1)

{

line.append((char)ch);

if (ch == ’\n’) {

System.out.print(line);

mTextArea.append(line.toString());

line.delete(0, line.length());

}

}

}Uvod do programovacch jazyku (Java) – p. 41/82

Waterwolf 9/11catch (MalformedURLException mue)

{

JOptionPane.showMessageDialog(this,

"Invalid URL", "Error",

JOptionPane.ERROR_MESSAGE);

}

catch (IOException ioe)

{

JOptionPane.showMessageDialog(this, ioe,

"I/O Error", JOptionPane.ERROR_MESSAGE);

}

}Uvod do programovacch jazyku (Java) – p. 42/82

Waterwolf 10/11/** Run Waterwolf. */

public static void main(String []args)

{

String strUrl = "";

if (args.length == 1)

{

strUrl = args[0];

}

new WaterwolfForm(strUrl).setVisible(true);

}

}

Uvod do programovacch jazyku (Java) – p. 43/82

Waterwolf 11/11

java WaterwolfForm

"http://www.cs.vsb.cz:80/kratky"

Uvod do programovacch jazyku (Java) – p. 44/82

Applet Example -ChessApplet 1/10

Uvod do programovacch jazyku (Java) – p. 45/82

ChessApplet 2/10/**

* Author: Michal Kratky

* Project: ChessApplet

* File: ChessApplet.java

* Data: 11.12.2005

*/

import javax.swing.*;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

Uvod do programovacch jazyku (Java) – p. 46/82

ChessApplet 3/10public class ChessApplet extends JApplet

implements MouseListener

{

public static final int GAME_FIELD_POSX = 0;

public static final int GAME_FIELD_POSY = 32;

public static final int GAME_FIELD_SIZE = 32;

JLabel mLblLocation = new JLabel("");

Image mMainImage;

Uvod do programovacch jazyku (Java) – p. 47/82

ChessApplet 4/10public void init() {

JPanel panel = new JPanel();

panel.add(BorderLayout.WEST,

new JLabel("Location:"));

panel.add(BorderLayout.EAST, mLblLocation);

mMainImage = createImage(400, 400);

drawGameField();

getContentPane().add(BorderLayout.NORTH,

panel);

addMouseListener(this);

}Uvod do programovacch jazyku (Java) – p. 48/82

ChessApplet 5/10public void paint(Graphics g) {

g.drawImage(mMainImage, GAME_FIELD_POSX+0,

GAME_FIELD_POSY+0, this);

}

public void update(Graphics g) {

paint(g);

}

public void mouseClicked(MouseEvent e) {

mLblLocation.setText(e.getPoint().getX() +

", " + e.getPoint().getY());

repaint();

}Uvod do programovacch jazyku (Java) – p. 49/82

ChessApplet 6/10public void mouseExited(MouseEvent e)

{ }

public void mouseEntered(MouseEvent e)

{ }

public void mouseReleased(MouseEvent e)

{ }

public void mousePressed(MouseEvent e)

{ }

Uvod do programovacch jazyku (Java) – p. 50/82

ChessApplet 7/10/**

* Draw chess game field.

*/

public void drawGameField() {

Graphics g = mMainImage.getGraphics();

g.setColor(Color.BLACK);

g.drawRect(0, 0, 8*GAME_FIELD_SIZE,

8*GAME_FIELD_SIZE);

int posx = 0;

int posy = 0;

boolean oddFlag = true;Uvod do programovacch jazyku (Java) – p. 51/82

ChessApplet 8/10for (int i = 0 ; i < 8 ; i++) {

if (!oddFlag)

posx = 0;

else

posx = GAME_FIELD_SIZE;

for (int j = 0 ; j < 4 ; j++) {

g.fillRect(posx, posy, GAME_FIELD_SIZE,

GAME_FIELD_SIZE);

posx += 2*GAME_FIELD_SIZE;

}

posy += GAME_FIELD_SIZE;

oddFlag = !oddFlag;

}}}Uvod do programovacch jazyku (Java) – p. 52/82

ChessApplet 9/10chessapplet.html

<html>

<body>

<applet code="ChessApplet.class"

width="400" height="400"/>

</body>

</html>

Uvod do programovacch jazyku (Java) – p. 53/82

ChessApplet 10/10

Uvod do programovacch jazyku (Java) – p. 54/82

Model/View Example- Counter 1/12

Uvod do programovacch jazyku (Java) – p. 55/82

Counter 2/12

public interface CounterType

{

public void increment();

public void decrement();

}

Uvod do programovacch jazyku (Java) – p. 56/82

Counter 3/12import java.util.*;

public class Counter extends Observable

implements CounterType

{

private int mValue = 0;

public Counter(Observer o)

{

addObserver(o);

}

Uvod do programovacch jazyku (Java) – p. 57/82

Counter 4/12public void setValue(int value)

{

this.mValue = value;

setChanged();

notifyObservers(new Integer(mValue));

}

public int getValue()

{

return mValue;

}

Uvod do programovacch jazyku (Java) – p. 58/82

Counter 5/12public void increment()

{

setValue(getValue() + 1);

}

public void decrement()

{

setValue(getValue() - 1);

}

}

Uvod do programovacch jazyku (Java) – p. 59/82

Counter 6/12import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class CounterGUI extends JFrame

implements Observer, ActionListener

{

protected JButton mBtnInc =

new JButton("Increment");

Uvod do programovacch jazyku (Java) – p. 60/82

Counter 7/12protected JButton mBtnDec =

new JButton("Decrement");

protected JLabel mLblLabel =

new JLabel("Counter Value");

protected JTextField mTfValue =

new JTextField("0");

protected CounterType mCounter =

new Counter(this);

Uvod do programovacch jazyku (Java) – p. 61/82

Counter 8/12public CounterGUI()

{

setLayout(new BorderLayout(15,15));

setTitle("Counter");

JPanel north = new JPanel();

north.setLayout(new BorderLayout());

north.add(BorderLayout.NORTH, mLblLabel);

north.add(BorderLayout.SOUTH, mTfValue);

Uvod do programovacch jazyku (Java) – p. 62/82

Counter 9/12JPanel south = new JPanel();

south.setLayout(new GridLayout(1,2,15,15));

south.add(mBtnInc);

south.add(mBtnDec);

getContentPane().add(BorderLayout.NORTH,

north);

getContentPane().add(BorderLayout.SOUTH,

south);

pack();

mBtnInc.addActionListener(this);

mBtnDec.addActionListener(this);

}Uvod do programovacch jazyku (Java) – p. 63/82

Counter 10/12public void actionPerformed(ActionEvent e)

{

if (e.getSource() == mBtnInc)

{

mCounter.increment();

}

else if (e.getSource() == mBtnDec)

{

mCounter.decrement();

}

}

Uvod do programovacch jazyku (Java) – p. 64/82

Counter 11/12public void update(Observable c, Object arg)

{

mTfValue.setText(arg.toString());

}

public static void main(String []args)

{

new CounterGUI().setVisible(true);

}

}

Uvod do programovacch jazyku (Java) – p. 65/82

Example 12/12

Uvod do programovacch jazyku (Java) – p. 66/82

Counter - AdaptermBtnInc.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e)

{

mCounter.increment();

}

});

mBtnDec.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e)

{

mCounter.decrement();

}

});Uvod do programovacch jazyku (Java) – p. 67/82

Programování vláken1/12 – Motivace

Uvod do programovacch jazyku (Java) – p. 68/82

Programování vláken2/12 – Úvod

Vlákno (thread) reprezentuje samostatnouposloupnost príkazu provádených voperacním systému.

Vlákno x proces. Vlákno je odlehcenýmprocesem.

Stav vlákna (Thread.State): nové (new),bežící (runnable), ukoncené (terminated), . . . .

V operacním systému je možné nastavitprioritu vlákna.

Uvod do programovacch jazyku (Java) – p. 69/82

Programování vláken3/12

Pro implementaci vlákna využijeme trídujava.lang.Thread.

Možnosti:Trída dedí ze trídy Thread.Trída implementuje rozhraníjava.lang.Runnable.

Uvod do programovacch jazyku (Java) – p. 70/82

Programování vláken4/12

public class ComputeThread extends Thread

{

String mId;

double mParameter;

public ComputeThread(String id, double prm)

{

mId = id;

mParameter = prm;

}

Uvod do programovacch jazyku (Java) – p. 71/82

Programování vláken5/12

public void run()

{

System.out.println("Thread " + mId + " run");

double value = 2.34;

for (int i = 1 ; i < Integer.MAX_VALUE ; i++)

{

value += (double)i * mParameter;

}

System.out.println("Thread: " + mId +

", Value: " + value);

}Uvod do programovacch jazyku (Java) – p. 72/82

Programování vláken6/12

public static void main(String []args)

{

new ComputeThread("1", 1.1).start();

new ComputeThread("2", 1.2).start();

new ComputeThread("3", 1.3).start();

}

}

Uvod do programovacch jazyku (Java) – p. 73/82

Programování vláken7/12

Pri sekvencním spouštenívýpoctu (4 x DualCoreOpteron 1.8GHz): 45s.Pri využití vláken: 15s.Notebook Intel Pentium M1.7GHz: 200s.

Uvod do programovacch jazyku (Java) – p. 74/82

Programování vláken8/12

public class ComputeRunnable

implements Runnable

{

...

public void run()

{

...

}

Uvod do programovacch jazyku (Java) – p. 75/82

Programování vláken9/12

public static void main(String []args)

{

ComputeRunnable cr1 =

new ComputeRunnable("1", 1.1);

new Thread(cr1).start();

// new ComputeThread("1", 1.1).start();

...

}

}

Uvod do programovacch jazyku (Java) – p. 76/82

Programování vláken10/12 – Trída Thread

Thread.sleep() – uspání vlákna.

wait(), notify(), notifyAll() – metody prosynchronizaci vláken.

setPriority(int priority):Thread. MIN_PRIORITY <= priority <=Thread. MAX_PRIORITY.

Uvod do programovacch jazyku (Java) – p. 77/82

Programování vláken11 – Synchronizace

Java jako vícevláknový systém se musí starato zabránení modifikace stejného objektu vícevlákny najednou.

Kód (blok nebo metoda), který nesmí býtprováden najednou se nazývá kritická sekce.

Príkaz synchronized oznacuje kritickousekci.

Objekt je uzamknut dokud je provádenakritická sekce.

Uvod do programovacch jazyku (Java) – p. 78/82

Programování vláken12 – Synchronizace

public class DataStorage

{

private int contents;

private boolean available = false;

public synchronized int get(int who)

{

// DataStorage locked

...

// DataStorage unlocked

}

}

Uvod do programovacch jazyku (Java) – p. 79/82

Generické datovétypy

List intList = new LinkedList();

intList.add(new Integer(34));

Integer x = (Integer) intList.iterator()

.next();

int value = x.intValue();

Porovnej s

List<Integer> intList =

new LinkedList<Integer>();

intList.add(new Integer(34));

Integer x = intList.iterator().next();

int value = x.intValue();

Uvod do programovacch jazyku (Java) – p. 80/82

Generické datovétypy – Definice

public interface List<E>

{

void add(E x);

Iterator<E> iterator();

}

public interface Iterator<E>

{

E next();

boolean hasNext();

}

Uvod do programovacch jazyku (Java) – p. 81/82

Další Javatechnologie

Datová vrstva: JDBC.

XML technologie: SAX a DOM.

Webové aplikace: Servlet, JSP.

Distribuované aplikace: RMI, CORBA.

Uvod do programovacch jazyku (Java) – p. 82/82

top related