Algoritmer og datastrukturer
Java
Nyheter om Java

All kode i kompendiet er laget med Java. Gjeldende versjon (august 2021) er Java 16. Wikipedia har en oversikt som viser hvordan Java har utviklet seg fra versjon 1.0 som kom i 1996, til dagens versjon 16. Versjon 17 er annonsert å komme i september 2021, men det tar normalt en del tid før utviklingsverktøyene støtter den versjonen.

Hver ny versjon av Java har mange nyheter, men de fleste av dem er på områder som ikke er relevante for elementær programmering. I de siste versjonene av Java har det blitt vanlig i en versjon å ta med forslagskode (preview). Den kan man eksperimentere med. I neste versjon kommer det så oppdatert kode (second preview) basert på reaksjonene. Så til slutt kommer den endelige koden i versjonen deretter. I Java 15 gjelder dette f.eks. "Text Blocks" og i Java 16 "Records".

En "Text Block" gjør det mye enklere å konstruere en tegnstreng av en tekst som strekker seg over flere linjer. Les mer om "Text Blocks" her.

"Record" er den mest interessante nyheten. Det er en minimalisert klasse. Den skal kun inneholde variabler og ikke funksjonalitet i form av egne metoder (bortsett fra de som er innebygd). Men først et eksempel på hvordan det var tidligere:

Anta at vi skal operere med en student definert ved hjelp av fornavn og etternavn. Da lager vi en klasse med dette som variabler. I tillegg til en konstruktør må også metodene equals() og hashCode() lages. Det må til for at studenter f.eks. skal legges i en eller annen datastruktur. Se flg main-program:

  public static void main(String... args)
  {
    class Student
    {
      final public String fornavn;
      final public String etternavn;

      public Student(String fornavn, String etternavn)  // konstruktør
      {
        this.fornavn = fornavn;
        this.etternavn = etternavn;
      }

      public boolean equals(Object o)
      {
      	if (o == this) return true;
      	if (!(o instanceof Student)) return false;
      	Student s = (Student)o;
      	return fornavn.equals(s.fornavn) && etternavn.equals(s.etternavn);
      }

      public int hashCode()
      {
      	// dette kan gjøres på mange måter
      	return Objects.hash(etternavn, fornavn);
      }
    }

    // Oppretter to instanser A og B av samme student
    Student A = new Student("Kari","Jensen");
    Student B = new Student("Kari","Jensen");

    List<Student> liste = new ArrayList<>();  // en liste for Student
    liste.add(A);  // legger A i listen

    System.out.println(liste.contains(B));  // undersøker om B er i listen
    System.out.println(A.hashCode() + " " + B.hashCode());  // hashverdiene

  }  // main

Kjør programmet over og sjekk utskriften! Hvis vi isteden hadde brukt en record, ville vi ha oppnådd det samme på en mye enklere måte:

  public static void main(String... args)
  {
    record Student(String fornavn, String etternavn ) {}

    // Oppretter to instanser A og B av samme student
    Student A = new Student("Kari","Jensen");
    Student B = new Student("Kari","Jensen");

    List<Student> liste = new ArrayList<>();  // en liste for Student
    liste.add(A);  // legger A i listen

    System.out.println(liste.contains(B));  // undersøker om B er i listen
    System.out.println(A.hashCode() + " " + B.hashCode());  // hashverdiene

  }  // main

Kjør også dette programmet og sjekk utskriften! Hashverdien blir forskjellig fra det første eksemplet. Den implisitte hashCode() i record er kodet litt annerledes.

Les mer om "Records" her.

Du finner mer informasjon om Java 16 her:


Valid XHTML 1.0 Strict