Java - Anton-L-GitHub/Learning GitHub Wiki
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
Classes = PascalNamingConvention
Methods = camelNamingConvention
Strings = "Always double quotation marks"
CONSTANT_VAR = Konstanta variabler
\
= Escape character
\n
= New line
\t
= Tab
System.out.printf("You are a %s", role)
s – strings
d – decimal integers
f – float numbers
t – date/time values
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 |
Refererar till en instance av ett objekt.
String
Type | default value -|-|- numbers | 0 booleans | false reference types | null
&&
= and
!
= not
||
= or
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");
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 (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");
for (statement 1; statement 2; statement 3) {
// code block to be executed
}
while (condition) {
// code block to be executed
}
do {
//code to be executed
}
while (condition);
double x = 1.1;
int y = (int)x + 3;
String -> number
int x = Integer.parseInt("2"); float y = Float.parseFloat("2.23");
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
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.
Detta är "instansvariablerna" i java.
camelCase
public static String greetUser(String firstName, String lastName) {
return "Hello " + firstName + " " + lastName;
}
Tex, en metod som får något oväntat.
- NullPointerException
- ArithmetricException
- IllegalArgumentException
- IndexOutOfBoundsException
- IllegalStateException
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.
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;
}
}
Med wildcars kan vi casta generic types.
?
public static void printUsers(List<?> users) {
users.get(2);
}
- Kan komma åt objekt i listan med ett index.
- Är ej dynamisk / fixed antal platser.
- Kan lägga till och ta bort objekt.
- Dynamsik antal platser/index
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.
- Lista utan duplicates
- Fungerar som en printer.
- Jobbar enligt en kö.
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 )
Mapping
Filtering
Slicing
Peeking