Java LanguageAan de slag met Java Language


Opmerkingen

De programmeertaal Java is ...

  • Algemeen doel : het is ontworpen om te worden gebruikt voor het schrijven van software in een breed scala van toepassingsdomeinen en mist gespecialiseerde functies voor een specifiek domein.

  • Op klassen gebaseerd : de objectstructuur wordt gedefinieerd in klassen. Klasse-instanties hebben altijd die velden en methoden die zijn opgegeven in hun klassendefinities (zie Klassen en objecten ). Dit in tegenstelling tot niet op klassen gebaseerde talen zoals JavaScript.

  • Statisch getypeerd : de compiler controleert tijdens het compileren of variabeletypes worden gerespecteerd. Als een methode bijvoorbeeld een argument van het type String , moet dat argument in feite een string zijn wanneer de methode wordt aangeroepen.

  • Objectgeoriënteerd : de meeste dingen in een Java-programma zijn klasse-instanties, dat wil zeggen bundels van status (velden) en gedrag (methoden die op gegevens werken en de interface van het object met de buitenwereld vormen).

  • Draagbaar : het kan op elk platform met javac worden gecompileerd en de resulterende klassebestanden kunnen op elk platform met een JVM worden uitgevoerd.

Java is bedoeld om applicatie-ontwikkelaars "één keer te laten schrijven, overal" (WORA) te laten werken, wat betekent dat gecompileerde Java-code kan worden uitgevoerd op alle platforms die Java ondersteunen zonder dat hercompilatie nodig is.

