TOP > カテゴリ > Java・Android >

Javaの基本(データ型/制御構造/配列/メソッド/パッケージ/例外) [中級者用]

Javaの使い方(目次)

目次

1. コード補完
2. 標準出力
3. 命名規則
4. データ型/変数/定数
5. 演算子
6. 数値、文字列の型変換
7. 文字列の比較、文字数の取得
8. 制御構造/条件分岐
9. 配列
10. 列挙型
11. メソッド、オーバーロード、実行時引数
12. パッケージと名前空間(複数クラス)
13. API(Application Programming Interface)
14. 例外
15. 便利なクラス、メソッド

1. コード補完

Eclipseでは「Ctrl + スペース」でコード補完を行う事が可能です。

mainメソッドを入力する場合は「main」を入力後に「Ctrl + スペース」で「mainメソッド」を選択します。

サクッとmainメソッドが自動入力されます。

次はSystem.out.println()です。

「sys」と入力した後に「Ctrl + スペース」を同時に押すと、次のようにコード補完が表示されます。

Systemを選択後に「.」(ピリオド)を入力すると次の候補が表示されます。

out:PrintStreamを選択します。後は同様にprintlnを選択すればOKです。

2. 標準出力

[標準出力の例]

public static void main(String[] args) {
    int age = 17;     // 年齢
    int body_weight;  // 体重  

    body_weight = 47;

    // 標準出力
    System.out.println("こんにちは");
    System.out.println("こん" + "ばんは");
    System.out.println(12345);
    System.out.println(3 * 6);
    System.out.println(3.14 * 100 + "文字を連結" );
    System.out.println(12 / 6);

    System.out.println(age+"才");
    System.out.println(body_weight + "kg");

    // 暗黙の型変換で小数点以下が切捨てられる
    System.out.println(1 / 2);
    // 式の中に浮動小数点があれば、浮動小数点となる
    System.out.println(1 / 2.0);
    // 明示的に型変換をするとその型となる
    System.out.println((float)1 / 2);

    System.out.println(1 / 3);
}

結果

こんにちは
こんばんは
12345
18
314.0文字を連結
2
17才
47kg
0
0.5
0.5
0

3. 命名規則

Javaのファイル名はクラス名.javaとする。

クラス名の先頭は大文字にする。
クラス名の言葉の区切りは大文字にする。

例)MyClass、MyBook、GetHtmlなど

4. データ型/変数/定数

データ型

boolean真偽値true または false
char1文字(2バイトUICODE)1文字を格納
byte1バイト符号付整数-128~127
short2バイト符号付整数-32768~32767
int4バイト符号付整数-2147483648~2147483647
long8バイト符号付整数約-922京~約922京
float4バイト浮動小数点数
double8バイト浮動小数点数

変数とリテラル

<リテラルのルール>

整数は標準でint型で扱われます。
浮動小数点は標準でdouble型で扱われます。

リテラルとはソースコードに直接、記述されている数値や文字列です。

public static void main(String[] args) {
    char word1 = 'A';
    char word2 = 0x0041;
    char word3 = 65;
    char word4 = 'あ';

    String str1 = "str1の文字列";
    String str2 = "\"str2\"の文字列";
    String str3 = "";

    int val1 = 5;
    int val2 = 10;
    int val3 = val1 + val2;

    // Fはfloat宣言
    float  pi1 = 3.14F;
    double pi2 = 3.14;

    // Lはlong宣言
    long big = 123456789012345L;
    
    boolean flg1 = false; 
    boolean flg2 = true; 
    
    System.out.println(word1);
    System.out.println(word2);
    System.out.println(word3);
    System.out.println(word4);

    System.out.println(str1);
    System.out.println(str2);
    System.out.println(str3);

    System.out.println(val1);
    System.out.println(val2);
    System.out.println(val3);

    System.out.println(pi1);
    System.out.println(pi2);

    System.out.println(big);
    
    System.out.println(flg1);      
    System.out.println(flg2);           
}

結果

A
A
A

str1の文字列
"str2"の文字列

