[WikiDyd] [TitleIndex] [WordIndex

Wprowadzenie do języka Java

Historia

[http://www.java.com/en/javahistory/ Historia Javy wg firmy Sun]

OAK, projekt Green, applety, netscape, Java2, Java 1.5 W 1990 roku w firmie Sun rozpoczęto prace nad projektem Green, którego celem było opracowanie oprogramowania do inteligentnych urządzeń RTV i AGD (telewizja interaktywna). W 1991 roku w ramach tego projektu opracowano pierwsze oprogramowanie pod interpreterem języka OAK (Object Application Kernel) w systemie Green-OS dla urządzenia *7 (star-seven) - inteligentnego pilota. Głównym autorem języka był [http://blogs.sun.com/roller/page/jag James Gosling]. W 1994/95 (?) język został przemianowany na Java, gdyż okazało się, że nazwa OAK jest jest już zastrzeżona. [http://ils.unc.edu/blaze/java/javahist.html Pierwsze lata.]

http://www.iem.pw.edu.pl/~jstar/o/aduke.gif Duke - maskotka projektu Green

W roku 1994, wobec braku zainteresowania przemysłu elektronicznego firma Sun wstrzymała prace nad projektem Green. Twórcy Javy postanowili jednak zainteresować tym językiem producentów przeglądarek WWW, gdyż sądziłi, że pozwoli ona tworzyć bardziej interesujące, interaktywne strony. W tym celu stworzyli przeglądarkę WebRunner, której nazwę zmieniono potem na Hotjava i która potrafiła interpretować strony zawierające kod w Javie. Hotjava została zresztą napisana w j. Java.

http://www.iem.pw.edu.pl/~jstar/o/cup.gif Hotjava została zaprezentowana w czasie konferencji SunWorld'95, a na jesieni tegoż roku firma Netscape zdecydowała się włączyć obsługę appletów (małych programów w Javie) do swojej przegladarki. W styczniu 1996 roku pojawił Netscape Navigator z Javą.

Kolejne wersje języka to: ([http://www.javarss.com/java-timeline-10years.html Java Timeline])

Własności języka

Przenośność i bezpieczeństwo: bytecode, maszyna wirtualna

Obiektowość: klasa jako podstawowa jednostka języka

Prostota: bez wielokrotnego dziedziczenia, interfejsy, klasy w pojedynczych plikach

Nowoczesność: obiektowość, wielowątkowość, wyjątki, programowanie rozproszone, applety, JSP

Prosty program (Hello World)

Jest to dość kiepski przykład tego, jak wygląda program w Javie - takich rzeczy raczej się w Javie nie pisze, ale od czegoś trzeba zacząć.

   1 class Echo {
   2   public static void main( String [] args ) {
   3     System.out.println( "Java Echo class" );
   4     for( int i= 0; i < args.length; i++ )
   5       System.out.println( args[i] );
   6   }
   7 }

Wniosek, jaki z tego programu wypływa to w Javie wszystko jest klasą.

Uruchamiamy klasę, a nie program.

Jak uruchamiamy?

Kompilacja:

$ javac Echo.java 

Powstaje Echo.class

Uruchomienie:

$ java Echo ala ma kota
Java Echo class
ala
ma
kota

Prosty, ale sensowny program

Kalkulator [http://pl.wikipedia.org/wiki/ONP ONP]

   1 /** ONP - kalkulator wyrażeń w Odwrotnej Notacji Polskiej
   2    @version 1.20 2005-10-27
   3    @author Jacek Starzyński
   4 */
   5                                                                                                             
   6 /** DoubleStack - stos liczb double - prosta, ale nienajlepsza implementacja
   7 */
   8 class DoubleStack {
   9   private double [] s= new double [1000];
  10   private int sp= 0;
  11                                                                                                             
  12   double pop() {
  13     return s[--sp];
  14   }
  15                                                                                                             
  16   void push( double x ) {
  17     s[sp++]= x;
  18   }
  19 }
  20 
  21 /** RevPolishNotationParser - parser wyrażeń w Odwrotnej Notacji Polskiej
  22 */
  23 class RevPolishNotationParser {
  24   private String expr;
  25                                                                                                             
  26   RevPolishNotationParser( ) {
  27     expr= "";
  28   }
  29                                                                                                             
  30   RevPolishNotationParser( String expr ) {
  31     this.expr = expr;
  32   }
  33                                                                                                             
  34   void addSymbols( String s ) {
  35     expr = expr + " " + s;
  36   }
  37                                                                                                             
  38   double value() {
  39     DoubleStack s= new DoubleStack();
  40                                                                                                             
  41     String [] symbols= expr.split( " +" );
  42                                                                                                             
  43     for( int i= 0; i < symbols.length; i++ ) {
  44       if( symbols[i].matches( " *" ) ) {
  45         continue;
  46       } else if( symbols[i].equals( "+" ) ) {
  47         s.push( s.pop() + s.pop() );
  48       } else if( symbols[i].equals( "*" ) ) {
  49         s.push( s.pop() * s.pop() );
  50       } else if( symbols[i].equals( "-" ) ) {
  51         double op= s.pop();
  52         s.push( s.pop() - op );
  53       } else if( symbols[i].equals( "/" ) ) {
  54         double op= s.pop();
  55         s.push( s.pop() / op );
  56       } else {
  57         try {
  58           s.push( Double.parseDouble( symbols[i] ) );
  59         } catch( NumberFormatException e ) {
  60           System.out.println( e );
  61           return 0;
  62         }
  63       }
  64     }
  65                                                                                                             
  66     return s.pop();
  67   }
  68 }
  69 
  70 /** ONP - klasa główna - tester do RevPolishNotationParser
  71 */
  72 class ONP {
  73   public static void main( String [] args ) {
  74     RevPolishNotationParser p= new RevPolishNotationParser();
  75     for( int i= 0; i < args.length; i++ ) {
  76       p.addSymbols( args[i] );
  77     }
  78     System.out.println( p.value() );
  79   }
  80 }

Kompilujemy:

$ javac ONP.java

I mamy:

$ ls
DoubleStack.class  ONP.class  ONP.java  RevPolishNotationParser.class

- jak widać, każda klasa została skompilowana do osobnego pliku, o nazwie <nazwaklasy>.class

Uruchomić możemy tylko klasę ONP, bo pozostałe nie posiadają funkcji main:

$ java ONP 2 2 + 3 -
1.0
$ java RevPolishNotationParser
Exception in thread "main" java.lang.NoSuchMethodError: main

2015-09-23 06:44