2021-12-03レッスン内容
(1)変数
->メモリタイプメモリ名;
-> datatype variable;
-> ex) String str;
(2)変数のデータ型
1)整数
1byte byte a;//-128 ~ +127
2byte short b;//-32768 ~ +32767
4byte int c;//約-21億~+21億
8byte long d;//約-922経~+922経
2)浮動小数点
4byte float x;//有効桁数7桁
8byte double y;//有効ビット数15ビット
3)ロジック
(4byte) boolean v;
4バイトが指定されていません.
4)文字
2byte char ch;//UCS-2ベースの0~65535の16ビットコード
1)2)3)4)->この8つのデータ型をjava元データ型,java元データ型と呼ぶ.
5)参考
(3)文字転送とURL符号化
URLを書くときは、文字使用規則に従って変換します.(RFC 3986)
英語、数字、特殊文字は変換せずに送信されます.
上記の状況でなければ.パーセンテージエンコーディング(URLエンコーディング)に従って、文字に付与された整数値を文字列「%%」に変換します.
これは,7ビットのネットワーク機器を通過する際にデータが遮断されることを防止するための措置である.
ex)
!(0x21) -> "%21"
#(0x23) -> "%23"
+(0x2B) -> "%2B"
?(0x3F) -> "%3F"
はい(0 xEAB 080)->「%EA%B 0%80」
(4)論理値の送受信
JVM内部では,true,falseを整数値(1,0)としてboolean変数に直接格納することはできない.
ただし、ブラウザではスプリングが起動すると介入するため、変数に1、0などを格納すると、通常true、falseが出力されます.
(5)異なるサイズの変数に値を割り当てる
変数の値を他の変数に格納する場合は、値のサイズにかかわらず、同じメモリまたは大きなメモリでなければなりません.
ex)
long l = 100;
int i = 100;
short s = 100;
byte b = 100;
char c = 100;
long l2;
int i2;
short s2;
byte b2;
char c2;
// long ===> long 이상
l2 = l;
//i2 = l; // 컴파일 오류
//s2 = l; // 컴파일 오류
//b2 = l; // 컴파일 오류!
//c2 = l; // 컴파일 오류!
// int ===> int 이상
l2 = i;
i2 = i;
//s2 = i; // 컴파일 오류!
//b2 = i; // 컴파일 오류!
//c2 = i; // 컴파일 오류!
// short ===> short 이상
l2 = s;
i2 = s;
s2 = s;
//b2 = s; // 컴파일 오류!
//c2 = s; // 컴파일 오류! char(0 ~ 65535) | short(-32768 ~ 32767)
// byte ===> byte 이상
l2 = b;
i2 = b;
s2 = b;
b2 = b;
//c2 = b; // 컴파일 오류! char(0 ~ 65535) | byte(-128 ~ 127)
float f;
double d;
d = 3.14;
// 값의 유효 여부에 상관없이 메모리 크기가 큰 변수의 값을 작은 크기에 변수에 저장할 수 없다.
//f = d; // 문법 오류!
(6)案
これは、複数の同類メモリを作成する文です.
int age1, age2, age3 ...; このようにしてメモリの割り当てを継続するのは非効率です.
int age = new int[30]; このように、アレイを使用して4バイトメモリを30個作成します.
new int[30]; ->ここでnewはメモリを準備するコマンドです.
int age[30]; そうは使いません->これはC/C++言語の文法です.
各メモリにアクセスするには、次の方法を使用します.
age[0]=98;
age[2]=80;
age[29]=100;
(7)アレイの利用
(8)アレイとメモリ
変数の宣言は、特定のデータ型と特定のサイズのメモリを準備することです.
int age1, age2, age3, age4, age5, age6, age7, age8, age9;
同じ値を複数格納する必要がある場合は、上記の名前に似た変数名が使用されます.
また、保存する値の数が増えると、宣言変数がさらに面倒になります.
int[] age; : アレイメモリの準備ができたら、そのアドレスを返します.
--ageはアドレスを含む変数referenceであり、CまたはC++はこの概念をポインタと呼ぶ.
--ここのアドレスは絶対的な位置ではなく、offsetaddressと呼ばれる基点の位置からです.
--より詳細には、RAMはオペレーティングシステムによって管理され、プログラムがそれを使用する場合、オペレーティングシステムによって受信される必要がある.アドレスとは、RAMにoffset addressをアドレスとする特定のメモリについて、何番目に離れたメモリの概念である.
age距離offsetが200回目の場合、これはaddressです.
new int[5]; : 配列メモリの各項目の番号をインデックスと呼びます.
int age = new int[5]; : ageのメモリには200番目のアドレスが含まれており、他のメモリには各配列の値が含まれています.
--この場合ageをreference(参照変数)と呼びます.(正確には配列参照)
=>ここにアドレス以外の値が含まれている場合、コンパイルエラーが発生します.
(9)参照と例
Netwint[5]->ここで割り当てられたメモリアドレスもすべて200です.
int[] arr2; 活動場所を表す
arr2=arr1; arr 1メモリに格納された値をarr 2メモリにコピーすることで、2つの配列のアドレスが同じであるため、arr 1[1]とarr 2[1]は同じ配列エントリを指す.
(10)参照とインデックス
配列の大きさは5であり、age[4]のみであり、有効なインデックスでなければArrayOutofBoundExceptionが発生する.
(11)アレイの作成時にアレイが多すぎる
配列の最大サイズは(Integer.MAXVALUE-2)であり、//JVMルールではこのように記述されている.
Exception in thread "main"java.lang.OutOfMemoryError:requested配列サイズが仮想マシン制限を超えている=>以下のエラー仮想マシンアレイサイズ制限を超えている場合は、アレイの最大サイズを下回るように設定してください.
Exception in thread "main"java.lang.OutOfMemoryError:Java heap space=>以下のエラーは、JVMがOSライセンスのメモリサイズを超えているため、以下の方法で解決します.
--JVMの実行時に最大ヒープメモリサイズを増やすには、JVMの実行オプションに次の内容を追加します.
--Xmxメモリサイズ
ex)$java-Xmx 9 g:9ギガビット
--RAMが小さくても、メモリが不足している場合はROMを使用します.処理速度はRAMより著しく遅い.
(12)GarbageとGarbage Collector
int[] arr1 = new int [5]; 時arr 1のアドレスは200です.
arr1 = new int [3]; ここでarr 1には新しいアドレス700が割り当てられる.このとき、上の行(5つの配列)の参照は消えているため、アクセスできません.
この場合,既知のアドレスの参照がないため,再利用できないメモリをゴミと呼ぶ.
ごみはjavaプログラムの終了時にすべて消えます.osはjavaに使用させるすべてのメモリを回収するからです.
Javaプログラムが停止せずに実行されると、ゴミ回収器は適切な時間(メモリ不足やCPUアイドル時)に自動的にゴミを除去します.
(13)アレイインスタンスの自動初期化
->したがって、アレイメモリも作成時に自動的にデフォルト値に初期化されます.
--整数配列(byte[]、short[]、int[]、long[]):0
--浮動小数点配列(float[],double[]):0.0
--論理配列(boolean[]):false
--文字配列(char[]):"<00'->null
--アドレス変数(Object[]):null
int[] arr1;
arr1 = new int[5];
arr1[0] = 100;
arr1[1] = 90;
arr1[2] = 80;
arr1[3] = 70;
arr1[4] = 60;
// 배열 변수에 들어 있는 값의 합계를 구해 보자!
int sum2 = 0;
for (int item : arr1) {
sum2 = sum2 + item;
}
System.out.println(sum2);
上記のコードを実行し、arr 1の各itemの値を各文に対して和2の値に順次加算して入力します.これは配列の最後の項目に繰り返し、sum 2にarr 1のすべての値を加算する値を入力します.(14)配列参照とnull
-ex)
int[] arr1;
arr1 = new int[5];
arr1 = null;
これにより、参照のアドレス値が0に設定され、参照が何も指定されないようになります.ただしarr 1=0;このように使えません.
=>無理に使用すると、次のエラーが発生します.
Exception in thread "main"java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from int to int[]
インスタンスの場合、初期化ではありません.ずっと記憶に残る.
レポートがアレイインスタンスを指さずに使用しようとした場合.
System.out.println(arr1[0]);//NullPointerException実行エラーが発生しました.
(15)アレイメモリの初期化
1)アレイ宣言+初期化
シェイプ:データ型[]変数名=新規データ型[]{値、値、値]
アレイメモリを初期化する場合は、アレイの数を指定しないでください.
初期化配列の値の数に基づいてメモリを作成します.
すなわち,各値の数が3つのintメモリが生成される.
ex) int[] arr = new int[]{10, 20, 30};
newコマンドは省略できます.
データ型[]変数名={値、値、値};
ex) int[] arr = {10, 20, 30};
シェイプ:
データ型[]変数名;
変数名=newデータ型[]{値,値,値};
ex)
int[] arr1;
arr1 = new int[]{10, 20, 30};
変数を宣言して配列を再初期化する場合、newコマンドを省略することはできません.
Reference
この問題について(2021-12-03レッスン内容), 我々は、より多くの情報をここで見つけました https://velog.io/@infrawhale/2021-12-03-수업내용テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol