Java - Anton-L-GitHub/Learning GitHub Wiki

General

Java är känt för att:

  • Gammalt språk
  • Stabilt, har inte ändrats på det sätt applikationer behöver skrotas elr skrivas om.
  • Ett rätt så öppet landskap, men ändå ägt av stora bolag, oracle.
  • Cross Platform, stödjer många platformar.

Java är:

  • Starkt typat
  • Statiskt typat
  • Flertrådat, dock i princip enkeltrådat genom GIL låsning.
  • Har primitiva typer och referens typer.

Förkortningar:

JRE - Java RunTime Enviroment
JDK - Java Developer Kid, innehar tex compiler.
LTS - Long time support
JVM - Java virtual machine, translatear compilead kod (.class) till platformen som koden körs.
JShell - Kör Java kod i terminalen.

Java Editions

  • Standard Edition (SE)
  • Enterprice Edition (EE)
  • Micro Edition (ME)
  • Java Card

Variables and constants

Classes = PascalNamingConvention
Methods = camelNamingConvention
Strings = "Always double quotation marks"
CONSTANT_VAR = Konstanta variabler

\ = Escape character
\n = New line
\t = Tab

Formatting with printf()

System.out.printf("You are a %s", role)

s – strings
d – decimal integers
f – float numbers
t – date/time values


Types

Primitive Types

Type Bytes Range
byte 1 -128 -> 127
short 2 -32,768 -> 32,767
int 4 +&- 2,147,483,647
long 8 +&- 9,223,372,036,854,775,808
float 2 6 to 7 decimals
double 8 15 decimals
char 2 A, B, C, ..
boolean 1 true / false

Reference Types

Refererar till en instance av ett objekt.
String

Default values

Type | default value -|-|- numbers | 0 booleans | false reference types | null


Statements

&& = and
! = not
|| = or

If statement

if (degrees > 30)
    System.out.println("It's a hot day, remember to drink water!");
else if(degrees >= 20)
    System.out.println("It's a nice day today");
else
    System.out.println("It's cold today");

Ternary operator

Works like a if statement inside the declaration of the variable

int income = 120_000;
String className = income > 100_000 ? "First class" : "Economy class";

Switch statement

switch (role) {
    case "admin":
        System.out.println("You are a admin");
        break;

    case "moderator":
        System.out.println("You are a moderator");
        break;

    default:
        System.out.println("You are a guest");

Loops

For-loop

for (statement 1; statement 2; statement 3) {
  // code block to be executed
}

While-loop

while (condition) {
  // code block to be executed
}

Do While Loops

do {  
    //code to be executed  
    }
    while (condition);  

Casting

double x = 1.1;
int y = (int)x + 3;

String -> number

int x = Integer.parseInt("2");
float y = Float.parseFloat("2.23");

Arrays

int[] numbers = {2, 3, 5, 1, 4 };
System.out.println(Arrays.toString(numbers));
  • Arrays are read only, use Collection classes for array/list to add/remove items.

Arrays.sort = Sort
Arrays.toString(theArray) = print array


Classes

PascalNaming
public = Kan nås utanför detta class/package.
private = Kan ej utanför denna class/package.
final = constant.
void = metoden retunerar ingenting.
this = Refererar till instansen.

Fields

Detta är "instansvariablerna" i java.

Methods

camelCase

public static String greetUser(String firstName, String lastName) {
    return "Hello " + firstName + " " + lastName;
}

Exceptions

Checked exceptions

Tex, en metod som får något oväntat.

  • NullPointerException
  • ArithmetricException
  • IllegalArgumentException
  • IndexOutOfBoundsException
  • IllegalStateException

Interfaces

Aka Contracts
We use interfaces to build loosley-coupled, extensible testable applications.

Bra för att:

  • Bygga loosley-coupled code.
    • Classer kan då bytas ut utan att påverka andra classer
    • Du vill kunna byta en del i bilen utan att behöva byta ut massa andra som funkar.

Interfaces - What should be done.
Classes - How it should be done.


Generics

Gör det möjligt för olka classer/datatyper att använda samma metod/class.
När ett object från en genericklass skapas så skrivs typen som skall använda classen/metoden in i new List<Här>.
Kan endast ta referens typer som input. (int 3 = Interger.valueOf(2))

GenericList<Integer> intList = new GenericList<>();

(OBS! GenericList "min egen" klass)

Constraints

Gör det möjligt att "constrainta"/begränsa klasserna som kan användas.
I detta falll classen number och dens subklasser/children.

public class GenericList<T extends Number> { }

Detta går också att göra för enbart metoder.

public static <T extends Comparable<T>> T max (T first, T second) {
    return (first.compareTo(second) < 0 ? first : second);
}

Det är möjligt att ha flera genereric parametrar.

public static <K, V> void print (K key, V value) {
    System.out.println(key + " = " + value); }
}
public class KeyValuePairs<K, V> {
    private V value;
    private K key;

