Avatar billede madseksperten Nybegynder
07. november 2011 - 14:28 Der er 13 kommentarer og
2 løsninger

java begynder hjælp

Hej Eksperter.

Jeg er lige begyndt på java programmering, men mangler simpelthen en basal og visuel forståelse af hvordan dette sprog fungerer. Sådan som jeg har forstået det er java objekt orienteret programmering. Betyder det så at når jeg opretter en "class", så skaber jeg et nyt objekt? Når jeg skal kalde den metode, sker det så altid inde i objektet, eller kalder man det også fra et andet objekt også?

Endvidere er jeg også i tvivl om hvad præcist en metode er, og hvordan den ser ud

Hvis jeg fx opretter en class:

public class test {

}

Er dette så et objekt?

Håber i kan hjælpe mig.

Mvh Mads
Avatar billede arne_v Ekspert
07. november 2011 - 14:45 #1
public class Test {
}

er en klasse.

Test o = new Test();

opretter et objekt som er en instans af den klasse.
Avatar billede arne_v Ekspert
07. november 2011 - 14:47 #2
En metode er en operation (i andre programmerings sprog taler man om funktioner, subroutiner, procedurer etc.).

Hvis det er en ikke static metode er det en operation paa instansen.

Hvis det er en static metode er det bare en operation.
Avatar billede arne_v Ekspert
07. november 2011 - 14:52 #3
Hvis du begynder at arbejde med det saa faar de lidt abstrakte begreber mening.

Har du erfaring med andre programmerings sprog?

(hvis ja saa kan jeg muligvis "oversaette" lidt)
Avatar billede danco Nybegynder
07. november 2011 - 15:03 #4
Som Arne er inde på. Når du definerer en klasse giver du dig selv mulighed for at oprette et objekt af den klasse. Den vil så have klassenavnet som datatype.

Et lille et eksempel:

public class Person  {
  private String name;
  private int age;

  public Person(String name, int age) {
      this.name = name;
      this.age = age;
  }
  public String getName(){
    return this.name;
  }
  public int getAge(){
      return this.age;
  }
}

På ovenstående klasse kan du så gøre følgende:

Person p = new Person("Hans-peter",52);
System.out.println(p.getName()+" er "+p.getAge()+" år gammel");

Som Arne også er inde på kan du lave metoder som du kan kalde direkte på en klasse, det vil sige en klasse som du ikke har et objekt af. Dette kaldes statiske metoder som du definerer på følgende måde:

public static Person createNewPerson(String name, int age) {
  Person personObj = new Person(name,age);
  return personObj;
}
Hvis vi skal lave ovenstående eksempel om til at bruge den statiske metode vil det være:

Person p = Person.createNewPerson("Peter",45);
System.out.println(p.getName()+" er "+p.getAge()+" år gammel");

Ovenstående lille eksempel giver ikke så meget mening i praksis men kan være udemærket til at forstå forskellen på statiske og ikke-statiske metoder i en klasse.
Generelt er det god semantik at erklærer alle klasse variable for private og så lave metoder til at ændre og/eller tilgå disse variable via gettere/settere metoder. At en variabel er private betyder i al sin enkelthed at det kun er denne ene klasse der kan tilgå variablen. Metoder kan du også erklærer for private og det vil så igen betyde at det kun er klassen der kan gøre brug af den.

Jeg håber at ovenstående giver lidt mening og hjælper dig videre.
Avatar billede madseksperten Nybegynder
07. november 2011 - 16:37 #5
Hejsa.

Tusind tak for hjælpen indtil videre. For at tage eksemplet som danco brugte:

public class Person  {
  private String name;
  private int age;

  public Person(String name, int age) {
      this.name = name;
      this.age = age;
  }
  public String getName(){
    return this.name;
  }
  public int getAge(){
      return this.age;
  }
}



public class Person
private String name;
private int age;

Betyder det at der skal tilføjes feltvariabler hver gang man opretter 1 objekt, eller er det kun til konstruktøren man bruger dem?

public Person(String name, int age) {
      this.name = name;
      this.age = age;
  }

Er dette ikke en konstruktør? Skal alle objekter have en konstrutør? Jeg tænker bare en konstruktør gør vel opjektet klar til brug?

Arne skriver:

Test o = new Test(); -> er et nyt objekt. Vil det så sige at hvis jeg laver:

Test o = new Test();
Test o = new Test1();
Test o = new Test2();
Test o = new Test3();
Test o = new Test4();

Så har jeg oprettet 5 objekter som skal have et metodekald, som evt kunne se sådan ud:

public String getName(){
    return this.name;
  }

eller er jeg helt forkert på den?

Mvh Mads