5
10
15
3.14
3.14
123456789012345
false
true

定数

public class Main {

    // クラス定数(外部クラスから呼び出し可能)
    public static final int MAX_SIZE = 255;

    public static void main(String[] args) {

        // 定数(このメソッド内のみ有効)
        final int MIN_SIZE = 1;

        System.out.println(MIN_SIZE);
        System.out.println(MAX_SIZE);
    }
}

結果

1
255

5. 演算子

演算子

演算子演算書式意味
+加算a+baにbを足す
-減算a-baからbを引く
*乗算a*baとbを掛ける
/除算a/baをbで割る
%剰除算a%baをbで割った余りを求める
=代入a=bbをaに代入
+=加算と代入a+=baにbを足した値をaに代入する(a=a+bと同じ)
-=減算と代入a-=baからbを引いた値をaに代入する(a=a-bと同じ)
*=乗算と代入a*=baにbを掛けた値をaに代入する(a=a*bと同じ)
/=除算と代入a/=baをbで割った値をaに代入する(a=a/bと同じ)
%=剰余と代入a%=baをbで割った余りの値をaに代入する(a=a%bと同じ)
++増値a++式の完了後にa=a+1とする
++増値++a式が始まる前にa=a+1とする
--減値a--式の完了後にa=a-1とする
--減値--a式が始まる前にa=a-1とする

ビット演算子

演算子使用例意味
&a & 0xf論理積(AND)
|a | 0xf論理和(OR)
^a ^ 0xf排他的論理和(XOR)
~~0ビットの反転
>>a >> 2算術右シフト
>>>a >>> 2;論理右シフト

関係演算子

演算子使用例意味
>a>baはbより大きい
<a<baはbより小さい
>=a>=baはb以上
<=a<=baはb以下
==a==baとbは等しい
!= a!=baとbは等しくない

論理演算子

演算子使用例意味
!(!a)aが偽ならば真。aが真ならば偽
&&(a>0 && a<=9)aが1以上かつ9以下ならば真、それ以外は偽
||(a>100 || b==200)aが101以上またはbが200ならば真、それ以外は偽

条件演算子(3項演算子)

演算子意味
(式1 ? 式2:式3)式1が真ならば式2、偽ならば式3を式の値とする

6. 数値、文字列の型変換

Stringをint型に変換する。

public static void main(String[] args) {
    String str = "17";
    int val = Integer.parseInt(str);
    
    System.out.println(val + 1);
}

結果:18

数値をStringに変換する。(2種類)

public static void main(String[] args) {
    int val = 17;

    // あらゆる型をStringに変換する
    String str1 = String.valueOf(val);
    // int型を文字に変換する
    String str2 = Integer.toString(val);                
    
    System.out.println(str1 + " " + str2);
}

結果:17 17

7. 文字列の比較、文字数の取得

文字列を比較する。

public static void main(String[] args) {
    String str = "petitmonte.com";
  
    if (str.equals("petitmonte.com")){
        System.out.println("文字列が一致しました。");
    }else {
        System.out.println("文字列が一致しません。");
    }         
}

結果:文字列が一致しました。

文字数を取得する。

public static void main(String[] args) {
    String str = "プチモンテ";
    System.out.println(str.length());
}

結果:5

8. 制御構造/条件分岐

if文

int val = 2;
if (val == 1) {
    System.out.println(1);
}else if (val == 2) {
    System.out.println(2);
}else {
    System.out.println("その他");
}

結果:2

for文

for (int i = 0;i < 10; i++){
    System.out.println(i);
}

結果:0から9が出力される。

while文

int i =0;
while (i<10) {
  System.out.println(i++);
}

結果:0から9が出力される。

do while文

int i = 0;
do {
    System.out.println(i++);
}while (i<10);

結果:0から9が出力される。

continue,break (for,whileで使用可能)

for (int i = 0;i < 10; i++){
    if(i < 3) continue;
    System.out.println(i);
    if(i >= 8) break;
}

結果:3から8が出力される。

switch文

int val = 2;
switch(val){
  case 1 : 
      System.out.println(1);
      break;
  case 2 :
      System.out.println(2);
      break;
  case 3 :
      System.out.println(3);
      break;
  default :
}

結果:2

拡張for文(for-each文)

int lst[] = {1,2,3};

for (int val: lst){
   System.out.println(val);
}

結果:1から3が出力される。

9. 配列

public static void main(String[] args) {

    int val1[]= new int[5];
    int val2[] = {1,2,3,4,5};
    int val3[][]; // int型の2次元配列

    // String型の二次元配列
    String[][] str = { { "Sun", "Sunday" }, { "Mon", "Monday" } };

    for (int i=0;i<val2.length;i++){
        System.out.println(val2[i]);
    }

    System.out.println(str[0][0]);
    System.out.println(str[0][1]);
    System.out.println(str[1][0]);
    System.out.println(str[1][1]);
}

結果

1
2
3
4
5
Sun
Sunday
Mon
Monday

10. 列挙型

public class Main {

    // 列挙型を定義する
    public enum Animal {
        dog,
        cat,
        lion
    }

    public static void main(String[] args) {
        Animal ani = Animal.cat;
        
        // switch文
        switch (ani) {
            case dog : 
                System.out.println("犬");
                break;
            case cat : 
                System.out.println("猫");
                break;
            case lion : 
                System.out.println("ライオン");
                break;                
                
        }
        
        // if文
        if(ani == Animal.cat) {
            System.out.println("猫");
        }else {
            System.out.println("猫以外");
        }
    }
}

結果


11. メソッド、オーバーロード、実行時引数

メソッドはクラスのメンバ関数です。

メソッド

public class Main {

    // mainメソッド
    public static void main(String[] args) {
      int val = 10;

      // こんにちは が出力される
      log();

      // 11が出力される
      System.out.println(run(val));
    }

    // logメソッド
    public static void log() {
        System.out.println("こんにちは");
    }

    // runメソッド
    public static int run(int val) {
        return val + 1;
    }
}

static修飾子

staticがあるメソッドはクラスがインスタンス化されていなくても参照可能です。グローバル関数に近いです。staticの有無の違いは次のサンプルで確認できます。

public class Main {

    public static void main(String[] args) {
      int val = 10;
      
      // staticありの場合(11が出力される)
      System.out.println(CalcA.run(val));     
      
      // staticなしの場合(11が出力される)
      CalcB b =  new CalcB();
      System.out.println(b.run(val));
    }
}

// staticあり
class CalcA {
    public static int run(int val) {
        return val + 1;

    }  
}

// staticなし
class CalcB {
 
  public int run(int val) {
    return val + 1;
  
  }  
}

オーバーロード

public class Main {

    public static void main(String[] args) {
      // あいうえお が出力される
      System.out.println(run("あい"));
      // 101が出力される
      System.out.println(run(100));
    }
    
    // オーバーロード1
    public static String run(String str) {
        return str + "うえお";
    }

    // オーバーロード2    
    public static int run(int val) {
        return val +1;
    }
}

コマンドライン引数(実行時引数)

コマンドライン引数を試すにはエクリプスのメニューの[実行][実行構成]の「引数」タブに「a b c」を入力して実行ボタンを押します。

public static void main(String[] args) {
    
    // 全てのコマンドライン引数を出力する
    for(String lst : args) {
        System.out.println(lst);
    }    
}  

結果

a
b
c

12. パッケージと名前空間(複数クラス)

Javaでは1ファイル1クラスが原則ですので、複数のクラスを使用する際には別ファイルにクラスを定義する必要があります。その複数のクラスはパッケージという名前空間でクラス管理を行います。

今回はcom.petitmonte.mainとcom.petitmonte.calcの2つのパッケージの名前空間を使用して、2つのクラスを定義します。

com.petitmonte.mainMainクラス(Main.java)いつものmainメソッド
com.petitmonte.calcCalcクラス(Calc.java) 計算用のメソッド

各パッケージは「パッケージ・エキスプローラー」にあるsrcアイコンの上で右クリックをして[新規][パッケージ]で作成します。クラスファイルは各パッケージの上で右クリックで[新規][クラス]で作成します。

※リスト上でアイコンの位置がずれた場合はマウスでドロップ可能です。

[Main.java]

package com.petitmonte.main;

// com.petitmonte.calcのCalcクラスを使用する事を宣言する
import com.petitmonte.calc.Calc;

public class Main {

    public static void main(String[] args) {
        // com.petitmonte.calcのCalc.runメソッドを実行する
        System.out.println(Calc.run(10));
    }
}

[Calc.java]

package com.petitmonte.calc;

public class Calc {
  public static int run(int val) {
      return val + 10;
  }
}

importでcom.petitmonte.calc.Calcを宣言しない場合、次のようにします。

package com.petitmonte.main;
 
public class Main {
    public static void main(String[] args) {
        System.out.println(com.petitmonte.calc.Calc.run(10));
    }
}

13. API(Application Programming Interface)

Javaにはjava.lang, java.util, java.math, java.net, java,ioなど200を超えるパッケージがあります。これらをAPIと呼びます。その中でもjava.langはimportを記述しなくても自動的に読み込まれます。

java.langの代表的なクラスにはSystem,Integer,String等があります。

各APIの詳細は公式のJava(tm) Platform, Standard Edition 8 API仕様で確認できます。(その他のバージョンは検索して下さい)

14. 例外

public static void main(String[] args) {
    try {

        throw new Exception("例外を強制的に発生させます。");
        
    // 例外発生時 
    }catch (Exception e) {
         System.out.println(e.getMessage());
         
    // ここは例外の発生有無に関わらず通過する
    // ※ファイル系のハンドルなどをCloseする時などに使用する    
    }finally {
        System.out.println("finally");
    }
}

throws宣言による例外の伝播

メソッドにthrows宣言を行うと、例外発生時にメソッドの呼び出し元に例外を投げます。

public class Main {

    public static void main(String[] args) {
  
        try {
            Test.run();
        }catch (Exception e) {
             System.out.println(e.getMessage()); 
        }
   }
}

class Test{
    public static void run() throws Exception {
        throw new Exception("Test.run()メソッドで例外が発生しました。");
    }
}

Javaの標準API(クラス)のメソッドにはthrows宣言が付与されている場合があります。そのようなメソッドを使用する場合はtry .. catchまたはtry .. finallyで例外処理を行う必要があります。

15. 便利なクラス、メソッド

2つの値を比較して大きい方を返す。

public static void main(String[] args) {
    int a = 10;
    int b = 8;
    
    int val = Math.max(a,b);
    
    System.out.println(val + "の方が大きいです。");
}

2つの値を比較して小さい方を返す。

public static void main(String[] args) {
    int a = 10;
    int b = 8;
    
    int val = Math.min(a,b);
    
    System.out.println(val + "の方が小さいです。");
}

ランダムの数値を発生する。

public static void main(String[] args) {
  // 0から9までの乱数を発生させる
  int val = new java.util.Random().nextInt(10);
  System.out.println(val);
}     

処理時間を計測する。

public static void main(String[] args) {
    
    long st = System.currentTimeMillis();
    
    // ここに処理時間を計測する処理を記述する
     
     ・・・
             
    // ---------------------------------------
    
    long en = System.currentTimeMillis();
    
    System.out.println("処理時間は"(en-st) + "ミリ秒です。");
}

指定時間の間、処理を停止する。

public static void main(String[] args) {
    try {
        System.out.println("開始");
        // 2000ミリ秒(2秒)、待機する
        Thread.sleep(2000);
        System.out.println("終了");

    }catch (Exception e) {
        System.out.println(e.getMessage());
    }
}





掲示板

ソフトウェア、ハードウェアのプログラミング用の掲示板を作成しました。質問やわからない事は@掲示板でユーザー同士で情報を共有して下さい。

関連記事



公開日:2018年04月29日 最終更新日:2018年05月04日
記事NO:02641