    public KeyValuePairs(K key, V value){
        this.key = key;
        this.value = value;
    }
}

Wildcards

Med wildcars kan vi casta generic types.

?

public static void printUsers(List<?> users) {
    users.get(2);
}

Collections

collection pic

List

  • Kan komma åt objekt i listan med ett index.
  • Är ej dynamisk / fixed antal platser.
  • Kan lägga till och ta bort objekt.

ArrayList

  • Dynamsik antal platser/index

Map

Aka Dictionary

Map<String, Object> theMap = new HashMap<>();
 


theMap.get("key", notFoundObjOrMsg)` // tires to get a item/value, if not, return default.  
theMap.getOrDefault("e10", notFoundObjOrMsg)` // tires to get a item, if not, return default.  
theMap.containsKey("theKey"); // returns booliean if key is in dict.  
theMap.replace("theKey", "oldValue", "newValue" );` // replace a value.

Set

  • Lista utan duplicates

HashSet

Queue

  • Fungerar som en printer.
  • Jobbar enligt en kö.

Lambda

Class/Object::method
a -> System.out.print(a)
System.out::print

Filter
Filtrerar flödet i strömmen

doors.stream().filter(door -> door.isLocked) // Endast låsta dörrar kommer igenom filtret.

Limit
Begränsar flödet i strömmen

movies.stream()
            .limit(3)
            .collect(Collectors.toList()); //Tar endast emot 3st från streamen. 
            

Map
Ändrar form på det som kommer i streamen.

FlatMap
Platta ut Collections i strömmen

.flatMap(list -> list.stream()) // Streamar listorna i listan.

Sliceing
Dela upp flödet i strömmen

.skip(1) // Skippar första obj // Streamar listorna i listan.
.takeWhile(m -> m.getViews() < 10) // Fortsätter tills en movie har mer än 10 views.

Sorting

.sorted((objA, objB) -> objA.getTitle().compareTo(objB.getTitle())) // Logiskt, kan göras snyggare
.sorted(Comparator.comparing(move -> move.getTitle())) // Snyggare
.sorted(Comparator.comparing(Movie::getTitle)) // Snyggast
.sorted(Comparator.comparing(Movie::getTitle).reversed()) // Reversed

Unique elements

movies.stream()
    .map(Movie::getTitle)
    .distinct()
    .collect(Collectors.toList());

Peeking elements
Kan läggas in pipelinen in vid felsökning för att tex printa något.

movies.stream()
    .filter(m -> m.getViews() > 10)
    .peek(m -> System.out.println("filtered1: " + m.getTitle()))
    .map(m -> m.getTitle())
    .peek(t -> System.out.println("filtered1: " + t))
    .collect(Collectors.toList());

Reducers

// SIMPLE REDUCERS

// .anyMatch
return movies.stream()
        .anyMatch(movie -> movie.getViews() > 10 ); // Returns boolean, finns en film med mer än 10 views?

// .allMatch
return movies.stream()
        .allMatch(movie -> movie.getViews() > 10 ); // Returns boolean, har alla filmer mer än 10 views?


// .findFirst
return movies.stream()
            .findFirst() // Returns the first one it findes
            .get();

// .findAny
return movies.stream()
            .findAny() // Returns any
            .get();    

// .max
return movies.stream()
        .max(Comparator.comparing(Movie::getViews)) // Returns movie with most likes.
        .get(); 
// REDUCE 
return movies.stream()
        .map(Movie::getViews) // Sum of all views
        .reduce(0, Integer::sum);

Collector

// Get
.get(); // Tar ett objektet
.orElse("get this"); // .get or else
.orElseThrow() //  .get or else throw

// Get alt.
.reduce(0, Integer::sum) // Summan av integer annars 0. ( 0 = default ) 

Streams

Mapping

Filtering

Slicing

Peeking

⚠️ **GitHub.com Fallback** ⚠️