22.4.19 [HackerRank]Java Static Initializer Block

11000 ワード

🌱 背景知識


flag

  • 状態を記録し、処理フローのブール変数を制御する.条件によってtrueまたはfalseを表すブールタイプの変数であるため、切替機能にも用いられる.
  • 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

    👉 リファレンス

  • https://yjchoi010517.tistory.com/12
  • https://coding-factory.tistory.com/524
  • https://ansohxxn.github.io/cpp/chapter8-10/#chapter-8-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5%EC%9D%98-%EA%B8%B0%EC%B4%88--static-%EC%A0%95%EC%A0%81-%EB%A9%A4%EB%B2%84-%EB%B3%80%EC%88%98