Java-code is gecompileerd in bytecode (de .class bestanden) die op hun beurt worden geïnterpreteerd door de Java Virtual Machine (JVM). In theorie zou bytecode gemaakt door een Java-compiler op elke JVM op dezelfde manier moeten werken, zelfs op een ander soort computer. De JVM kan (en in real-world programma's zal) ervoor kiezen om in native machine-opdrachten de vaak uitgevoerde delen van de bytecode te compileren. Dit wordt "Just-in-time (JIT) compilatie" genoemd.

Java-edities en versies

Er zijn drie "edities" van Java gedefinieerd door Sun / Oracle:

  • Java Standard Edition (SE) is de editie die is ontworpen voor algemeen gebruik.
  • Java Enterprise Edition (EE) voegt een reeks faciliteiten toe voor het bouwen van "enterprise grade" -diensten in Java. Java EE wordt afzonderlijk behandeld .
  • Java Micro Edition (ME) is gebaseerd op een subset van Java SE en is bedoeld voor gebruik op kleine apparaten met beperkte bronnen.

Er is een apart onderwerp over Java SE / EE / ME-edities .

Elke editie heeft meerdere versies. De Java SE-versies worden hieronder vermeld.

Java installeren

Er is een apart onderwerp over Java installeren (standaardversie) .

Java-programma's compileren en uitvoeren

Er zijn afzonderlijke onderwerpen over:

Wat is het volgende?

Hier zijn links naar onderwerpen om de Java-programmeertaal te blijven leren en begrijpen. Deze onderwerpen zijn de basisprincipes van de Java-programmering om u op weg te helpen.

testen

Hoewel Java geen ondersteuning biedt voor tests in de standaardbibliotheek, zijn er externe bibliotheken die zijn ontworpen om tests te ondersteunen. De twee populairste bibliotheken voor het testen van eenheden zijn:

anders

  • Ontwerppatronen voor Java worden behandeld in ontwerppatronen .
  • Programmering voor Android wordt behandeld in Android .
  • Java Enterprise Edition-technologieën worden behandeld in Java EE .
  • De Oracle JavaFX-technologieën worden behandeld in JavaFX .

1. In het gedeelte Versies is de (gratis) einddatum waarop Oracle stopt met het publiceren van verdere updates van Java SE op zijn openbare downloadsites. Klanten die voortdurende toegang nodig hebben tot kritieke bugfixes en beveiligingsfixes en algemeen onderhoud voor Java SE kunnen op lange termijn ondersteuning krijgen via Oracle Java SE Support .

versies

Java SE-versie Codenaam Einde levensduur (gratis 1 ) Publicatiedatum
Java SE 9 (Early Access) Geen toekomst 2017/07/27
Java SE 8 Spin toekomst 2014/03/18
Java SE 7 Dolfijn 2015/04/14 2011-07-28
Java SE 6 Mustang 2013/04/16 2006-12-23
Java SE 5 Tijger 2009-11-04 2004-10-04
Java SE 1.4 Merlin voorafgaand aan 2009-11-04 2002/02/06
Java SE 1.3 Torenvalk voorafgaand aan 2009-11-04 2000/05/08
Java SE 1.2 Speelplaats voorafgaand aan 2009-11-04 1998/12/08
Java SE 1.1 Geen voorafgaand aan 2009-11-04 1997/02/19
Java SE 1.0 Eik voorafgaand aan 2009-11-04 1996/01/21

Uw eerste Java-programma maken

Maak een nieuw bestand in uw teksteditor of IDE met de naam HelloWorld.java . Plak dit codeblok vervolgens in het bestand en sla het op:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
 

Ren live op Ideone

Opmerking: Om Java dit als een public class te laten herkennen (en geen compilatie-fout te veroorzaken ), moet de bestandsnaam hetzelfde zijn als de klassenaam (in dit voorbeeld HelloWorld ) met de extensie .java . Er zou ook een modifier voor public toegang voor moeten staan.

Naamgevingsconventies bevelen aan dat Java-klassen beginnen met een hoofdletter en in kamelen- indeling (waarbij de eerste letter van elk woord een hoofdletter is). De conventies bevelen af tegen onderstrepingstekens ( _ ) en dollartekens ( $ ).

Om te compileren, opent u een terminalvenster en navigeert u naar de directory van HelloWorld.java :

cd /path/to/containing/folder/
 

Opmerking: cd is het terminalcommando om van map te veranderen.

Voer javac gevolgd door de bestandsnaam en extensie als volgt in:

$ javac HelloWorld.java
 

Het is vrij gebruikelijk dat de fout 'javac' is not recognized as an internal or external command, operable program or batch file. zelfs wanneer u de JDK hebt geïnstalleerd en het programma kunt uitvoeren vanaf IDE ex. eclipse enz. Omdat het pad niet standaard aan de omgeving wordt toegevoegd.

Als u dit op Windows krijgt, probeer het dan eerst op te zoeken naar uw javac.exe pad, het is waarschijnlijk in uw C:\Program Files\Java\jdk(version number)\bin . Probeer het dan met hieronder.

$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java
 

Eerder toen we javac , was dit hetzelfde als het bovenstaande commando. Alleen in dat geval wist uw OS waar javac woonde. Dus laten we het nu vertellen, op deze manier hoef je niet elke keer het hele pad te typen. We zouden dit aan onze PATH moeten toevoegen

De omgevingsvariabele PATH in Windows XP / Vista / PATH bewerken:

  • Configuratiescherm ⇒ Systeem ⇒ Geavanceerde systeeminstellingen
  • Ga naar het tabblad "Geavanceerd" ⇒ Omgevingsvariabelen
  • Scroll in "Systeemvariabelen" naar beneden om "PATH" te selecteren ⇒ Bewerken

Je kunt dit niet ongedaan maken, dus wees voorzichtig. Kopieer eerst uw bestaande pad naar Kladblok. Om vervolgens de exacte PATH naar uw javac bladert u handmatig naar de map waarin javac zich bevindt en klikt u op de adresbalk en kopieert u deze. Het zou er ongeveer uit moeten zien als c:\Program Files\Java\jdk1.8.0_xx\bin

Plak dit in het veld "Variabele waarde" VOOR alle bestaande mappen, gevolgd door een puntkomma (;). VERWIJDER GEEN bestaande vermeldingen.

Variable name  : PATH
Variable value : c:\Program Files\Java\jdk1.8.0_xx\bin;[Existing Entries...]
 

Nu zou dit moeten zijn opgelost.

Voor Linux-gebaseerde systemen probeer hier .

Opmerking: De opdracht javac roept de Java-compiler op.

De compiler genereert vervolgens een bytecode- bestand met de naam HelloWorld.class dat kan worden uitgevoerd in de Java Virtual Machine (JVM) . De Java programmeertaal compiler, javac , leest bronbestanden geschreven in de Java programmeertaal en compileert ze in bytecode klasse bestanden. Optioneel kan de compiler ook annotaties verwerken die zijn gevonden in bron- en klassebestanden met behulp van de Pluggable Annotation Processing API. De compiler is een opdrachtregelprogramma, maar kan ook worden opgeroepen met behulp van de Java Compiler API.

Als u uw programma uit te voeren, geeft u java gevolgd door de naam van de klasse die het bevat main methode ( HelloWorld in ons voorbeeld). Merk op hoe de .class wordt weggelaten:

$ java HelloWorld
 

Opmerking: met de opdracht java wordt een Java-toepassing uitgevoerd.

Dit wordt uitgevoerd naar uw console:

Hallo Wereld!

Je hebt met succes je allereerste Java-programma gecodeerd en gebouwd!

Opmerking: Om voor Java commando's ( java , javac , etc) om erkend te worden, moet u ervoor zorgen dat:

  • Een JDK is geïnstalleerd (bijv. Oracle , OpenJDK en andere bronnen)
  • Uw omgevingsvariabelen zijn correct ingesteld

U moet een compiler ( javac ) en een door uw JVM geleverde executor ( java ) gebruiken. Als u wilt weten welke versies u hebt geïnstalleerd, voert u java -version en javac -version op de opdrachtregel. Het versienummer van uw programma wordt in de terminal afgedrukt (bijv. 1.8.0_73 ).


Een kijkje in het Hello World-programma

Het programma "Hello World" bevat een enkel bestand, dat bestaat uit een HelloWorld klasse definitie is een main methode, en een verklaring in de main methode.

public class HelloWorld {
 

De class zoekwoord begint de klasse definitie voor een klasse met de naam HelloWorld . Elke Java-toepassing bevat ten minste één klassedefinitie ( meer informatie over klassen ).

    public static void main(String[] args)  {
 

Dit is een ingangspuntmethode (gedefinieerd door de naam en handtekening van de public static void main(String[]) ) waarmee de JVM uw programma kan uitvoeren. Elk Java-programma zou er een moeten hebben. Het is:

  • public : dit betekent dat de methode ook overal van buiten het programma kan worden aangeroepen. Zie Zichtbaarheid voor meer informatie hierover.
  • static : dit betekent dat het bestaat en op zichzelf kan worden uitgevoerd (op klassenniveau zonder een object te maken).
  • void : betekent dat het geen waarde retourneert. Opmerking: dit is in tegenstelling tot C en C ++ waar een retourcode zoals int wordt verwacht (Java's manier is System.exit() ).

Deze hoofdmethode accepteert:

Bijna alles is vereist voor een Java entry point-methode.

Niet-verplichte onderdelen:

  • De naam args is een variabelenaam, dus het kan alles worden genoemd wat je wilt, hoewel het meestal args wordt genoemd.
  • Of het parametertype een array ( String[] args ) of Varargs ( String... args ) is, maakt niet uit omdat arrays in varargs kunnen worden doorgegeven.

Opmerking: een enkele applicatie kan meerdere klassen bevatten die een entry-point ( main ) methode bevatten. Het beginpunt van de toepassing wordt bepaald door de klassenaam die als argument wordt doorgegeven aan het java commando.

Binnen de hoofdmethode zien we de volgende verklaring:

        System.out.println("Hello, World!");
 

Laten we deze verklaring element per element uitsplitsen:

Element Doel
System dit geeft aan dat de volgende expressie de klasse System java.lang uit het pakket java.lang .
. dit is een "puntoperator". Puntoperators geven u toegang tot een klaslid 1 ; dwz zijn velden (variabelen) en zijn methoden. In dit geval kunt u met deze puntoperator verwijzen out statische veld binnen de klasse System .
out dit is de naam van het statische veld van het type PrintStream binnen de System met de standaarduitvoerfunctionaliteit.
. dit is een andere puntoperator. Deze dot-operator biedt toegang tot de println methode binnen de variabele out .
println dit is de naam van een methode binnen de klasse PrintStream. Deze methode print met name de inhoud van de parameters in de console en voegt daarna een nieuwe regel in.
( dit haakje geeft aan dat een methode wordt gebruikt (en geen veld) en begint met de parameters die worden doorgegeven aan de println methode.
"Hello, World!" dit is de letterlijke tekenreeks die als parameter wordt doorgegeven aan de methode println . De dubbele aanhalingstekens aan elk uiteinde begrenzen de tekst als een tekenreeks.
) dit haakje geeft de sluiting aan van de parameters die worden doorgegeven aan de println methode.
; deze puntkomma markeert het einde van de instructie.

Opmerking: elke instructie in Java moet eindigen met een puntkomma ( ; ).

De methode body en class body worden dan gesloten.

    }  // end of main function scope
}      // end of class HelloWorld scope 
 

Hier is nog een voorbeeld dat het OO-paradigma demonstreert. Laten we een voetbalteam modelleren met één (ja, één!) Lid. Er kan meer zijn, maar we zullen dat bespreken als we bij reeksen komen.

Laten we eerst onze Team definiëren:

public class Team {
    Member member;
    public Team(Member member) {  // who is in this Team?
        this.member = member;  //  one 'member' is in this Team!
    }
}
 

Laten we nu onze Member definiëren:

class Member {
    private String name;
    private String type;
    private int level; // note the data type here
    private int rank; // note the data type here as well

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
}
 

Waarom gebruiken we hier private ? Nou, als iemand je naam wilde weten, moet hij je dat rechtstreeks vragen, in plaats van je hand in je zak te steken en je kaart voor sociale zekerheid te verwijderen. Deze private doet zoiets: het voorkomt dat externe entiteiten toegang krijgen tot uw variabelen. U kunt alleen terugkeren private leden via getter functies (zie hieronder).

Na het allemaal samen te voegen en de getters en hoofdmethode toe te voegen zoals eerder besproken, hebben we:

public class Team {
    Member member;
    public Team(Member member) {  
        this.member = member;  
    }

    // here's our main method
    public static void main(String[] args) {
       Member myMember = new Member("Aurieel", "light", 10, 1); 
       Team myTeam = new Team(myMember); 
       System.out.println(myTeam.member.getName());
       System.out.println(myTeam.member.getType());
       System.out.println(myTeam.member.getLevel());
       System.out.println(myTeam.member.getRank());
    }
}

class Member {
    private String name;
    private String type;
    private int level;
    private int rank;

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
    
    /* let's define our getter functions here */
    public String getName() { // what is your name?
        return this.name; // my name is ...
    }
   
    public String getType() { // what is your type?
        return this.type; // my type is ...
    }
    
    public int getLevel() { // what is your level?
        return this.level; // my level is ...
    }
    
    public int getRank() { // what is your rank?
        return this.rank; // my rank is
    }
}
 

Output:

Aurieel
light
10
1
 

Ren op ideone

Nogmaals, de main methode binnen de Test is het toegangspunt tot ons programma. Zonder de main methode, kunnen we de Java Virtual Machine (JVM) van waar te beginnen uitvoering van het programma niet vertellen.


1 - Omdat de klasse HelloWorld weinig verband houdt met de klasse System , heeft deze alleen toegang tot public gegevens.