Interview_Java, JVM, OOP
✅ Charecteristics of Java
OOP
- Polymorphism: single function can behave differently depending on the context,
overriding(dynamic, runtime)andoverloading(static, compile time) - Abstract: get common fields and methods of classes,
interface - Inheritence: extends parent class field and method
- Encapsulation: field and method in a class,
access modifiersto limit access
- Polymorphism: single function can behave differently depending on the context,
- object is created with
new - and saved in
heap, whereGCcleans unused objects - call by value, no pointer
- multithread
- runs on
JVM, so it can run on all OS with same code
✅ Limits of Java
- slower
- JVM needs to
compilebyte code - when GC cleans unused
instances, callsStop the world Stop the world: when GC is running, all threads except GC stops running
✅ How Java is run, JVM
1. Java compiler javac
- developer writes
.javasource code javac(java compiler)will convert.java source codetobyte codewhich is stored in.class.classfile will be handed over toclass loader
2. Class Loader
class loaderwill dynamically load/link files intoruntime data JVM memory arealoading,linking,initializationclass loaderensures classes are loaded on demand, saving memory- dynamic loading: 클래스/리소스를 필요한 시점에 메모리에 load
3. Runtime data area
runtime data areais memory managed by JVMmethod area: class level data, staticheap:newinstances, objects, arrays, shared across threadsstack: local variables, parameters, each thread has own stackProgram Counter(PC): keep track of next instruciton for each threadNative Method Stack: non-Java code
4. Execution Engine
execution enginewill execute thebyte codeinterpreter: reads and executebyte codeline by line(slow)Just-In-Time(JIT) Compiler: compile bytecode to native machine code for frequently used code blocks(fast)Garbage collector: reclaim memory from objects that are no longer in referenced
✅ What is Java Byte Code?
- code that
JVMcan understand - compiled through
javac
Java interpreter 🆚 JIT compiler
- Java interpreter: reads java code line by line
- JIT compile: compile the whole programming code into executable byte code
✅ Java versions?
- Java8: lambda, StreamAPI, Optional(solve
NPE), LocalDateTime - Java11:
var(지역변수 타입 추론), new String methodsisBlank(), strip() - Java17:
Recordclass,Sealedclass
✅ JDK and JRE?
- JDK: Java Development Kit ➡️ for developing with Java
- tools for developing with Java,
Java compiler,debugging tools,JVM
- tools for developing with Java,
- JRE: Java Runtime Environment ➡️ for running Java
- environment for running Java
- to run Java, only need JRE(코드 실행만 할꺼면 JRE만 필요)
equals() 🆚 ==
equals(): value to be same==: value and memory reference adress to also be same
equals() 🆚 hashCode()
equals(): compare value of objectshashCode(): get unique hash of value- override
equals()andhashCode(): if hashcode is same, consider objects to be same - if only override
equals()but nothashCode(): same object might have different hash code, might consider two objects to beequals = false
✅ toString() 이란?
- return as
string - if override, 이쁘게
string으로 format해서 출력 - default will be
className@16bitHashCode
✅ Java의 메인 메소드는 왜 static일까?
- if
static, saved inmethod areainstead ofheap area - if
static, can call method without creating instance - thus, program entry point without needing an object
- JVM can call
main method()without creating an object - so that
main method()can run when class is created
Constant 🆚 Literal
constant: final, does not changeliteral: actual value written in the code
1
2
final double PI = 3.14; // constant
int x = 10; //literal
Primitive type 🆚 Reference type
Primitive type: basic data type,int,char,double- saved in
stack - holds
actual value - cannot be null
- saved in
Reference type: objects and arraysString,Integer,Double- saved in
heap - holds memory address
- can be null
- has methods
- saved in
✅ Java serialization
- the conversion of the state of an object into a byte stream
- change
objecttobyte stream Json - to be able to transmit as file, memory, database
- so we can then save to a database or transfer over a network
- convert object format so it can be transmitted
Overloading 🆚 Overriding
- Overloading: define another method with same name, but different parameters in single class
- Overriding: child class redefines inherited parent method
✅ What is polymorphism?
- single object can have different types
- parent class can be converted into child class type
1
2
3
4
5
6
Animal[] animalArr = new Animal[10];
animalArr[0] = new Tiger();
animalArr[1] = new Dog();
animalArr[2] = new Lion();
animalArr[3] = new Elephant();
- 👍🏻 code reusability, OCP(open to extension)
✅ What is inheritence?
- IS-A
- child class extends parent class, overrides
1
2
3
4
5
6
7
8
9
10
11
12
13
//Dog IS-A Animal
class Animal {
void eat() {}
}
class Dog extends Animal {
void bark(){}
}
Dog dog= new Dog();
dog.eat(); //inherited from Animal
dog.bark(); //defined in dog
✅ What is composition?
- HAS-A
- contain references to other classes as fields
- inheritence보다 느슨한 결합
1
2
3
4
5
6
7
8
9
10
11
12
13
//Car HAS-A Engine
class Engine {
void start() {}
}
class Car {
Engine engine = new Engine(); // Composition
void startCar() {
engine.start();
}
}
Interface 🆚 Abstract class
Interface: pure abstract class
- like a group of rules that implement classes should follow
- like a template that defines what a class must do, but not how
- 공통적인 기능을 정의해 여러 클래스가 동일한 동작을 수행하게 하고 싶을 때
- only define name of methods, 즉 abstract method(without body)
- implement class should override, define the details of method
- can implement multiple interfaces
Abstract class:
- common methods of child classes
- can have both abstract method(without body) and concrete method(with body)
- to create hierchy using inheritence
- can only extend one abstract class
✅ final keyword in java
- final field: field that does not change, constant
- final method: method that cannot be overrided
- final class: class that cannot be inherited
✅
✅
This post is licensed under CC BY 4.0 by the author.