22.4.19 [HackerRank]Java Static Initializer Block
11000 ワード
🌱 背景知識
flag
백준 2753 윤년
public class Main {
public static void main(String[] args) {
boolean yearTF = true; // flag 변수를 선언.
for (int i = 2002; i < 2022; i++) {
if (i % 4 == 0 && (i % 100 != 0 || i % 400 == 0)) { //조건에 부합할 경우
yearTF = true; //flag 변수에 true,
} else {
yearTF = false; // 그렇지 않을 경우 false를 대입.
}
if(yearTF) {
System.out.println(i + ": [ 윤년 ]");
} else {
System.out.println(i + ": 평년 ");
}
}
}
}
Static Initialization Blocks
静的初期化ブロック.クラス内の静的変数またはメソッドは、クラスタイプをインスタンス化することなく呼び出しまたは参照できます.
Static Initialization Blockはクラスのロード時に一度だけ呼び出され、インスタンス変数またはインスタンスメソッドにアクセスできません.
(<->Instanceオブジェクトの作成時に呼び出され、Super作成者より先に呼び出されます.)
Q.オブジェクト作成前に初期化する理由
A.オブジェクトを作成する前にメモリも存在するため.
静的キーワードによって生成された静的メンバーは、Heap領域ではなく静的領域に割り当てられる.Static領域に割り当てられたメモリはすべてのオブジェクトで共有されますが、Garbage Collectorの管理領域の外にメモリがあるため、Static領域のメンバーはプログラムが終了する前にメモリを割り当てます.メモリはプログラムからいっぱいで、常にメモリに値を保持します.オブジェクトを作成する前にメモリも存在するため、オブジェクトを作成する前に事前初期化する必要があります.
▼▼解説と分析
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int B; // static으로 B,H를 입력 받는다.
static int H;
static boolean flag = true; //flag 변수를 true로 선언
static {
Scanner sc = new Scanner(System.in);
B = sc.nextInt();
H = sc.nextInt();
if((B<=0 || H<=0)) {
flag = false; // B나 H가 0보다 작으면 false를 내주고 아래 문구를 프린트한다.
System.out.println("java.lang.Exception: Breadth and height must be positive");
}
}
public static void main(String[] args){
if(flag){
int area=B*H;
System.out.print(area);
}
}//end of main
}//end of class
👉 リファレンス
Reference
この問題について(22.4.19 [HackerRank]Java Static Initializer Block), 我々は、より多くの情報をここで見つけました https://velog.io/@apolontes/22.4.19-HackerRankJava-Static-Initializer-Blockテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol