Java-exempel - självstudie
Här följer ett antal programexempel som börjar med Hello World och sedan lägger till
mer och mer i samma program Varje exempel ska (hoppas jag) vara ett fullständigt och
körbart exempelt Varje exempel har strukturen:
filnamn
---------------------------------klassdefinition
Följande är rubrikerna till exemplen för att man lättare ska hitta bland dem senare.
1 - Hello world
2 - Lokal variabel i en metod
3 - Anrop till en annan metod inom samma klass
4 - Metodanrop med argument
5 - Egna klasser. Åtkomst av instansvariabler (datafält)
6 - Skapa flera objekt (personer).
Rita lådor och pilar av hur det ser ut i minnet!
7 - Varje person har en egen metod för att skriva sitt eget namn
8 - Metoder för att sätta egna värden till instansvariabler (datafält)
9 - Konstruktor för att sätta egna värden till instansvariabler.
(mats använder konstruktorn, eva använder setNamn)
10 - Alla personer kan ha en mamma. (has-a relation)
11 - Man kan ha flera konstruktorer i samma klass.
Här har Person en konstruktor som sätter namnet och en annan
konstruktor som sätter både mamma och namnet.
12 - Nu ska varje mamma även känna till alla sina barn.
13 - Personen ska själv uppdatera barn-listan när man får ett nytt barn
(Här måste man använda this. "Tröskel-exempel!").
14 - Exakt som 13 men definiera en metod addBarn som lägger in ett barn i sin egen
barnlista och ser till att detta barn får rätt mamma. (Vits: Kan lägga in barn när som
helst!).
Använd addBarn i konstruktorn.
15 - Skapa flera barn till Eva och skriv ut alla hennes barn
16 - skrivAllaNamn ska skriva ut alla namn, dvs
"mitt" namn och barnens och barnbarnens etc...
17 - En generalisering:
I stället för att skriva namn ska man "göra något"
Byt skrivnamn mot görNågot
Byt skrivBarnensNamn mot barnenGörNågot
Byt skrivAllaNamn mot allaGörNågot
- 1 -
1 - Hello world
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
System.out.println("Jag heter Mats");
}
}
Anm.: När man startar ett java-program, anger man (via DOS
eller Unix-kommandot java klassnamn) den klass man ska
starta med. I den klassen måste det finnas en metod main
som måste vara av typ public static void och som måste ha
ett argument (en sträng array) så som det står ovan.
Tillsvidare räcker det att veta att det ska vara så.
- 2 -
2 - Lokal variabel i en metod
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
String namn;
namn = "Mats";
System.out.println("Jag heter " + namn);
}
}
- 3 -
3 - Anrop till en annan metod inom samma klass
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
String namn;
namn = "Mats";
System.out.println("Jag heter " + namn);
}
}
Anm.: main måste vara static (se anmärkning program 1).
Alla metoder som main anropar direkt måste även de
vara static (en lag för static-metoder).
Därför måste även initiera vara static.
Tillsvidare räcker det att veta att det är så.
- 4 -
4 - Metodanrop med argument
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera("Mats");
}
public static void initiera(String namn){
System.out.println("Jag heter " + namn);
}
}
- 5 -
5 - Egna klasser. Åtkomst av instansvariabler (datafält)
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person mats;
mats = new Person();
mats.namn = "Mats Nordström";
System.out.println("Jag heter " + mats.namn);
}
}
Person.java
----------------------------------------------------------public class Person{
public String namn;
}
- 6 -
6 - Flera personer. (Rita lådor och pilar avhur det ser ut i minnet!)
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person mats = new Person();
Person eva = new Person();
Person vem;
mats.namn = "Mats Nordström";
eva.namn = "Eva Andersson";
System.out.println("Jag heter " + mats.namn);
System.out.println("Jag heter " + eva.namn);
vem = mats;
System.out.println("Jag heter " + vem.namn);
vem = eva;
System.out.println("Jag heter " + vem.namn);
}
}
Person.java
----------------------------------------------------------public class Person{
public String namn;
}
- 7 -
7 - Varje person har en egen metod för att skriva sitt namn
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person mats = new Person();
Person eva = new Person();
Person vem;
mats.namn = "Mats Nordström";
eva.namn = "Eva Andersson";
vem = mats;
mats.skrivnamn();
eva.skrivnamn();
vem.skrivnamn();
vem = eva;
vem.skrivnamn();
}
}
Person.java
----------------------------------------------------------public class Person{
public String namn;
public void skrivnamn(){
System.out.println("Jag heter " +
this.namn);//Anm
}
}
Anm. i Person är namn och this.namn precis samma sak!
Det skulle lika gärna kunna stå:
System.out.println("Jag heter " + namn);
- 8 -
8 - Metoder för att sätta egna värden till instansvariabler (datafält)
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person mats = new Person();
Person eva = new Person();
Person vem;
mats.setNamn("Mats Nordström");
eva.setNamn("Eva Andersson");
vem = mats;
mats.skrivnamn();
eva.skrivnamn();
vem.skrivnamn();
vem = eva;
vem.skrivnamn();
}
}
Person.java
----------------------------------------------------------public class Person{
public String namn;
public void setNamn(String s){
this.namn = s;
// eller bara namn = s;
}
public void skrivnamn(){
System.out.println("Jag heter " + this.namn);
// eller("Jag heter " + namn);
}
}
- 9 -
Anm. I fortsättningen kommer de egna fälten och metoderna att refereras utan this.
- 10 -
9 - Konstruktor för att sätta egna värden till instansvariabler.
(mats använder konstruktorn, eva använder setNamn)
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person mats = new Person("Mats Nordström");
Person eva = new Person();
Person vem;
vem = eva;
mats.skrivnamn();
eva.skrivnamn();
vem.skrivnamn();
eva.setNamn("Eva Andersson");
eva.skrivnamn();
vem.skrivnamn();
}
}
Person.java
----------------------------------------------------------public class Person{
public String namn;
Person(){
}
Person(String s){
namn = s;
}
public void setNamn(String s){
namn = s;
}
public void skrivnamn(){
System.out.println("Jag heter " + namn);
- 11 -
}
}
- 12 -
10 - Alla personer kan ha en mamma. Eva är Mats´s mamma
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person mats = new Person("Mats Nordström");
Person eva = new Person("Eva Andersson");
mats.mamma = eva;
mats.mamma.skrivnamn();
}
}
Person.java
----------------------------------------------------------public class Person{
public String namn;
public Person mamma;
Person(){
}
Person(String s){
namn = s;
}
public void setNamn(String s){
namn = s;
}
public void skrivnamn(){
System.out.println("Jag heter " + namn);
}
}
- 13 -
11 - Man kan ha flera konstruktorer i samma klass.
Här har Person en konstruktor som sätter namnet och en annan
konstruktor som sätter både mamma och namnet
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person eva = new Person("Eva Andersson");
Person mats = new Person(eva,"Mats Nordström");
// eva är mats mamma
mats.mamma.skrivnamn();
}
}
mats
eva
Person
namn
"Mats Nordström"
Person
"Eva Andersson"
mamma
null
namn
mamma
Bild av minnet program 10 och 11
namn
Person.java
----------------------------------------------------------public class Person{
public String namn;
public Person mamma;
Person(){
- 14 -
}
Person(String s){
namn = s;
}
Person(Person mor, String s){
mamma = mor;
namn = s;
}
public void setNamn(String s){
namn = s;
}
public void skrivnamn(){
System.out.println("Jag heter " + this.namn);
}
}
- 15 -
12 - Nu ska varje mamma även känna till alla sina barn
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person eva = new Person("Eva Andersson");
Person mats = new Person(eva,"Mats Nordström");
// Lägg nu in mats i evas barn-lista
eva.barn.addElement(mats);
// Rita en bild av hur det ser ut i minnet nu!!
}
}
Anm.
I java 2.0 kan addElement bytas mot add
och elementAt bytas mot get
Person.java
----------------------------------------------------------import java.util.*; // Behövs för att vi använder Vector
public class Person{
public String namn;
public Person mamma;
// Mitt eget namn
// Referens till min mamma
public Vector barn = new Vector();
// Barnen, här som en Vector
Person(){
}
Person(String s){
namn = s;
}
Person(Person mor, String s){
mamma = mor;
namn = s;
}
public void setNamn(String s){
namn = s;
}
public void skrivnamn(){
System.out.println("Jag heter " + namn);
- 16 -
}
}
- 17 -
13 - Personen ska själv uppdatera barn-listan när man får ett nytt barn
(Här måste man använda this. "Tröskel-exempel!")
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person eva = new Person("Eva Andersson");
Person mats = new Person(eva,"Mats Nordström");
// Rita en bild av hur det ser ut i minnet nu!!
}
}
Person.java
----------------------------------------------------------import java.util.*; // Behövs för att vi använder Vector
public class Person{
public String namn;
public Person mamma;
// Mitt eget namn
// Referens till min mamma
public Vector barn = new Vector();
// Barnen, här som en Vector
Person(){
}
Person(String s){
namn = s;
}
Person(Person mor, String s){
namn = s;
mamma = mor;
// Sätter min mamma
// lägg nu in mig (this) hos min mammas barn
// Här måste man använda this
mor.barn.addElement(this);
}
public void setNamn(String s){
this.namn = s;
}
public void skrivnamn(){
System.out.println("Jag heter " + namn);
}
- 18 -
}
- 19 -
14 - Exakt som 13 men definiera en metod addBarn som lägger in ett barn i sin egen
barnlista och ser till att detta barn får rätt mamma. (Vits: Kan lägga in barn när som
helst!).
Använd addBarn i konstruktorn.
MittProgram.java
---------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public
static void initiera(){
Person eva = new Person("Eva Andersson");
Person mats = new Person(eva,"Mats Nordström");
// Rita en bild av hur det ser ut i minnet nu!!
}
}
Person.java
-----------------------------------------------------------
import java.util.*;
public class Person{
public String namn;
public Person mamma;
// Mitt eget namn
// Referens till min mamma
public Vector barn = new Vector();
// Barnen, här som en Vector
Person(){
}
Person(String s){
namn = s;
}
Person(Person mor, String s){
namn = s;
// lägg in mig (this) hos min mammas barn
// Även här måste man använda this
mor.addBarn(this);
}
public void setNamn(String s){
this.namn = s;
}
public void skrivnamn(){
System.out.println("Jag heter " + namn);
}
public void addBarn(Person b){// ska lägga in b i min barnlista
barn.addElement(b);
b.mamma = this;
// Lägg b i min barnlista
// Se till att jag blir barnets mamma!
// (Även här måste man använda this!)
}
}
- 20 -
15 - Skapa flera barn till Eva och skriv ut alla hennes barn
MittProgram.java
-------------------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person
Person
Person
Person
eva
mats
oskar
pelle
=
=
=
=
new
new
new
new
Person("Eva Andersson");
Person(eva,"Mats Nordström");
Person(eva,"Oskar Oskarsson");
Person(eva,"Per Persson");
eva.skrivBarnensNamn();
}
}
Person.java
-----------------------------------------------------------
import java.util.*;
public class Person{
public String namn;
public Person mamma;
// Mitt eget namn
// Referens till min mamma
public Vector barn = new Vector();
// Barnen, här som en Vector
Person(){}
Person(String s){
namn = s;
}
Person(Person mor, String s){
namn = s;
mor.addBarn(this);
//lägg in mig hos mammas barn
}
public void setNamn(String s){
namn = s;
}
public void skrivBarnensNamn(){
if(barn.size()>0){
System.out.println("Mina barn är:");
}
for (int i = 0; i < barn.size(); i++) {
Person b = (Person)barn.elementAt(i);
b.skrivnamn();
}
// type-cast!
}
public void skrivnamn(){
System.out.println("Jag heter " + namn);
}
public void addBarn(Person b){// ska lägga in b i min barnlista
barn.addElement(b);
b.mamma = this;
// Lägg b i min barnlista
// Se till att jag blir barnets mamma!
// (Här måste man använda this!)
}
}
- 21 -
16 -
skrivAllaNamn ska skriva ut alla namn, dvs
"mitt" namn och barnens och barnbarnens etc...
-------------------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public static void initiera(){
Person eva
= new Person("Eva Andersson");
Person mats = new Person(eva,"Mats Nordström");
Person oskar = new Person(eva,"Oskar Oskarsson");
Person pelle = new Person(eva,"Per Persson");
Person lillen= new Person(pelle,"Pelles lilla lillen");
eva.skrivAllaNamn ();
}
}
Person.java
-----------------------------------------------------------
import java.util.*;
public class
public
public
public
Person{
String namn;
// Mitt eget namn
Person mamma;
// Referens till min mamma
Vector barn = new Vector();
// Barnen, här som en Vector
Person(){}
Person(String s){namn = s;}
Person(Person mor, String s){
mor.addBarn(this);
//lägg in mig hos mammas barn
namn = s;
}
public void setNamn(String s){
namn = s;
}
public void skrivAllaNamn(){
skrivnamn();
skrivBarnensNamn();
}
public void skrivBarnensNamn(){
if(barn.size()>0){
System.out.println("Mina barn är:");
}
for (int i = 0; i < barn.size(); i++) {
Person b = (Person)barn.elementAt(i);
b.skrivAllaNamn();
}
// type-cast!
}
public void skrivnamn(){
System.out.println("Jag heter " + namn);
}
public void addBarn(Person b){// ska lägga in b i min barnlista
barn.addElement(b);
b.mamma = this;
// Lägg b i min barnlista
// Se till att jag blir barnets mamma!
// (Här måste man använda this!)
}
}
- 22 -
17 - En generalisering:
I stället för att skriva namn ska man "göra något"
Byt skrivnamn mot görNågot
Byt skrivBarnensNamn mot barnenGörNågot
Byt skrivAllaNamn mot allaGörNågot
-------------------------------------------------------------------------------public class MittProgram{
public static void main(String[] args){
initiera();
}
public
static void initiera(){
Person
Person
Person
Person
Person
eva
=
mats =
oskar =
pelle =
lillen=
new
new
new
new
new
Person("Eva Andersson");
Person(eva,"Mats Nordström");
Person(eva,"Oskar Oskarsson");
Person(eva,"Per Persson");
Person(pelle,"Pelles lilla lillen");
eva.allaGörNågot();
}
}
Person.java
-----------------------------------------------------------
import java.util.*;
public class
public
public
public
Person{
String namn;
// Mitt eget namn
Person mamma;
// Referens till min mamma
Vector barn = new Vector();
// Barnen, här som en Vector
Person(){}
Person(String s){namn = s;}
Person(Person mor, String s){
mor.addBarn(this);
//lägg in mig hos mammas barn
namn = s;
}
public void setNamn(String s){
namn = s;
}
public void allaGörNågot(){
görNågot();
barnenGörNågot();
}
public void barnenGörNågot(){
for (int i = 0; i < barn.size(); i++) {
Person b = (Person)barn.elementAt(i);
b.allaGörNågot();
}
}
// type-cast!
public void görNågot(){
// Här finns nu kod som fixar att personen "gör något"
}
public void addBarn(Person b){// ska lägga in b i min barnlista
barn.addElement(b);
// Lägg b i min barnlista
b.mamma = this;
// Se till att jag blir barnets mamma!
// (Här måste man använda this!)
}
}
- 23 -
mats
eva
Person
namn
Person
"Mats Nordström"
"Eva Andersson"
mamma
null
namn
mamma
Bild av minnet program 10 och 11
mats
eva
Person
namn
"Mats Nordström"
Person
"Eva Anderss on"
mamma
null
barn
namn
mamma
barn
Vector
Vector
empty
Bild av minnet program 12, 13, 14
- 24 -