Java Language Zelfstudie
Aan de slag met Java Language
Zoeken…
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:
- Java-broncode compileren
- Java-implementatie inclusief het maken van JAR-bestanden
- Java-applicaties uitvoeren
- Het Classpath
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.
- Primitieve gegevenstypen in Java
- Operators op Java
- Strings in Java
- Basis besturingsstructuren in Java
- Klassen en objecten in Java
- Arrays in Java
- Java-codestandaarden
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!");
}
}
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 zoalsint
wordt verwacht (Java's manier isSystem.exit()
).
Deze hoofdmethode accepteert:
- Een array (meestal
args
) vanString
s wordt doorgegeven als argumenten aan de hoofdfunctie (bijvoorbeeld van opdrachtregelargumenten ).
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 meestalargs
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
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.