Ps jeg har kun lavet html og css, så det hjælper mig desværre ikke noget her :-/
Avatar billede madseksperten Nybegynder
07. november 2011 - 16:45 #6
Hvis man kigger på følgende screenshot af mit BlueJ program:

http://imageshack.us/photo/my-images/408/nytbillede1.png/

Så havde jeg egentligt tænkt at fx "Article" eller "Journal" var opjekter, og inde i den skrev man metoder til hvad det pågældende opjekt skulle gøre.

Ved ikke hvad i siger til det?
Avatar billede danco Nybegynder
07. november 2011 - 16:51 #7
Alle klasser har som udgangspunkt en tom constructor / konstruktør. Det vigtige at forstå her er det er construtoren der returnerer dit objekt. Det vil sige at det er her du skal sørge for at alle dine variable indeholder en værdi, hvordan du gør det er egentlig ligemeget, det kunne være at hente ud fra en database eller læse fra en XML fil eller noget helt andet. Så i contructoren skal du sørge for at angive de parametre der skal bruges til at klargøre objektet.

Omkring det du siger til Arnes kommentarer.
Syntaxen hedder:
datatype variabelnavn = new klassenavn

Så hvis du vil have mange objekter af samme datatype (klassenavn) gør du således:

Test t = new Test();
Test t1 = new Test();
Test t2 = new Test();

Du har nu 3 objekter er Test klassen. Et metodekalk på en klasse er så "bare"
variabelnavn.metodenavn

altså som i:
Person p = new Person("Navn",10);
p.getAge();

når du skriver: p.getAge() får du tallet 10 tilbage som du kan ligge i en anden variabel eller udskrive til konsollen eller lign.
Avatar billede arne_v Ekspert
07. november 2011 - 17:01 #8
public Person(String name, int age) {
      this.name = name;
      this.age = age;
  }

er en constructor.

Du behoever ikke selv at lave en constructor men saa laver Java selv en bag ryggen paa dig der ser ud som:

public Person() {
    super();
}

Test o = new Test();
Test o = new Test1();
Test o = new Test2();
Test o = new Test3();
Test o = new Test4();

vil give fejl fordi du kan ikke erklaere o 5 gange men:

Test o = new Test();
Test o1 = new Test1();
Test o2 = new Test2();
Test o3 = new Test3();
Test o4 = new Test4();

vil oprette 5 objekter (af hver sin klasse).

Det er klassen som definerer metoderne som man saa kan kalde paa objekter.
Avatar billede madseksperten Nybegynder
07. november 2011 - 17:18 #9
Ok, så hvis jeg skal lave mit eget lille konstrueret eksempel:

public lass Person {

  public static void main(String[] args) {
  private String name, lastname;
  private int age;

    public Person(String name, String lastname, int age) {
    this name = name
    this lastname = lastname;
    this age = age

    //Nu har jeg så oprettet mine tre objekter som nu skal   
      kaldes internt
    }

    public String toString() {

    return (name + lastname + age);   
    }
}
}


//  public static void main(String[] args) {
    private String name, lastname;
    private int age;

      public Person(String name, String lastname, int age) {
      this name = name
      this lastname = lastname;
      this age = age

Her har jeg nu oprettet mine objekter via feltvariabler, og sat en tilstand på dem.

Nu skal jeg til at give mine objekter en opførsel:

public String toString() {

    return (name + lastname + age);

Her kalder jeg mine objekter.

Er jeg ved at være der?
Avatar billede arne_v Ekspert
07. november 2011 - 17:25 #10
din main er vist placeret forkert, men ellers er du paa sporet
Avatar billede danco Nybegynder
07. november 2011 - 17:29 #11
public static void main(String[] args) {
        Person p = new Person("Peter",45);
        System.out.println(p);
    }

nu vil du i konsollen kunne se formatet fra din toString()
Avatar billede madseksperten Nybegynder
07. november 2011 - 17:38 #12
ok godt, jeg er ihvertfald nu blevet lidt klogere. Jeg dykker ned og får mine fingre beskidte i java her.

mange tak for hjælpen, og læg venligst et svar

Mvh Mads
Avatar billede danco Nybegynder
07. november 2011 - 17:41 #13
Ellers er der altid mennesker herinde der står klar med kyndig vejledning :)

Du får et svar fra mig.
Avatar billede arne_v Ekspert
07. november 2011 - 17:58 #14
og et svar fra mig
Avatar billede madseksperten Nybegynder
09. november 2011 - 15:32 #15
Super :-)

Til andre eventuelle læsere har jeg købt bogen:

"Objects first with java a practical introduction using BlueJ"

Denne forklarer tingene rigtig rigtig godt for en nybegynder, og den lettere øvede.

Endnu engang tal for hjælpen:-)

mvh Mads
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester