変数
変数名ルール
- 予約語は使用禁止
- 重複宣言禁止
- 大文字・小文字・全角・半角が区別される
- 小文字で始まるのが現場ルール
- 定数は全て大文字
データ型
分類 | 型名 | 格納するデータ | 変数宣言の例 | 備考 |
整数 | byte | とても小さな整数 | byte pen = 5; | |
short | 小さな整数 | short age = 30; | ||
int | 普通の整数 | int money = 3000; | ||
long | 大きな整数 | long people = 10000000L; | ||
少数 | float | ちょっとあいまいでもいい小数 | float weight = 70.4F; | |
double | 普通の小数 | double pi = 3.14; | ||
真偽値 | boolean | true or false | boolean isError = true; | |
文字 | char | 1文字 | char initial = ‘a’; | 「’」で囲む |
文字列 | String | 文字の並び | String name = “dony”; | 「”」で囲む |
定数 | final + データ型 | 書き換えができない | final double PI = 3.14; final String NAME = “dony”; |
※最初宣言したデータ型と違う値を代入する場合はエラーになる
※定数名は一般的に大文字で宣言する
計算
int a = b + 3;
「a」「b」「3」はオペランド
「=」「+」は演算子
オペランド
リテラル
ソースコードに書いてあり、データ型を持っている値をリテラルと呼ぶ。
リテラルの応用
区分 | 例 | 解釈 |
先頭に「0x」 | int a = 0x11; (=17) | 16進数 |
先頭に「0」 | int a =005; (=5) | 8進数 |
先頭に「0b」 | int a = 0b0011; (=3) | 2進数 |
アンダースコア「_」 | long price = 5_001_000; (=5001000) | アンダースコアは無視される |
エスケープシーケンス
表記 | 意味 |
¥” | 二重引用符記号「”」 |
¥’ | 引用符記号「’」 |
¥¥ | 円記号「¥」 |
¥n | 改行 |
演算子
算術演算子
演算子 | 機能 | 優先順位 | 例 |
+ | 足し算 | 中 | 7+8→15 |
– | 引き算 | 中 | 10-3→7 |
* | 掛け算 | 高 | 4*6→24 |
/ | 割り算 | 高 | 3.2/2→1.6 9/2→4 |
% | 割り算の余り | 高 | 9%2→1 |
文字列結合演算子
演算子 | 機能 | 優先順位 | 例 |
+ | 文字列の連結 | 中 | “あ”+”い”+”さ”+”つ” → あいさつ |
代入演算子
演算子 | 機能 | 優先順位 | 例 |
= | 代入 | 最低 | a = 10 |
+= | 右辺を左辺に加算して代入 | 最低 | a += 2; |
-= | 左辺で右辺を減算して代入 | 最低 | a -= 2; |
*= | 左辺と右辺を乗算して代入 | 最低 | a *= 2; |
/= | 左辺と右辺を除算して代入 | 最低 | a /= 2; |
%= | 左辺と右辺を乗算して余りを代入 | 最低 | a %= 2; |
+= | 左辺の後に右辺を連結して代入 | 最低 | a += “あ”; |
インクリメント/デクリメント演算子
演算子 | 機能 | 優先順位 | 例 |
++ | 値を1増やす | 最高 | a++ |
— | 値を1減らす | 最高 | a– |
型の変換
代入で自動変換
代入値/代入先 | byte | short | int | long | float | double |
byte | ◎ | ○ | ○ | ○ | ○ | ○ |
short | X | ◎ | ○ | ○ | ○ | ○ |
int | △ | △ | ◎ | ○ | ○ | ○ |
long | X | X | X | ◎ | ○ | ○ |
float | X | X | X | X | ◎ | ○ |
double | X | X | X | X | X | ◎ |
強制的に変換(キャスト演算子)
int age = (int)3.2;
※あんまりおすすめしない使い方
演算時の自動変換
double a = 5.0; int b = 2; double c = a / b; // result 2.5 //doubleとして代入される
命令実行文
System.out.println( "命令実行文" ); //改行して文字列表示 System.out.print( "命令実行文" ); //改行せず文字列表示 int m = Math.max( 1, 3 ); //2つの値を比較して大きい数値を代入 int n = Integer.parseInt( "22" ); //文字列を数字に変換
上記のような関数やクラスの実行文を言う
条件分岐
関係演算子
演算子 | 意味 |
== | 左右が一致する |
!= | 左右が異なる |
> | 左が右より大きい |
< | 左が右より小さい |
>= | 左が右より大きいか等しい |
<= | 左が右より小さいか等しい |
文字列の比較
if ( str == "テスト" ) { System.out.println( "同じ" ); } //間違い if ( str.equals( "テスト" ) ) { System.out.println( "同じ" ); } //正しい
論理演算子
演算子 | 意味 |
&& | AND(両方の条件がtrue) |
|| | OR(どちらかの条件がtrue) |
分岐構文
if文
if-else構文
int a = 3; if ( a == 3 ) { System.out.println( "同じ" ); } else { System.out.println( "違う" ); }
ifのみ
int a = 3; if ( a == 3 ) { System.out.println( "同じ" ); }
if-else if -else構文
int a = 3; if ( a == 3 ) { System.out.println( "同じ" ); } else if ( a > 3 ) { System.out.println( "大きい" ); } else { System.out.println( "小さい" ); }
switch文
int a = 3; switch ( a ) { case 1 : System.out.println( "1" ); break; case 2 : System.out.println( "2" ); break; case 3 : System.out.println( "同じ" ); break; case 4 : case 5 : System.out.println( "大きい" ); break; default : System.out.println( "その他" ); break; }
※breakを書かないと次の条件が実行されてしまう
繰り返し
while文
while文
int a = 0; while ( a < 10 ) { ++a; System.out.println( a ); }
※条件が一致しない場合は一度も実行しない
do-while文
int a = 0; do { ++a; System.out.println( a ); } while ( a < 10 );
※条件が一致しなくても、最低1回はブロックを実行する
for文
for( int i = 0; i < 10; i++ ) { System.out.println( i ); }
break文
for( int i = 0; i < 10; i++ ) { if ( i == 3 ) { break; } System.out.println( i ); }
iが3になったら、forから抜ける
continue文
for( int i = 0; i < 10; i++ ) { if ( i == 3 ) { continue; } System.out.println( i ); }
iが3になったら、3の処理を中断して、4の処理を始める
三項条件演算子
int a = 3; boolean check = a == 3 ? true : false;
配列
int[] items = new int[3]; items[2] = 10; //二番目の配列に10を代入 int cnt = items.length; //配列の要素数を取得 int[] items = new int[] { 10, 20, 30, 40, 50 }; //省略記法① int[] items = { 10, 20, 30, 40, 50 }; //省略記法②
例外
int[] items = { 10, 20, 30, 40, 50 }; System.out.println( items[5] ); // 最大が4なのでエラーになる
ループによる操作
for文
int[] items = { 10, 20, 30, 40, 50 }; int sum = 0; for ( int i = 0; i < items.length; i++ ) { sum += items[ i ]; }
拡張for文
int[] items = { 10, 20, 30, 40, 50 }; int sum = 0; for ( int a : items ) { // int a には任意のデータ型と変数を入力 sum += a; }
多次元配列
int[][] items = new int[2][3]; items[0][0] = 10; items[0][1] = 20; items[0][2] = 30; items[1][0] = 40; items[1][1] = 50; items[1][2] = 60; int[][] items = { { 10, 20, 30 }, { 40, 50, 60 } }; //省略記法
メソッド
public class Main() { public static void world() { // 戻り値の型 メソッド名 System.out.println( "java world" ); } public static void main() { world(); //メソッドの呼び出し } }
※プログラムは必ずmainメソッドから始める
引数
public class Main() { public static void plus( int x, int y ) { // データ型 引数名 int result = x + y; System.out.println( result ); } public static void main() { plus( 3, 5 ); //結果 8 } }
変数のスコープとローカル変数
- スコープ:変数が利用できる場所の範囲
- ローカル変数:メソッド内で宣言した変数
//変数のスコープ public class Main() { public static void main() { int x = 10; //ローカル変数 } public static void plus() { System.out.println( x ); //スコープ外なので利用できない } }
戻り値
public class Main() { public static int plus( int x, int y ) { // 戻り値の型 return x + y; //戻り値 } public static void main() { int a = plus( 3, 5 ); //戻り値の型と同じ型を宣言 } }
オーバーロード
メソッドが同じ名前でも、引数(数やデータ型など)が異なれば同じ名前で複数メソッドを定義できる
public class Main() { public static int plus( int x, int y ) {// 基本形 return x + y; } public static double plus( double x, double y ) { // 引数の型がdouble return x + y; } public static String plus( String x, String y ) { // 引数の型がString return x + y; } public static int plus( int x, int y, int h ) { // 引数の数が多い return x + y + h; } public static void main() { int a = plus( 3, 5 ); //基本形 int b = plus( 2.0, 3.3 ); //引数の型がdouble int c = plus( "あい", "さつ" ); //引数の型がString int d = plus( 3, 5, 2 ); //引数の数が多い } }
引数や戻り値に配列を使う
public class Main() { public static int plus( int[] x ) { // 引数の型に配列設定 int sum = 0; for( int i : x ) { sum += i; } return sum; } public static void main() { int[] arr = { 3, 5 }; int a = plus( arr ); } }
配列の参照渡しについて
配列に格納されるのは、値ではなくアドレスなので引数として配列を渡すと値を渡すのではなくアドレスを渡すこと
public class Main() { public static void plus( int[] x ) { //戻り値を渡さない 引数の型に配列設定 for( int i = 0; i < x.length; i++ ) { x[ i ]++; } } public static void main() { int[] arr = { 3, 5 }; plus( arr ); for( int i : x ) { System.out.println( i ); // 数字が1つずつ多くなっている } } }
戻り値に配列を使う
public class Main() { public static int[] plus( int cnt ) { // 戻り値の型に配列設定 int[] arr = new int[ cnt ]; for( int i = 0; i < arr.length; i++ ) { arr[ i ] = i; } return arr; } public static void main() { int[] a = plus( 3 ); // 戻り値と同じ型を設定 } }
※戻り値が配列の場合にも参照渡しになる
コマンドライン引数
public static void main( String[] args ) { // コマンドライン引数
ターミナルやCMDなどを利用してJavaのプログラムを起動する時に追加情報を指定して起動する場合に、追加情報が「String[] args」の引数として利用できる
Classの基本
ファイルを分ける
※1つのファイルに1クラスを利用する
(ただし、「public」のないクラスの場合には、1つのファイルに複数記載できる)
Javaプログラムの実行方法
> java クラス名
mainメソッドが含まれているクラス名を指定して実行する
JARファイルについて
ZIPのようなjava用の圧縮データ。普段はJARを利用してデータをやり取りをする
パッケージ
package パッケージ名 //例 //Main.java package pkg.main; //pkg.mainに所属させる public class Main { ... } //Sub.java package pkg.sub; //pkg.subに所属させる public class Sub { ... } //Sub.java package pkg.sub; //pkg.subに所属させる public class Sub2 { ... }
- パッケージ設定がない場合には、無名パッケージに所属されているとみなす
- パッケージには親子関係はない、名前を統一させて管理しやすくする
- パッケージが異なれば、同じクラスを使っても問題ない
パッケージ名のルール
全世界で使われる可能性を想定して、国コード+ドメインで設定した方が望ましい
//例 dg-styleの場合 jp.dgstyle.クラス名
パッケージ登録したクラスを使う方法
//Main.java package pkg.main; public class Main { public static void main() { pkg.sub.Sub.test(); //パッケージ名.クラス名.メソッド名 } } //Sub.java package pkg.sub; public class Sub { public static void test() { System.out.println( "パッケージテスト" ); } }
パッケージ名を省略する方法(import)
import pkg.sub.Sub; //指定クラスのみ取得 import pkg.sub.*; //指定パッケージにある全てのクラスを取得
パッケージ登録したクラスの実行方法
> java pkg.main.Main //パッケージ名.クラス名
クラスパスについて
Visual Studio Codeなどを利用する場合は、拡張機能で簡単に実行できる。
ただし、ターミナルで直接実行するのであれば、クラスファイルがある正しい場所を設定する必要がある。
またパッケージの場合には、ファイルはパッケージ名のフォルダ中に入れておく必要がある
Java APIで提供されるパッケージ
java.lang | Javaの中心となる重要なクラスまとめ |
java.util | 便利機能のクラスまとめ |
java.math | 数学に関するクラスまとめ |
java.net | ネットワーク通信などで使うクラスまとめ |
java.io | ファイル読み込みなどのデータ処理に関するクラスまとめ |
※「java.lang」に関しては、importしなくても自動インポートされている