Programmering 2 Flashcards

1
Q

Hva er primitive datatyper
Hva er de 8 primitive datatypene?
Hvor mange bits er de?

A

De er predefinerte datatyper i java.
Altså datatyper som bruker ikke har definert selv.
Det andre er Objekt datatyper, som bruker lager selv
Eks på ikke-primitive datatyper: String, array, klasser, interfaces osv.

int: +-210^9, 32bits
byte: -128/127, 8bits
short: +-3
10^4, 16bits
boolean: true/false, 1bit
float: opp til 7 desimaler, 32bits
double: opptil 16 desimaler, 64bits
long: +-9*10^19, 64bits
char: unicode character, 16bits

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Aritmetiske operatorer
Relasjonelle operatorer
Assigment operatorer

A
\+
-
*
/
% - returnerer det gjenværende
\++ 
--
==
!=
><
>=
<=
=
\+=
-=
*=
/=
%=
<<=
>>=
&&
||
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Hva er en metode?
Hva må metodesyntax ha
eks på metode syntax

A

En blokk med kode som skal gjøres når peogram kaller på den.

Må inneholde:
acsess modifier
return type, potensielt void
metode navn
parametere
exceptionlist
kropp innenfor lukkede paranteser

public int calulateEarnings(int firstJob, int secondJob) {
earnings = firstJob + secondJob;

return earnings;
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Hva er en klasse?

A

Et blueprint fra hvilket objekter er laget

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Hva er et objekt?

A

En instanse av en klasse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Hva er en pakke?

Hvordan bruker man en pakke?

A

Folder av klasser
Brukes for å organisere kode

import static packagepath
eks
import static Circle.java

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Hva er de fire pillarene av OOP?

Hvordan brukes de i java?

A

Innkapsling/Encapsulation
At man bare har adgang til en del av kode innenfor et sted.

Arv/Inheretance
At en klasser kan bruke metoder og variabler fra andre klasser

Polymorfi/Polymorphism
At man kan kalle en klasse flere gsnger for å lage forskjellige objekter

Abtract/Abcstraction
At man kan lett benytte kompleks kode med bruk av ting som klassekall og parametere

=====
I java kan man bruke accsess modifisers for å styre hvordan adgangen til kode skal være
Erklær klasser og metoder som public
Fordi man skal h adgang til metodene
Erklær variabler som private

Gjøres med extends og super

Kan gjøres i java ved at man kaller en klasse flere ganger.
Vil fungere så lenge klassen ikke er static eller singleton
Car car = new Car();

Abstraction:
Gjøres med ting som parameter osv

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
Hvordan lage ArrayList?
Hvordan hente data ut ifra index
Hvordan modifisere noe i en arraylist?
Hvordan skette noe fra ArrayList?
Hvordan tømme liste?
Hvordan få mengde elementer i liste?
A

ArrayList cars = new ArrayList();

cars. get(0)
cars. set(0, “modifisert”)
cars. remove(0)
cars. remove
cars. size()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

while loop
for loop
do while loop

A

while loop: kjører mens et tilfelle er
for loop: kjører en viss mendge ganger
do while: vil kjøre ihvertfall en gang uavhengig om while statementet stemmer eller ikke.

do ( [kodeblikk]) while([kondisjon]);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Hvordan ta brukerinout?

A
Scanner sc = new Scanner(System.in)
sout("gi et tall)
int a = sc.nextInt eller String str = sc.nextLine()
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hvordan gjøre string til int?

A

int i = Integer.parseInt(“200”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Forskjeller på Array, ArrayList og LinkedList

A

Array:
Størrelsen på listen må spesifiseres når listen lages.
Man kan derfor ikke fjerne eller legge til i listen, man kan bare endre på elementene
String[] myList = new String[4]; - erklær uten verdier
String[] myList = {“H”, “L”, “T”, “K”}; -erklær med verdier
myList[2] = “hallo” - erklære verdi

ArrayList
Størrelsen trengs ikke å erklæres før.
Man kan dynamisk legge til og slette.
ArrayList myList = new ArrayList<>();

ArrayList myList =
newArrayList<>(Arrays.asList(“H”, “X”);

myList.add(“J”)
myList.([index])
nums.forEach(System.out::println);

LinkedList
Lages og håndteres på akkuratt same måte som ArrayList.
Birtsett fra at man bytter ut ArrayList med LinkedList.

Hva er forskjellen på disse?
Array sin størrelse kan ikke endres dynamisk.
ArrayList kan endres dynamisk
LinkedList kan også endres dynamisk

Fotskjell på ArtayList og LinkedList?
ArrayList bruker lite tid på å referere til ting,
men mye tid på å fjerne og legge til.

LinkedList bruker mye tid på å referere,
men lite tid på å legge til og fjerne

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
Hva er HashMap
Hvirdan refererer man
Hvordan legger man til
Hvordan sletter man ting
Hvordan endrer man
Hvordan looper man
Hvirdan legger man til en liste som value/key
A

Som en dictionary
HashMap myMap = new HashMap<>();

var entrySet = myMap.entrySet();
for (var entry : entrySet) {
     if (entry.getKey() == key) {
          entry.getValue();
     }
}

var entrySet = myMap.entrySet();

myMap.put(key, value);

myMap.remove(key);

myMap.replace(key, value);

myMap.forEach(key, value) -> {
System.out.println(key + “ “ + value);
});

HashMap> myMap =
new HashMap<>();

myMap.put(“H”, new ArrayList<>(Arrays.asList(1, 2, 3)));

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Hva gjør static

Hvorfor er main static

Hvorfor man ikke kan ha en non-static metode i en static metode

A

static refererer til et variabel/metode i seg selv. det er sltså felles for alle objekter
Hvis man har to objekter, og klassen de kommer fra har en static variabel, vil det være slik at hvis man endrer på variablet i objekt2, vil også objekt1 ha det variablet endret.

Når en metode/variabel er static, avhenger det ikke av klassens initialisering for å kunne eksistere.
Eks når man kan si [class].[static metode] uten å ha initialisert metoden. Dette er fordi static refererer til variablet/metoden i seg selv.

Når man starter et program må man kunne initialisere forskjellige ting. Hvis main ikke hadde vært static, hadde det ikke vært noen måte å kjøre programmet, fordi det ikke kunne blitt initialisert noe.

Hvorfor static metoder bare kan bruker i andre static metoder:
Static metoder initlialiseres ikke. Derimot non-static metoder initialiseres.
Hvis man putter en non-static metode i en static metode, vil aldri den non-static metoden initialiseres.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

input med buffered reader

A

BufferedReader reader =
new BufferedReader
(new InputStreamReader(System.in))

reader.readLine()
Float.parseFloat(reader.readLine())

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Char

Hvordan endre karakterer i en string

A

[String].substring(0,1).replace(oldchar, newchsr)
[String].substring(0,1).replace(oldchar, newchsr)

[string].substring(1, [string].lenght() -1)

newstring = s1 + mid + s2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Hva er JRE?
Hva er JVM
Hva er JDK

Hvordan compile

Hva er compile-time error
Hva er run-time error

A

jre
inneholder jvm og flere mapper som er nødvendig for at java skal kjøre

jvm er det som kjører java bytekode, altså det som står i .class

jdk inneholder ting nødvendig for å programmere, som klasser og metoder, java, javac,
Hvis man ikke skulle ha programmert, hadde man bare trengt jre

Oppsumert:
Lag en .java fil med java kode
Gå i cdm, skriv javac [java fil].java
Da får man en .class fil
Så skriver man i cdm:
java [class fil]

Skjer ved feil syntax (eks flemmer semikolon)
Dette gjør at programmet ikke kjører

Skjer ved at det er en error mens programmet kjører (eks ArrayIndexOutOfBounds). Dette gjør at programmet stopper mens det kjører

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Hva er singleton

Hvordan lage det

A

En klasse som bare kan lage en objekt en gang.
Man kan bare eks ha student, ikke student2 osv

Class singleton

 public static Singleton instance;
     public static Singleton getInstance() {
          if (instance == null) {
                  instance = new Singleton()}
           }
     }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Hva betyr “static typed”

A

Man må erklære hvilket type variabel noe er når man erklærer variablet.
eks int number

20
Q

Hva er en constructor?

Syntax?

A

Brukes for å sette variabler til en klasse.
Litt som __init__ i python

class [className] {
public int number;
public String hilsen;

public className(int number, string hilsen) {
       this.number = number;
       this.hilsen = hilsen
}
}
21
Q

Hva er en abstract class?

synatx

A
En abstract klasse er en slags bygge-plan for en subclass.
Eks man kan ha en Animal class, så har man en Cat class som er subclass.
Men det er rart å ha en Animal class som man kan instansiere, hvis man ikke skal instansiere den, men heller man ha det som en struktur for subclass'er.
public abstract class Animal {
      public String sound;
 public abstract void setSound(String sound);

 public void {
      System.out.println("Im an animal");
 } }
//Cat vil nå ha det slik at med et enkelt tastetrykk kan man legge til abstract metodene fra Animal, og modifisere dem
public class Cat extends Animal {
     String sound;
  @Override
  public void setSound {
       this.sound = sound;
  }

}

22
Q

Hva er inheretance

Hvordan bruke det

A

I java er det slik at man ha arve syntax fra parent.
Hvis man har et variabel med inheretance fra parent, refererer man altså ikke til parent, men til det variablet i child.

class public Parent {
     this.number;
    public Parent(int number) {
         this.number = number;
    }
}
class public Child extends Parent {
      int number;
      String name;
      public Child(int number, String hilsen) {
           super(number)
           this.hilsen = hilsen
      }

}

23
Q

Finne det objektet med den minste verdien i et visst attributt?

Finne ganger en verdi er i en liste?

A

Planet planet = planets.stream().min(
Comparator.ComparingDouble(Planet::getMass))
.get()

Collections.frequency(liste, verdi);

24
Q

Hvordan typecasting?
Hvordan fungerer typecasting fra mindre verdi, til større verdi, og motsatt?
Hva er en static metode?
Hvordan sende parametere inn i main metode? Hvordan bruke de parameterene?
Hva er interface?
Hva er comparable?
Comparable syntax
Hva er UML?
Forskjell på abstrakt og interface?
Hva er en anonym klasse?
Hvordan bruke en barnemetode i en foreldreklasse?

A

typecasting:
implicit: fra noe “Mindre” til noe “større
byte -> short -> long -> float -> double
Dette tar java automatisk hensyn til.
så eks int double sko = int num + double num

explicit - Fra noe større til noe mindre
double alder = 8.5;
int orendAlder = int(alder);

static metode høerr ikke til et visst objekt, men heller klassen.
Et innebygget eksempel på dette er eks Math.pow().
En slik metode kan man bruke uavhengig av objekt, og om objektet er
opprettet eller ikke.
En static metode avhenger ikke av om klasse er instansiert.
I en static metode kan man ikke bruke “this” nøkkelordet.
Man bruker navnet til klassen når man bruker metoden, ikke navnet til et
objekt.

Sende inn paramtere til main metoden (String[] args)
GJøres slik i intellj: Edit configuration - her kan man gjøre det
Man kan så referere til parameterene slik i koden:
arg[index]

Hva er et interface?
Hva er interface?

Et slags grensesnitt for en klasse.
Et interface kan ikke instansieres,
dets metoder kan heller ikke ha noen kropp.
Andre klasser kan arve fra en interface ved å bruke “implements”
nøkkelordet,
men man sier ikke at en klasse “arver” fra et interface, men heller
“implementerer” et interface.
Interface er en slags kontrakt for hva en klasse skal innholde
En klasse kan implementere flere interface.
En interface metode er by default public, så man tregner ikke å
inkludere “public” nøkkelordet

public interface tegn {
         void metode();
}

Man kan også gjøre dette:
if (klasse implements interface) {
((interface) klasse.interface-metode)

Comparable - innebygget interface, kan brukes til å sotere ting i en
liste på, ut ifra en verdi i objekt.
Klassen til objektene som skal sammenlignes implementerer Comparable
interface
Comparable

@Override
public int compareTo(klassenavn) {
returnValue = this.verdi - objektnavn.verdi

     if (returnValue == 0) {
             return this.annenVerdi - objektnavn.annenVerdi
     }
     return returnValue; } Denne klasse setter opp hvordan sort skal sortere. Den sorterer etter den verdien som er størst. Først sammenligner den "verdi", hvis de verdiene er like, sammenligner den heller "annenVerdi"

main:
liste med objekter = liste
Collections.sort(liste)

class Student implements Comparable{

int rollno;  
String name;  
int age;  
Student(int rollno,String name,int age){  
this.rollno=rollno;  
this.name=name;  
this.age=age;  
}  
public int compareTo(Student st){  
if(age==st.age)  
return 0;  
else if(age>st.age)  
return 1;  
else  
return -1;  
}  
}  

Hva er UML?
Hva betyr de forskjellige pilene i en UML?

Arv ——-|>
Aggregering <>———- : en sammling ev en klassetype i en annen?
Eks hvis man har en klasse for en liste av objekter av en annen klasse
(Direkte) assosiasjon —————> : Eks hvis man har en klasse for
en liste av objekter av en annen klasse

Forskjell på interface og abstrakt klasse?

interface:
Har bare abstrakte og static variabler som er final
En klasse kan implementere flere interface
Metoder er naturlig public

Abstrakt:
Har både abstrakt og konkrete metoder, og konstruktører
En klasse kan bare arve en abstrakt klasse
Metoder kan være public, private, og protected

va er en anonym klasse?

En type nestet klasse
Er til å gjøre kode mer konsis
Man lager blueprinten og instanserer klassen samtidig
Brukes gjerne i forbindelse med å lage en implementasjon av en interface

main:
metode(new interface, en verdi) {
         @Overrride
         interface metode(en verdi) {
                 kropp
                 return verdi;
         }
}

Man kan jo egentlig ikke instansiere et interface,
så det java lar en gjøre, er å la en implementere interface, for hvordan
det skal funke,
i parameteren

25
Q

Hvordan fungerer dette? Person person = new Snekker()?
Hva er objekt polymorfi?
Hva er instanceof? Hvordan vil dette se ut med objekt-polymorfi?
Hvordan kan en foreldreklasse få tilgang til banreklassers metoder?

A

Dette funker fordi java anser Snekker som også en del av Person-klassen.
Men i eksemplet over fungerer det objekt bare som et Person-objekt, som
betyr at man bare har tilgang
til variabler og slikt i Person-klassen.
Hvis man gjør det motsatte (Snekker snekker = new Person(), så fungerer
ikke dette, fordi Snekker arver fra Person.

public void metode(Object object) {
//kode som gjør noe med objektet
}
public void metode(Snakker antallHus) {
//kode som gjør noe med objektet
}
Man bruker et objekt som parameter i andre objekter og metoder.
Også, hvis man har et objekt som en parameter i en klasse,
så kan man direkte referere til variabler til det innførte objekte, i
klassen.
Dette fungerer også for arvede objekter.
Så hvis Snekker arver fra Person, kan man også passere inn et objekt av
snekkerklassen,
selv om metoden spør om et Personobjekt.

gir en boolean om hvilken type objekt
noe er.
eks:
int number;
boolean bool = number instanceof Double
Dette gir false.
Man kan også bruke dette med objekter d selv har laget fra en klasse.
Hvis et objekt er en barneobjekt av en annet objekt, så vil det vise true
boolean bool = enSnekker instanceof Person
men hvis man bruker feks et barn av snekkerklassen, så bvil det ikke
fugnere,
fordi det er et barn av Snakker, men ikke Person

Person person = new Person()
((Snekker) person).getAntallHusBygd();
(([klasse man ønsker å tolke objektet som]) [objekt av annen
klasse].metode til annen klasse;
Dette fungerer også for klasser der det er et oldeforelder/oldebarn forhold
((Snekkerlærling) person).getOpplæringsPeriode();

26
Q

Hva er final static?

Hvordan lages det?

A

final, konstanter(final static), “verktøy klasser”

final static er som en konstant til en klasse.
En verdi som tilhører klassen som aldri endrer seg
Verdien er i UPPER CAPS
eks:
private final static int MENING_MED_LIVET = 42;

27
Q

Hva er checked exceptions

Hva er runtime exceptions

Hva er error

Hva er unchecked exceptions

Hva vil “throwing exceptions” si?

Exceptions hierarki

Hva kan en programmerer gjøre med exceptions?

exceptions syntax

A

Checked excetions: Forvtentet fiel - feil man bør håndtere

Runtime exceptions - indikerer feil internt i applikasjon, som man håndterer

error - errors som at det ikke er nok plass i pc, disse fikser man ikke

unchecked exceptions - exceptionsman ikke forventer, men som man fortsatt håndterer

“throwing exceptions”
Når en exceptions oppstår, bli det i bakgrunnen laget et exceptions objekt, så sendes det videre

        Throwable
           ^
           |
  ------------------
  |                |
Error           exceptions
                   ^
                   |
                RuntimeExceptions

Når exceptions oppstår, kan programmerer:

  • Ikke gjøre noe, da skriver program feilmelding til konsoll, og stopper opp program
  • Behandle feilen som oppstår.
  • Behandle feilen et annet sted i rpogrammet.

syntax
try {} - kjører kode
catch {ExceptionKlasse ex) {} - skjer hvis ex1 skjer
catch (EnAnnenExceptionKlasse ex2) {] - skjer hvis ex2 skjer
finally {] - skjører etterpå uansett om det kom en ex eller ikke

28
Q

Er er en “flat fil”

Hva er strømmer
Hva er ByteStream og CharacterStream?
Hvordan skrive til fil med stream?
Hvordan lese fil med stream?

Hvordan skriver man til fil?

A
"Flat fil"
Ustrukturert fil som ikke skal tolkes
Bare en ren string
Innholer eks:
Hei hvordan går det. Jeg heter Lars.
Jeg har det bra.....

Strømmer:
Klasser som skriver/leser til ting kontinuelig.
En kontiuelig strøm av ting som skjer

FInnes mange klasser
I to hoevkateforier

Byte Stream - leser/skriver nytes (Hvis de har “Stream” i navnet)
InputStream, OutputStream

Character stream - leser/skriver characters (hvis de har Reader/Writer i navnet)
Reader, Writer

Slik:

BufferedReader [klassenavn] = new BufferedReader(new InputStreanReader(System.in))

  • Buffered betyr at den leser hele linjer med tekst, “Reader” ville lest tegn for tegn
  • InputStreamReader leser input fra bruker
  • Det må være en reader, for at Buffered skal lese hele linjen
  • System.in sier at man skal ta fra konsoll
try {
FileWriter [klassenavn] = new FileWriter("minTextFil.txt", true);
}
catch (IOException IOEx) {System.err.println(IOEx.getMessage())}
  • IO - Input/Output
  • System.err er spesialisert for errors
  • Etter at man oppretter klassen FileWriter, vil man få en error, “surround with try/catch blocks”.
  • Det i parameter kan være: En filsti som man skriver til, et objekt, en filsti der man appender
  • Hvis filen ikke eksisterer, blir den laget
  • true gjør at det appendes
  • IOException er en exception som har med å skrive til og lese filer, eks feil filsti, korrupt fil, tomt minne…

String tekst = “”;
sout(“Skriv avslutt for å avslutte: skriv noe tekst”);

try (
BufferedReader bf…
FIleWriter fw…
) { - Denne try greien lukker automatisk bf og fw

while (tekst.equals(“avslutt” != true)) {
tekst = bf.readLine();
bf.append(tekst);
}

) catch (IOException ioEx) {
System.err.println(ioEx.getMessage());
}

String fileName = “c://lines.txt”;

	try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {

		String line;
		while ((line = br.readLine()) != null) {
			System.out.println(line);
		}

	} catch (IOException e) {
		e.printStackTrace();
	}

}
29
Q

Hva er en anonym klasse?

Hvordan brukes det?

A

Anonyme klasser:
Gir mulighet til å oprette et objekt,
og definere dets funksjonalitet i samme handling.
Man trenger ikke å oprette en klasse for dette.

Dette gjøres ofte i henhold til et interface.
Man opretter interfacets metoder ved oprettelse av objektet

Vanlig interface:
public interface RandomInterface {
	void randomMethod();
}

Implementering av funksjonalitet og objekt:
RandomInterface anonClassObject = new RandomInterface() {
@Overrride
public void randomMethod() {
//implementasjon
}
}

30
Q
Hva er upcasting
Hvordan bruker man upcasting?
Hva er downcasting?
Hva er instanceof?
Hvordan bruker man downcasting?
Hvordan kan en subklasse bruke en forelderklasses metoder?
casting med primitive datatyper
hvilke verdier som er mindre og større
hvilken informasjon mister man når man gjør narrowing casting?
A

upcasting
upcasting fungerer alltid, man trenger aldri noe ekstra kode for at
det skal fungere.
Man kan altså behandle en barneklasse som sin superklasse,
fordi en hund er også et dyr

caste et object til dets superklasse (parent)
Lager et hundeobjekt, som castes til Animal
Animal myAnimal = new Dog()
Animal - refrence klasse
Dog - klassen til objektet
myAnimal kan kun bruke metoder fra Animal klassen, ikke fra Dog klassen

Så hvorfor bruker man upcasting i det hele tatt?
Fordi da kan man gjøre dette…

public static void makeAnimalNoise(Animal animal) {
	animal.makeNoise();
}
makeAnimalNoise(myAnimal)
konsoll: woof woof! (hundemetoden)

Upcasting brukes fordi:
Da kan man passere en subklasse som parameter til en
metode som kun tar superklassen

Men dette skjer også automatisk.
eks hvis man gjør så:
Dog dog = new Dog()
makeAnimalNoise(dog)
så fungerer dette.

ALTSÅ:
Man trenger ikke å spesifisere upcasting,
dette skjer automatisk.

downcaste
caste et objekt til en subklasse, en barneklasse
F.eks. man kan caste et animal til å være en hund

growl er en metode som bare dog har.
makeNoise er en metode som alle barn overrider, og som finnes i superklassen

makeAnimalNoise(new Dog())

public static void makeAnimalNoise(Animal animal) {
animal.makeNoise()
animal.growl()
}

Denne metoden vil feile, fordi “growl” ikke er spesifikt til animal.

Men hvis man gjør slik:
public static void makeAnimalNoise(Animal animal) {
animal.makeNoise()
Dog dog = (Dog)animal
animal.growl()
}

Da fungerer det å bruke en Dog spesifikk metode

Gi subklasse agang til superklasses metoder:
Hver subklasse har automatisk adgang til superklassens metoder

Gi superklasse adgang til subklasses metoder
Animal animal = new Animal()
((Dog) animal).bark()

instanceof
La oss si man passerer inn noe slik:
makeAnimalNoise(new Cat())
public static void makeAnimalNoise(Animal animal) {
animal.makeNoise()
Dog dog = (Dog)animal
animal.growl()
}

Denne metoden vil feile,
fordi “growl” animal objektet som man passerer inn,
ikke er av klassen Dog, og har derfor ikke tilgang til “growl”.
For å skjekke hvilken subklasse man bruker, kan man gjøre slik:

public static void makeAnimalNoise(Animal animal) {
animal.makeNoise()
if (animal instanceof Dog) {
Dog dog = (Dog)animal
animal.growl()
}
}

casting med primitive datatyper:
hvis man har to variabler av forskjellige primitive datatyper,
så tar å kombinerer det i en ny variabel,

float num1 = 2f;
int num2 = 1;

double num3 = num1 + num2;

så kan to ting skje:

1:
det funker helt fint å kombinere variablene

2:
kombinasjonen fungerer ikke.
Man må caste

Når må man caste?
Med størrelsen til en datatypen, mener jeg størrelsen i bits.
Når man setter en datatype som er større, lik en mindre datatype,
int num1 = 2;
double num2 = num1;
kalles dette Widening casting.
Dette gjør java automatisk.

Når man setter en datatype som er mindre, lik en større datatype,
double num1 = 2;
int num2 = num1
så får man en feil..
Man må caste til det mindre datatypen.
Dette kalles Narrowing casting.
Gjøres slik:
int num2 = (int) num1;
datatyper fra største til mindre
double - størst
float
long
int
char
short
byte - minst

Hvilken info kan man minste når man gjør narrowing casting?
Hvis verdien som castes som noe mindre (x) overstiger kapasiteten
til den mindre verdien (y),
så går man tilbake til y sin minste verdi, deretter så langt opp i y
som så langt x går opp i verden på nytt.
Det er som om man looper verdiene y kan ha.
F.eks.
byte kan ha verdiene: -128 127
int num1 = 130
byte num2 = (byte) num1;

num2 sin verdi er -126

Hvis man har desimaler, så kan man miste infoen bak desimalene.
float num1 = 2.7f;
int num2 = (int) num1;

num2 sin verdi er 2.

31
Q

Hvilke datatyper skal ha bokstaver bak seg?

Hvilke bokstaver skal de ha?

A

disse datatypene:
long, float, double

long num = 2L
float num = 2.5f
double num = 2.5d

32
Q

arv og private

A

inheretance og access modifiere:
-Hvis en metode i en superklasse er private,
så kan ikke en subklasse bruke metoden.
Det er som om metoden ikke vil finnes for subklassen.
Dette gjelder så klart også interface og abstract

-Altså metoder som er abstract og i interface, trenger man
ikke å spesifisere tilgjengeligheten til, siden det er klart at de er public.
Men når man implementerer eller arver metodene, så må man spesifisere
access modifieren. Accessmodifieren i subklassen må være public, den kan ikke være private.
abstract klasse:
void abstract myAbstractMethod();

interface klasse:
void myInterfaceMethod();
33
Q

adgang til klasser og pakker

pakkepath syntax

A

Hvis man driver med en klasse i pakke x, og vil bruke noe fra en klasse i pakke y, så må man importere den andre pakken.
Dette gjelder også i slike tilfeller:

pakke y ligger under pakke x.
Hvis man er i pakke y, og bruker noe fra pakke x, så må man fortsatt importere
Hvis man er i pakke x, og bruker noe fra pakke y, så må man også importere.
Hvis man lager en subklasse av en klasse i en annen pakke, så må man fortsatt importere.

Man må altså alltid importere

pakke path syntax
Man må spesifisere hele veien fra etter src (altså ikke inkludere src, men pakken under der igjen).
eks:
project
     out
     venv
     src
          pakke1
               pakkeunder1
                    pakkeunderigjen
                          klassen.fil
External libraries

pakke1.pakkeunder1.pakkeunderigjen.klassen

La oss si:
klasse Animal er i pakke x,
Man skal lage en subklasse i pakke y
pakke y ligger under pakke x

package pakkeX.pakkeY

import pakkeY.Animal

public class Cat extends Animal {
...
}
34
Q

modifiers

A

no modifier - bare innenfor samme pakke
dette gjelder også funksjoner: void myMethod() {}
Det er også selv om klassen er en subklasse av klassen med metoden.
Så hvis subklassen er i en annen pakke, så har den ikke adgang til superklassens metode

private - bare innenfor samme klasse
public - innenfor alle pakker

protected - innenfor alle klasser, så lenge klassen er en subklasse

35
Q
hvordan skrive opp imports og exceptions for følgende?
IO ting
variabler
lister
swing
A
imports og exceptions:
io ting:
BufferedReader bufferedReader = new BufferedReader(new FileReader(path));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(path, false));
BufferedReader bfInput = new BufferedReader(new InputStreamReader(System.in));

import:
java.io.*;

catch:
catch (IOException e) {
e.printStackTrace();
}

Variabler (int, String, double, Integer):
Man trenger ingen import eller catch

lister:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;

Men man kan også bare gjøre:
import java.util.*;

exceptions:
Man kan få en index out of bound exception.
den skriver man sånn:
try {
	array.get(2);
} catch (IndexOutOfBoundException IOOBException) {
	//kode
}

swing:
swing: import java.swing.;
action event listener: java.awt.event.
;

36
Q

Viktig å huske om java exceptions hierarki:

A

catch beskjeder man kan gi
e.printStackTrace - gir mer informativ beskjed, som en vanlig exeption error, men den stopper ikke programmet
sout(e.getMessag) - gir beskjed

viktig med exceptions:
hvis du har en catch hierarki

try {}
catch {}
catch {}
finally {}

Hvis man har flere ting som kan gi en exception,
så er det sånn at så snart en exceptionen oppstår, så vil den hoppe til catch
Det er derfor man ikke burde håndtere flere exceptioner samtidig,
(eks IOException og IndexOutOfBoundsException),
men heller en exception, så mer og mer generelle exceptions

37
Q

Kode for å skrive til og lese fil

A
Lese fil:
public static void readFile() {
        System.out.println("reading file...");
        try (BufferedReader bufferedReader = new BufferedReader(new FileReader(FILE_PATH))) {
            String currentLine;
            while ((currentLine = bufferedReader.readLine()) != null) {
                System.out.println(currentLine);
            }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Skrive til fil:
public static String makeStringToAdd() throws IOException {
String returnString = “”;

        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) {
            String currentLine;
            while (!(currentLine = bufferedReader.readLine()).equals("quit")) {
                returnString += currentLine + "\n";
            }
        }
    return returnString;
}
public static void writeToFile(String content) throws IOException {
        try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(FILE_PATH, true))) {
            bufferedWriter.write(content);
        }
    }
38
Q

Hva er de fire pillarene av OOP?

Kort, hvordan brukes disse i java?

A

arv i java:
arv betyr at noe kan ha samme trekk som en annen ting.
I java gjøres dette med arving av klasser (extends)
og implementasjoner av interfaces.

Abstraksjon
abstraksjon betyr at man kan lett gjenbruke kode.
man trenger ikke å vite hvordan koden fungerer, men
man kan fortsatt bruke komplekse kodeblokker.
I java kan man gjøre dette med metoder.

polymorfisme
polymorfisme er at en ting kan oppføre seg på flere forskjellige måter.
I java kan man gjøre dette med parametere,
og med objekt polymorfisme.

innkapsulasjon
Innkapsulasjon betyr at en ting bare er nålig fra visse steder.
I java kan man gjøre dette med access modifiers
(no modifer, private, private, protected),
for å styre hvilke klasser og pakker som har adgang til kode.

39
Q

Hva er mutable og immutable?
Hva er noen eksempler på immutable ting i java?
endring med “final”
final metode

A

mutable - at noe kan forandres
immutable - at noe ikke kan forandres etter at det har blitt laget.

Alle wrapper klasse(Integer, String, Double osv) er immutable.
Det betyr at hvis man lager et objekt av en slik klasse,
og gir det en verdi. Så peker det til et sted i minne.
Hvis man gir objektet en ny verdi, så endrer man ikke verdien i minne,
men man gjør heller så variablet peker til et nytt sted.
Man endrer altså ikke minnet, man bare redefinerer hvor variablet peker.
Dette er for minnehåndtering. Man gjør så flere variabler kan peke til samme minneposisjon.
Hvis man skal hardkode slik at to variabler ikke peker på samme objekt, selv om de har samme verdi,
kan man manuelt lage et nytt objekt.
Slik: String myString = new String(“John”);

Man kan gjøre ting immutable i java, med bruk av final
når du lager et variabel som er final, MÅ du sette verdien.
Du kan ikke gjøre slik:
public final static int number;
Da vil du få en feil
Du kan heller ikke gjøre slik:
public final static int number = null;
Da får du også en feil.
Du kan heller ikke endre noe final i konstruktøren

hva er en final metode?
en metode som ikke kan overkjøres av en subklasse.
Man kan altså ikke lage en metode med samme navn i subklassen.
Det har ingenting å si om man bruker andre modifiere i metoden i subklassen som,
variabler, static osv.

40
Q
Hva er UML?
Hvordan vises private
protected
public
static variabler og metoder
final
konstanter
abtrakte klasser og metoder
interface
Hva er de forskjellige relasjonene?
Hvirdan vises de?
A

Unified Modeling Language aka klassediagram.
Gir oversikt over klasser, og klasserelasjoner

Eksempel

---
Fly
---
- seter: int
- passasjerer: Arraylist
----
\+ LeggTilPassasjerer(String passasjer): void

+: public
-: private
#: protected

Statiske variabler: har understrek
Final variabler: har fullt caps
Konstanter (final + static): både caps og understrek
Abstrakte klasser og metoder er i kursiv
Interface vises med slik: <>

Arv: —-Extends——|>
(Direkte) assosiasjon: ——>
Aggregering: ——-<>
Implements: - - - - - |>

Arv indikerer at en at en klasse arver fra en annen.
Altså extends
Klasse som arver peker mot klassen det arves fra.
Fly Flyplass

Aggregering indikerer at en klasse
inneholder en liste av objekter fra en annen klasse
Eks:
Flyplass
----
- String: navn
- fly: Arraylist

Klassen som har listen, blir pekt på av klassen som objektene i listen er av.
Fly —–<> Flyplass

Implementering
Indikeres med en lik linje som med arv, bare at linjen er striplet.
Interfaces er noe man implementerer.
Interfaces har pilene pekende mot seg, fra klassene som implementerer interfacet.
Når en klasse implementerer et interface, skrives ikke opp metodene som implementeres,
de skrives kun i interfacet.
<>

41
Q

Hva er et paradigme?
Hva er imperativ programmering?
Hva er funksjonell programmering?

Hva er noen forskjeller på imperativ og funksjonell programmering?

Hva er noen trekk til funksjonell programmering?

Hva kan være noen fordeler med funksjonell programmering?

A

Paradigmer:
Klassifikasjoner av programmerinsspråk, basert på hvordand e skrives og benyttes

Noen paradigmer:

Imperativ programmering:
OOP

Deklarativ programmering:
Funksjonell programmering

Forskjeller:
Imperativ
Sier til hvordan hva det skal gjøre, og hvordan
stegvis
typisk for applikasjoner
Eks: Java, C++, Pascal

Deklarativ:
Deklarer HVA vi ønsker skal skje, men ikke hvordan
Overordnede komandoer
Ofte brukt til (men ikke ekslusivt) databasespørringer
Eks: SQL, Prolog, Miranda

Imperativ:
ArrayList result = new ArrayList<>();
	for (int number : numbers) {
		if (number % 2 == 0) {
			result.add(number);
		}
	}

Deklerativ:
var result = numbers.Where(number => number % 2 == 0);
SELECT * FORM Table

Funksjonell programmering
Man bruker gjerne ting som kommandoer,
og setter opp ting i programmeringsspråket slik at man
kan gjøre en hel del operasjoner med lite kode.
Dette kan eks gjøres igjennom en funksjonskall

Kodeblokker behandles som byggestener i koden,ikke som objekter.
Benytter ofte recursion, der en funksjon kaller på seg selv.
Deterministiske matematiske funksjoner
har ikke gettere og settere
har ikke mutable states
Bruker gjerne ikke løkker, men heller recursion

Det påstås at funksjonell programmering gir:
Færre bugs
Kode som er letere å debugge og teste
Kode som skal formelt verifiseres
Mer kompakt kode.
42
Q
Hva er overloading?
Hvordan fungerer overloading med følgende?
returntype
static
forskjellige access modifiers
A

Å ha metoder med samme navn, men som gjør forskjellige ting, f.eks. utifra parametere

overloading fungerer med hva som helst, så lenge man har forskjellige parametere.
Hvorfor det?
Fordi når du bruker et objekts metode, må det være en måte java kan vite hvilken metode du vil bruke.
Hvis du kun bruker det samme navnet, så gir ikke det noe innblikk i hvilken metode man vil bruke (fordi med overloading vil flere metoder ha samme navn).
Men så lenge parameterene er forskjellige, kan man ha forskjellige metoder med samme navn, der fe.ks. noen gir annen returntype, noen er static, og noen har andre access modifiers.

43
Q

Forskjellige eksempler på polymorfisme

A

overloading
overriding
objektpolymorfisme

44
Q

super syntax

A
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
    super(startCadence, startSpeed, startGear);
    this.seatHeight = startHeight;
}
45
Q

Hva er en primitiv datatype

Eksempler på primitive og non.primitive datatyper

A

Primitive Data Type:
In Java, the primitive data types are the predefined data types of Java.
They specify the size and type of any standard values. Java has 8 primitive data types namely byte, short, int, long, float, double, char and boolean

Eksempler på primitive datatyper:
boolean, int, float

Eksempler på non-primitive datatyper:
String, ArrayList,

46
Q

Initialiser double, float, og int, på den samme måten man normalt initialiserer objekter

A
Double bool = new Double(true);
Float myfloat = new Float(2.5);/Float myfloat = new Float(2.5f);
Integer munum = new Integer(2);
47
Q

Hvordan lage en immutable klasse?

A
Following are the requirements:
-The class must be declared as final so that child classes can’t be created.
  • Data members in the class must be declared private so that direct access is not allowed.
  • Data members in the class must be declared as final so that we can’t change the value of it after object creation.
  • A parameterized constructor should initialize all the fields performing a deep copy so that data members can’t be modified with an object reference.
  • Deep Copy of objects should be performed in the getter methods to return a copy rather than returning the actual object reference)