記事ディレクトリ
2. Javaの基本文法
2.1 キーワード
- キーワードの定義と特徴
定義: Java 言語によって特別な意味が与えられ、特別な目的に使用される文字列 (単語)
特徴:キーワード内の文字はすべて小文字
公式アドレス: https://docs.oracle.com/javase/tutorial/java/nutsandbolts /_キーワード.html
2.2 識別子
さまざまな Java の識別子変数、メソッド、クラス、などの機能に名前を付けるときに使用される文字列は、識別子と呼ばれます。ヒント: 自分で名前を付けること
ができるものはすべて識別子と呼ばれます。- 法的な識別子のルールを定義します。
1. 26 文字の英字、大文字と小文字、0 ~ 9、_ または $ で構成されます。
2. 数字で始めることはできません。
3. キーワードおよび予約語は使用できませんが、キーワードおよび予約語を含めることは可能です。
4. Java では大文字と小文字が厳密に区別され、長さは無制限です。
5. 識別子にスペースを含めることはできません
- Java の命名規則
パッケージ名:複数の単語で構成される場合はすべて小文字: xxxyyyzzz
クラス名、インターフェース名:複数の単語で構成される場合はすべての単語の最初の文字が大文字: XxxYyyZzz
変数名、メソッド名:複数の単語で構成される場合は、最初の単語の最初の文字は小文字で、各単語の最初の文字は
2 番目の単語の先頭で大文字になります: xxxYyyZzz
定数名:すべての文字は大文字になります。複数の単語がある場合、各単語はアンダースコアで接続されます: XXX_YYY_ZZZ
2.3 変数
-
概念:
メモリ内の記憶領域。この領域内のデータは、同じ種類の範囲内で連続的に変更できます。変数は、プログラム内の最も基本的な記憶単位です。変数のタイプ、変数名、および保存された値が含まれます。 -
機能:
データをメモリに保存するために使用されます。 -
変数の使用に関する注意:
1. Java の各変数は、最初に宣言し、後で使用する
2. 変数名を使用して、この領域のデータにアクセスします。
3. 変数のスコープ: 変数が定義されている { } のペア内です。
4. 変数はそのスコープ内でのみ有効です
。 5. 同じスコープ内では、同じ名前は変数を定義できません -
変数の宣言
構文: <データ型> <変数名>
例: int var; -
変数の割り当て
構文: <変数名> = <値>
例: var = 10; -
変数の宣言と割り当て
構文: <データ型> <変数名> = <初期値>
例: int var = 10;
2.3.1 変数の分類
①データ型による
データの種類ごとに、明確に特定のデータ型(強く型付けされた言語)が定義され、メモリ上に異なるサイズのメモリ空間が割り当てられます。
②メソッド本体外の宣言位置に応じて
、クラス本体で宣言した変数が呼び出されます。メンバー変数。
メソッド本体内で宣言された変数が呼び出されます。ローカル変数。
同じ: どちらにもライフサイクルがあります。 違い: 仮パラメータに加えて、ローカル変数も明示的に初期化する必要があります。
2.3.2 基本的なデータ型
①整数型:byte、short、int、long
Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
Java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L。
Java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long。
②浮動小数点型:float、double
整数型と同様に、Java 浮動小数点型にも固定のテーブル番号範囲とフィールド長があり、特定のオペレーティング システムの影響を受けません。
浮点型常量有两种表示形式:
·十进制数形式:如:5.12 512.0f .512 (必须有小数点)
·科学计数法形式:如:5.12e2 512E2 100E-2
float:単精度、仮数は有効数字 7 桁までの精度になります。多くの場合、要求を満たす精度が困難です。
double:倍精度、float の 2 倍の精度。通常はこのタイプが使われます。
Java の浮動小数点定数のデフォルトは double 型で、float 定数を宣言するには、その後に 'f' または 'F' を追加します。
③文字型:char
charデータは、通常の意味での「文字」(2バイト)を表現するために使用されます。
Java のすべての文字は Unicode エンコーディングを使用するため、文字には文字、中国語、またはその他の書き言葉の文字を格納できます。
字符型变量的三种表现形式:
1.字符常量是用单引号(‘ ’)括起来的单个字符。
例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
2.Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。
例如:char c3 = ‘\n’; // '\n'表示换行符
3.直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。
如:\u000a 表示 \n。
エスケープ文字 | 説明する |
---|---|
\b | バックスペース |
\n | 改行 |
\r | キャリッジリターン |
\t | タブ |
」 | 二重引用符 |
' | アポストロフィ |
\ | バックスラッシュ |
char型が操作可能です。それはすべてUnicode コードに対応しているからです。
④ ブール型:boolean
ブール型は論理条件の判定に使用され、一般にプログラムのフロー制御に使用されます。
if条件控制语句;
while循环控制语句;
do-while循环控制语句;
for循环控制语句;
ブール型データには true と false の値のみが許可され、null は許可されません。
Java 言語式で演算されるブール値は、コンパイル後に Java 仮想マシン内で int データ型に置き換えられます。true は1 で表され、false は 0 で表されます。
⑤文字列型:文字列
文字列は基本データ型ではなく、参照データ型です。
使用法は基本的なデータ型と一致します。例: String str = "abcd";
文字列は別の文字列と連結したり、他のタイプのデータと直接連結したりできます。例えば:
str = str + “xyz” ;
int n = 100;
str = str + n;
2.3.3 基本的なデータ型変換
①自動型変換:
容量の小さい型を容量の大きいデータ型に自動変換します。データ型は次のように容量によって並べ替えられます。
- 複数種類のデータが混在する場合は、すべてのデータを最大容量のデータ型に自動変換して計算します。
- byte、short、char は相互に変換されず、計算時にこの 3 つがまずint 型に変換されます。
- ブール型は他のデータ型では演算できません。
- 任意の基本データ型の値を文字列(String)(+)で結合すると、基本データ型の値は自動的に文字列(String)型に変換されます。
練習
String str1 = 4;//真か偽の判定: false
String str2 = 3.5f + "";//真か偽の判定: true
System.out.println(str2);//出力: "3.5"
System.out. println( 3+4+"Hello!");//出力: 7Hello!
System.out.println("Hello!"+3+4);//H 出力: hello! 34
System.out.println('a '+ 1+"Hello!");//出力: 98Hello!
System.out.println("Hello!"+'a'+1);//出力: Hello!a1
② 必須の型変換
- 自動型変換の逆処理では、大容量のデータ型を小容量のデータ型に変換します。使用する場合は必須の変換文字 () を追加する必要がありますが、これにより問題が発生する可能性があります。精度の低下またはオーバーフロー、特に注意してください。
- 通常、文字列を直接基本型に変換することはできませんが、基本型に対応したラッパークラスを介して文字列から基本型への変換を実現します。
例: String a = "43"; int i = Integer.parseInt(a); - ブール型は他のデータ型に変換できません。
練習
コンパイル可能かどうかの判定
1)
short s = 5;
s = s-2; //判定: no
2)
byte b = 3;
b = b + 4; //判定: no
b = (byte)(b+ 4) ; //判定: はい
3)
char c = 'a';
int i = 5;
float d = .314F;
double result = c+i+d; //判定: はい
4)
バイト b = 5;
short s = 3;
short t = s + b; //判定: いいえ
2.4 演算子
演算子は、データの操作、代入、および比較を表すために使用される特殊な記号です。
算術演算子、代入演算子、比較演算子(関係演算子)、論理演算子、ビット演算子、三項演算子
算術演算子:
代入演算子:
記号: =
「=」の両側のデータ型が一致しない場合、自動型変換を使用するか、強制型変換の原則を使用して処理できます。
継続的な割り当てがサポートされています。
スプレッド代入演算子: +=、-=、*=、/=、%=。
比較演算子:
比較演算子の結果はboolean、つまり true または false のいずれかになります。
論理演算子:
例:
class Test {
public static void main (String [] args) {
boolean x=true;
boolean y=false;
short z=42;
//if(y == true)
if((z++==42)&&(y=true))z++;
if((x=false) || (++z==45)) z++;
System. out.println(“z=”+z);
}
}
---> z=46
ビット単位の演算子:
ビット単位の演算は、整数のバイナリ値に対して直接実行される演算です。
三項演算子:
2.5 プログラムフロー制御
フロー制御ステートメントは、プログラム内の各ステートメントの実行順序を制御するために使用されるステートメントであり、このステートメントを組み合わせて、特定の機能を完了できる小さな論理モジュールにすることができます。そのプロセス制御手法は、構造化プログラム設計で規定されている 3 つの基本的なプロセス構造を採用しています。
- シーケンス構造
プログラムは、途中での判定やジャンプを行わずに上から下へ1行ずつ実行されます。 - 分岐構造
条件に基づいてコードのセクションを選択的に実行します。
分岐ステートメントには、if...else と switch-case の 2 種類があります。 - ループ構造
ループ条件に従って特定のコードを繰り返し実行します。
while、do...while、for の 3 つのループ ステートメントがあります。
注: JDK1.5 は、コレクション要素と配列要素を走査するのに便利な foreach ループを提供します。
2.5.1 if-else 構造
使用説明書:
- 条件式はブール式(関係式または論理式)、ブール変数である必要があります。
- ステートメント ブロックに実行ステートメントが 1 つしかない場合、{} のペアは省略できますが、維持することをお勧めします。
- if-else ステートメント構造は必要に応じてネストできます。
- if-else 構造が「複数選択」の場合、最後の else はオプションであり、必要に応じて省略できます。
- 複数の条件が「排他」の関係にある場合、条件判定文と実行文の順序は関係ありません 複数の
条件が「包含」の関係にある場合、「小上大下/子上親下」
例:
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int grade = scanner.nextInt();
if(grade == 100){
System.out.println("小田的成绩为100分,奖励一辆BWM");
}else if(grade>80&&grade<=99){
System.out.println("小田的成绩为"+grade+"分,奖励一台iPhone 14");
}else if(grade>60&&grade<=80){
System.out.println("小田的成绩为"+grade+"分,奖励一个ipad");
}else{
System.out.println("小田的成绩为"+grade+"分,什么都不奖励");
}
}
}
2.5.2 スイッチケースの構造
関連するルール:
- switch(expression) の式の値は、次のいずれかのタイプである必要があります。byte、short、char、int、枚 (jdk 5.0)、String (jdk 7.0);
- case 句の値は次のようにする必要があります。絶え間ない、変数名や不定の式の値は使用できません。
- 同じ switch ステートメント内で、すべての case 節の定数値は互いに異なります。
- Break ステートメントは、case 分岐の実行後にプログラムを switch ステートメント ブロックから飛び出すために使用されます。break がない場合、プログラムは switch の最後まで順番に実行されます。
- デフォルトの句はオプション。同時に、設置場所も柔軟に対応します。一致するケースがない場合はデフォルトを実行
例:
import java.util.Scanner;
/*
从键盘分别输入年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除
或
2)可以被400整除
*/
public class DayJudge {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入year:");
int year = scan.nextInt();
System.out.println("请输入month:");
int month = scan.nextInt();
System.out.println("请输入day:");
int day = scan.nextInt();
int sumDays = 0; // 定义一个变量来保存总天数
switch (month) {
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
// sumDays += 28;
// 判断year是否是闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
sumDays += 29;
} else {
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");
}
}
2.5.3 ループ構造
①forループ
- 文法形式:
for (①初期化部; ②ループ条件部; ④反復部){
③ループ本体部;
} - 実行プロセス:
①-②-③-④-②-③-④-②-③-④-…-② - 説明:
②ループ条件部分はブール型の式で、値が false の場合、ループを終了します。
①初期化部分では複数の変数を宣言できますが、それらはカンマで区切って同じ型にする必要があります。
④複数の変数をカンマで区切って更新できます。
例:
/*
输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
*/
class shuixian
{
public static void main(String[] args)
{
for(int i=100;i<1000;i++){
int b=i/100;//百位
int s=i/10%10;//十位
int g=i%10;//个位
if(i==b*b*b+s*s*s+g*g*g){
System.out.println(i);
}
}
}
}
②whileループ
- 文法形式:
①初期化部
while(②ループ条件部){
③ループ本体部;
④反復部;
} - 実行プロセス:
①-②-③-④-②-③-④-②-③-④-…-② - 注意:
④の繰り返し部分の宣言を忘れないように注意してください。そうしないと、ループを終了できず、無限ループになります。
for ループと while ループは相互に変換できます。
public class WhileLoop {
public static void main(String args[]) {
int result = 0;
int i = 1;
while (i <= 100) {
result += i;
i++;
}
System.out.println("result=" + result);
}
}
③do-whileループ
- 文法形式
①初期化部;
do{ ③ループ本体部④反復部}while(②ループ条件部); - 実行プロセス:
①-③-④-②-③-④-②-③-④-…② - 説明:
do-while ループはループ本体を少なくとも 1 回実行します。
例:
public class DoWhileLoop {
public static void main(String args[]) {
int result = 0, i = 1;
do {
result += i;
i++;
} while (i <= 100);
System.out.println("result=" + result);
}
}
ループ構造の包括的な例:
/*
从键盘输入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序
*/
import java.util.Scanner;
class TestExer
{
public static void main(String[] args)
{
Scanner s=new Scanner(System.in);
int a=0;//记录正数的个数
int b=0;//记录负数的个数
for(;;){
//for死循环
System.out.println("请输入一个整数:");
int num=s.nextInt();
if(num>0){
a++;
}else if(num<0){
b++;
}
else{
break;//死循环中必须要有退出循环语句,否则会一直陷入死循环
}
}
System.out.println("正数个数:"+a);
System.out.println("负数个数:"+b);
}
}
④入れ子のループ
- ネストされたループは、ループを別のループの中に配置することによって形成されます。このうち、for、while、do...while は外側のループまたは内側のループとして使用できます。
- 本質的に、ネストされたループは、内側のループを外側のループとして扱うループ本体です。内側のループのループ条件が false の場合にのみ、内側のループが完全に飛び出し、外側のループの現在のループを終了し、次のループを開始できます。
- 外層のループ回数を m 回、内層のループ回数を n 回とすると、実際には内側のループ本体をm*n回実行する必要があります。
特別なキーワードの使用: ブレーク、続行
- Break はswitch ステートメントとループ ステートメントでのみ使用できます。continue は、ループ ステートメント内でのみ使用できます。
- 2 つの機能は似ていますが、Continue は現在のサイクルを終了し、break は現在のレイヤーサイクルを終了します。
- プログラムは後続のステートメントを実行しないため、break と continue の後に他のステートメントを置くことはできません。
- ラベル付きステートメントは、ループの先頭にすぐに現れる必要があります。ラベル付きステートメントをループ以外のステートメントの前に置くことはできません。
- 多くの言語には goto ステートメントがあり、プログラム内の任意のステートメントに制御を自由に移して実行できます。ただし、プログラムにエラーが発生しやすくなります。
Java での Break と continue はgoto とは異なります