2.Javaデータ型、変数、配列


1.基本タイプと値の範囲およびデフォルト


基本タイプ(primitive type)は、メモリスペースに直接データを格納するタイプです.
元のタイプのメモリのデフォルト値範囲の整数バイト1 byte 0-128~127 short 2 byte 0-32768~32767点4 byte 0-2174848648 byte 0-922337203685475808~922337203685475808実数型float 4バイト0.0 F(3.4 X 10−38)~(3.4 X 1038)の近似値は8バイト0を倍加する.0(1.7 X 10-308)~(1.7 X 308)の近似値文字2バイト(Unicode)"<00'0から65.535論理boolean 1 bytefalse,false

2.基本型と参考型


Javaのデータ型は基本型と参照型に大別される.両者の最大の違いは、参照またはメモリ領域にメモリを直接挿入することです.
各タイプは、変数を宣言するときに対応するメモリを受信します.この場合、基本タイプは割り当てられたメモリに直接変数を含み、reprenceタイプは他の場所を参照するアドレス値を含みます.

(参考画像リンク:https://kingpodo.tistory.com/54)

3.立体的


文字とは、プログラムで直接表現される定数です.実際に格納されている値自体がメモリに格納されている不変の値です.コード内に直接書かれた値だと簡単に考えれば便利です.
文字の種類は整数、実数、文字、文字列、論理型などがあります.
int int_v1 = 0b10;	// ->2진수
int int_v2 = 010;	// ->8진수
int int_v3 = 10;	// ->10진수
int int_v4 = 0x10;	// ->16진수
long long_v1 = 10L;	// ->long타입 리터럴

//실수 타입 리터럴은 double타입으로 컴파일 되므로 
//float타입일 경우 f or F를 명시
float float_v1 = 1.1234F;	
double double_v1 = 1.234;
double double_v2 = 1.234d;
double double_v3 = 1234E-3d

char char_v1 = 'C';
char char_v2 = '유';

boolean boolean_v1 = true;
boolean boolean_v2 = 12 > 34;

String string_v1 = 'hello world!';
//모든 우항을 리터럴 이라고 부른다.

4.変数の宣言と初期化方法

int num; 変数の宣言int num = 1;初期化変数
変数を宣言し、値を最初に保存することを変数初期化と呼びます.場合によっては、変数宣言後すぐに初期化してもよいし、初期化しなくてもよいが、可能であれば宣言と同時に初期化したほうがよい.メンバー変数は初期化する必要はなく、変数タイプのデフォルト値で初期化してもよいが、領域変数は宣言後に使用する前に初期化しなければならない.
class Init{
	int num;
    int sum = num;	//인스턴스 변수
    
    void method(){
    
    int x;		//지역 변수
    int y = x; // 에러(x 초기화 후 y에 초기화 가능)
    
    }
}
//컴파일러는 초기화 되지 않은 지역 변수에 기본값을 할당하지 않기 때문에 컴파일 타임 오류가 발생한다.

5.変数のスキャンとライフサイクル


変数の範囲とは?
変数の有効範囲/領域にアクセスまたはアクセスできます.
一般的なルールは、宣言変数のブロック内でのみアクセスできます.
{ var num = 10 ... }
public class Varcope{
	int num = 10;
    
    public static void main(String[] args){
    	int num = 20;
        System.out.println(num);
        
    }
}
上記のコードを実行するとnumの値は20に出力されます.int num = 20;もしmainブロック内にこの文がなかったら?
numの値出力は10です.
すなわち、呼び出した瞬間にブロック内で変数を探すと、他のブロックで変数のルールが参照される.
変数の生存時間とは?
メモリ内の変数の生存時間
領域変数に対応するブロックの開始点から終了点まで有効です.
パラメータに対応するメソッドの始点からメソッドの終点まで有効です.
int sum(int num){//매개변수
	int num2;//지역변수
}
インスタンス変数クラス内、メソッド/ブロック外で宣言された変数は、クラスのインスタンスの作成と参照の前に有効です.
public class Life{
	int var; //인스턴스 변수
    {
    	int localVariable; //지역변수
    }
    
    int helloLife(int time){ //매개변수
    	int time; //지역변수
    }	
}

public class Lifes{
	public static void main(String[] args){
    	Life now = new Life();//인스턴스 생성 now.time 생성됨
        now = null; //Life class 참조 해제
        //GC...now.time소멸
    }
}
クラス変数データ型の前にstaticを付け、静的データとしてJVMはクラスを参照し、プログラム実行からプログラム終了までを行う.
public calss Life{
	static int classV = 10;
    
    public static void main(String[] args){
    	System.out.println(classV); //결과값 : 10
    }
}

6.タイプ変換、鋳造、アップグレード


Javaを含む複数のプログラミング言語には、データ型を変換するためのcast演算子が存在します.
鋳造演算子を使用するタイプ変換は、2つの方法で説明できます.
  • 型鋳造(明示的変換)
  • タイプ販促(デフォルト変換)
  • タイプ鋳造は、記憶領域の大きいデータを小さいデータに変換する際に用いられる技術である.
    自動変換はできないため、開発者が明確に宣言してこそ、変換を行うことができます.
    public class Type{
    	public static void main(String[] args){
        	int casting = 10;
            
            byte ref = casting; // 에러 발생
            
            byte ref = (byte)casting //명시적 형 변환 (casting) 실행가능 
        
        }
    }
    タイプのアップグレードは、より小さなストレージ領域をより大きなストレージ領域に変換することを意味します.
    小さなデータを大きなデータに変換するプロセスは自動的に変換され、格納されるため、開発者はコマンドを個別に宣言する必要はありません.
    public class Type{
    	public static void main(String[] args){
        	int promo = 10;
            
            long ref = promo; //실행 가능 
        }
    }
    
    自動変換されるデータサイズの順序は次のとおりです.
    byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) (byte)
    ここで、なぜ8バイトのlongが4バイトのfloatに自動的に変換できるのでしょうか.
    floatは浮動小数点による表現の大きさが大きいからです.

    7.1次元配列と2次元配列の宣言


    配列とは?
  • 配列は、同じデータ型のデータを線形に組み合わせた資料構造である.
  • アレイに格納されている各データにアクセスするには、インデックスを使用して区切ります.
  • アレイは、1つの空間を有する、値を別の空間に格納し、その空間のアドレス(参照型)
  • を格納する.
    配列の宣言
    
    int[] Arr = new int[10];		//선언과 동시에 메모리 크기 할당
    int[] Arr = {1, 2, 3, 4, 5};		//선언과 동시에 값을 대입
    int[] Arr;
    メモリサイズ、宣言値、初期化を宣言と同時に割り当てることができます.
    同じタイプのデータを変数として連続的に格納および管理するためのデータ構造.
  • アレイの宣言
  • class Arr{
    	
        int[] integerArr;
        int intergerArr[]; //크기 할당, 초기화 없이 참조 변수만 선언
        
        int[] integerArr = new int[10]; //선언과 동시에 배열의 크기까지 할당
        
        int[] integerArr = {1, 2, 3, 4, 5}; //선언과 동시에 크기 할당 및 초기화
        
    }
  • 2 2 D配列宣言
  • calss Arr2{
    	int[][] integerArr2 = new int[5][5];
        
       	int[][] integerArr2 = {{1,2,3},{4,5,6},{7,8,9}};
    }
    
    2 D配列は、マトリクスを適用する問題を解決したり、2 D内でいくつかの問題を解決したりするために使用できます.
    ex)
    0 0 0 0 0 0 = {{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,1}}
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 1

    8.類型推論、var


    Java 10バージョンからタイプ推定機能が追加されました.
    これは、コンパイラがコンパイル中にソースコードにタイプを明確にする必要がなく、データ型を推定できる機能です.メソッド呼び出しと宣言、および変数またはオブジェクト宣言によって実際のタイプを推定する形式.
    
    var a = "hello" 	// String a = "hello"로 유출
    var b = 10 	 	// int a = 10으로 유출
    コメントURL
    https://gbsb.tistory.com/6
    https://blog.naver.com/hsm622/222144931396
    https://league-cat.tistory.com/411