変数

変数名ルール

  • 予約語は使用禁止
  • 重複宣言禁止
  • 大文字・小文字・全角・半角が区別される
  • 小文字で始まるのが現場ルール
  • 定数は全て大文字

データ型

分類型名格納するデータ変数宣言の例備考
整数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;
真偽値booleantrue or falseboolean isError = true;
文字char1文字char initial = ‘a’;「’」で囲む
文字列String文字の並びString name = “dony”;「”」で囲む
定数final + データ型書き換えができないfinal double PI = 3.14;
final String NAME = “dony”;

※最初宣言したデータ型と違う値を代入する場合はエラーになる
※定数名は一般的に大文字で宣言する

計算

int a = b + 3;

ab3」はオペランド

=」「+」は演算子

オペランド

リテラル

ソースコードに書いてあり、データ型を持っている値をリテラルと呼ぶ。

リテラルの応用
区分解釈
先頭に「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–

型の変換

代入で自動変換

代入値/代入先byteshortintlongfloatdouble
byte
shortX
int
longXXX
floatXXXX
doubleXXXXX

強制的に変換(キャスト演算子)

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.langJavaの中心となる重要なクラスまとめ
java.util便利機能のクラスまとめ
java.math数学に関するクラスまとめ
java.netネットワーク通信などで使うクラスまとめ
java.ioファイル読み込みなどのデータ処理に関するクラスまとめ

※「java.lang」に関しては、importしなくても自動インポートされている

TOP