Hackerrank : Static Initializer Block (Java)
Static & Method Area
Intro.
Static initialization blocks are executed when the class is loaded, and you can initialize static variables in those blocks.
- 정적 변수 영역은 JVM의 메모리 영역 중 Runtime Data Area 의 Method Area에 위치한다.
- 정적 변수 & 메서드는 클래스 수준에서 정의되며, 인스턴스 변수와는 달리 객체에 종속되지 않고 클래스 자체에 속한다.
- 따라서, 클래스가 로드될 때 함께 Method Area 에 저장된다.
- 클래스의 수명 주기 동안 유지
- 로딩(Class Loader) → 연결 → 초기화 → 사용 (Heap) → 언로딩 (GC)
Method Area.
- Method Area, Heap Area는 모든 스레드가 공유한다.
- 클래스의 바이트 코드
- 메서드와 필드의 이름
- 데이터 타입 및 상수 풀과 같은 클래스 수준의 정보를 저장
JVM이 클래스를 로드할 때 사용된다.
- 클래스가 로드될 때, 해당 클래스의 바이트 코드가 Method Area로 로드
- 일반적으로 PermGen 영역이라고 불렸으나, Java 8 부터 제거
- Java 8 이상의 버전에서는 Metaspace라는 용어가 사용된다.
Flow.
- static 변수 breath, height를 선언하고 초기화 & 사용
-
if(b <= 0 h <= 0) 이면 throw Exception - else b * h : 면적을 구하는 문제이다.
Code.
import java.util.Scanner;
public class Static_Initializer_Block {
static short b;
static short h;
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
b = scanner.nextShort();
h = scanner.nextShort();
if(b <= 0 || h <= 0) {
throw new java.lang.Exception("Breadth and height must be positive");
} else {
System.out.println(b * h);
}
}
}
Leave a comment