Javaの基礎をおさらい

振り返りとして纏めてみる。

@Contents

Javaプログラムの作成

public class Test {
    public static void main(String[] args) {

        System.out.println("Good morning");
        System.out.println("Hello");
        System.out.println("Good night");
    }
}
  • Javaのプログラムの1単位 -> クラス
    • このプログラムのクラスはTest
  • mainは処理をまとめたもの -> メソッド
    • この場合はメインメソッド
      • public static void main(String[] args)
  • System.out.printlnは処理=命令文。
    • 実行時は上から下に向かって、書かれた処理が順番に実行される(逐次ともいう)
  • {}:ブロック
  • インデントをして見やすく
    • Eclipse -> ⌘⇧F
    • IntelliJ -> ⌘⌥L
  • コメント://(単一行)、/* */(複数行)
    • 動作させたくないコードにも有効

起こり得るエラー

  • コンパイルエラー:プログラマの書き間違いで実行できないコード
    • 半角英数で記述
      • ""やコメントで囲った箇所は全角でもOK
    • 全角スペースはダメ
    • ファイルにつけた名前とクラス名は一致させる
    • メインメソッド(main)は必ず記述
    • 行末のセミコロン(;)を記述
    • クォーテーションや括弧の閉じを忘れない
  • 例外:処理するデータに問題があって発生するもの

Javaにおける変数の取り扱い

変数の宣言と代入

  • 変数
    • int:数値型
    • String:文字列型
  • 変数に名前をつけることを宣言という
    • 小文字で命名
  • 宣言した変数にデータを入れることを代入という
public class Variable {
    public static void main(String[] args) {

        int number1;
        String str1;

        number1 = 1;
        str1 = "abc";

        System.out.println(number1);
        System.out.println(str1);
    }
}
1
abc
  • int number1;(メインメソッドの1行目)とString str1;(〃の2行目)で変数を宣言
    • intStringは型
  • number1 = 1;(〃の3行目)str1 = "abc";(〃の4行目)で代入
    • 代入の処理には=を使用
  • 変数の宣言と代入は1行にまとめられる
    • 例: int number1 = 1;

変数を使う上での注意点

  • 変数名は自由につけることができる
    • 「分かりやすい」変数名をつけることが重要(可読性
  • プログラミングでは英語読みがデファクトスタンダード(事実上の標準ルール)
  • 計算過程を書いておくような定義の方がわかりやすい
    • 例:24 * 60 * 60 (1日の秒数)
  • コメントを添えておくと良い
  • スネークケースキャメルケース
    • スネークケースの例:seconds_per_day
    • キャメルケースの例:secondsPerDay
  • 代入されているデータは上書き可能
    • 意味もなく同じ変数名を使い回すと、プログラムが意図しない動作をする危険がある
      • 明確な意図があるときのみ使用
  • intからStringには上書きできない
  • 変数名にできないもの
    • 数字から始まる変数名
      • 例:1abca1bcは可
    • ハイフン
      • 単語をつなげる場合は_を(アンダーバー)使用
    • 予約語(ifなど)

変数のデータ型

  • 基本データ型(プリミティブ型)
    • byte
    • short
    • int
    • long
    • float
    • double
    • char
    • boolean
  • 数値型
    • 整数
    • 浮動小数点数(実数)
  • ※整数と小数に違いがある
  • ※小数を明示しない限り使えない

整数型

  • int
    • 32ビット(4バイト)
    • デフォルト値:0
    • 整数 -2147483648~2147483647(約21億)の値を扱える
    • Java8以降で符号なしの値にした場合は0〜4,294,967,295
  • long
    • 64ビット(8バイト)
    • デフォルト値:0
    • 整数 -9223372036854775808~9223372036854775807(約100京)の値を扱える
    • Java8以降で符号なしの値にした場合は0〜18,446,744,073,709,551,615
    • 数字の値の後に「i」もしくは「I
    • 小文字の「i」は数字の「1」と間違えやすいため一般的には大文字の「L」を使う
    • 例:long num = 17232185782435249L;
  • byte short
    • 性能の低い環境(昔のコンピュータ)でのみ利用を検討する価値がある
    • 現在ではintを普段使い

longは便利であるが全ての整数にlongを使えばメモリに負担がかかってしまう。なので必要なときに限ってlongを使い、普段はintを使うようにする。

小数型(浮動小数点数)

  • float
    • 32ビット(4バイト)
    • デフォルト値:0.0
    • 数字の値の後に「f」もしくは「F
  • double
    • 64ビット(8バイト)
    • デフォルト値:0.0
    • 小数を扱うときはdoubleがほとんど
    • 数字の値の後に「d」もしくは「D
    • 省略した場合はdouble型とみなされる

真偽値型

  • boolean(ブーリアン)
    • 1ビット
    • デフォルト値:false
    • true、もしくはfalseを表す真偽値
      • TFと略されることもある

文字型

  • char(キャラ、チャー)
    • 16ビット(2バイト)
    • デフォルト値:¥u0000(空文字)
    • Unicodeが持つ1文字
    • 」(シングルクォーテーション)で1文字を囲むことでchar値を指定可

参照型

String(文字を扱う)は基本データ型ではなく、参照型と呼ばれるもの。基本データ型以外の型はすべて参照型。参照とは、データが置かれているメモリ上の場所のことを指す。

null:指し示す場所が何もないということ。NullPointerException=エラー。2ちゃんの「ぬるぽ」はこれが語源。

1 :仕様書無しさん:02/06/20 15:09

   ∧_∧  
  ( ´∀`)< ぬるぽ

2 :仕様書無しさん:02/06/20 15:11

   ( ・∀・)   | | ガッ
  と    )    | |
    Y /ノ    人
     / )    <  >__Λ∩
   _/し' //. V`Д´)/ ←>>1
  (_フ彡        /
参照元:NullPointerExceptionを「ぬるぽ」と呼ぶスレ

基本データ型のラッパークラス

基本データ型を参照型として扱うこともできる=ラッパークラス。

基本データ型ラッパークラス
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
  • intchar以外は先頭の文字を大文字に変えるだけ
    • intIntegercharCharacter
  • 変換は自動的に行われる
    • 明示的に変換の命令を記述する必要はない(可能ではある)
  • 参照型の初期値はnull

四則計算+α

計算には算術演算子を使用する。

算術演算子説明
+足す
引く
*掛ける
/割る
%割った余りを求める
++1増加させる
--1減少させる
public class Arithmetic {
    public static void main(String[] args) {

        int num1 = 131;
        int num2 = 19;

        int result = num1 + num2;
        System.out.println("num1 + num2 = " + result);

        result = num1 - num2;
        System.out.println("num1 - num2 = " + result);

        result = num1 * num2;
        System.out.println("num1 * num2 = " + result);

        result = num1 / num2;
        System.out.println("num1 / num2 = " + result);

        result = num1 % num2;
        System.out.println("num1 % num2 = " + result);
    }
}
num1 + num2 = 150
num1 - num2 = 112
num1 * num2 = 2489
num1 / num2 = 6
num1 % num2 = 17
  • 5つの変数を使う方法もあるが、それだと5倍のメモリを必要とする。よって、1つの変数resultに置き換える
  • 文字列同士、もしくは文字列と数値のデータに + を使うと、文字列の連結が可能
  • 整数と整数の割り算の商は、整数値(小数点以下が切り捨て)
    • 3 / 2 を計算した結果は 1 
    • 小数値が必要な場合はキャストを行う(下記のコード)
public class Cast {
    public static void main(String[] args) {

        int a = 3;
        int b = 2;

        System.out.println(a / b);
        System.out.println((double) a / b);
        System.out.println((double) (a / b));
    }
}
1
1.5
1.0
  • キャストとはある変数の型を処理の途中で一時的に別の型に変換した上で処理を行う仕組みのこと
    • 割り算全体を double にキャストするのはダメ
      • 計算式ではなくデータ(変数)へ

Javaの例外処理

public class Exception {

    public static void main(String[] args) {
        System.out.println("処理開始");

        try {
            System.out.println("割り算開始");
            int a = 10 / 0;
            System.out.println(a);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        } finally {
            System.out.println("割り算終了");
        }

        System.out.println("処理終了");
    }
}
処理開始
割り算開始
割り算終了
処理終了
java.lang.ArithmeticException: / by zero
	at Exception.main(Exception.java:8)
  • 通常であれば0の割り算はエラーが表示される
    • ArithmeticException(算術エラー)
  • 例外処理を入れることでエラーが発生しても最後まで処理される
  • try:例外が発生しそうな箇所を囲む
  • catch:終了することなくcatch ブロック内の処理を実行
    • printStackTrace:発生した例外の内容をログへ残す際に使われる命令
    • 例外発生時の処理が不要であれば空でも良い
  • finally:特定の終了処理を必ず行ってほしい際に使用
    • try 内で例外が発生しようが正常に処理が完了したとしても
    • 必ずしも必要ではない
  • 利用するJava標準の命令によっては、例外処理(try と catch)を必ずつけなければならないものがあるので注意

Javaのメソッド

public static void sumMethod1(int num1, int num2) {
        int result = num1 + num2;
        System.out.println(result + "method");
    }
  • メソッド:自分がしたいこと=機能をひとまとめにしたブロック
    • 独自に作ることが可能
  • メソッド名:sumMethod1
  • 処理内容:{}で囲われている箇所
  • メソッドを使うことで再利用できるような仕組み化が可能
  • 引数(ひきすう):メソッド内部で処理をするために必要な値を、受け渡しをするための仕組み
    • 例:メソッド名の後の()内にあるint num1int num2
    • 外部から数値や文字などの入力がない場合は無くてもよい
  • 外部からデータをもらう必要があるときに引数は必要

戻り値の活用

public static int sumMethod2(int num1, int num2) {
        int result = num1 + num2;
        return result;
    }
  • return戻り値。計算結果を呼び出し元に戻すことが可能
    • 1行目の3単語目が戻り値の指定(int
      • 戻り値が不要:void
      • 文字列に戻したいとき:String
  • メソッドの戻り値と実際の戻り値の型は一致している必要がある
    • 例:intと書いてあれば、Stringには戻せない
  • 戻り値があることで、その結果を利用して、さらに次の処理ができる(下記例)
public class ReturnValue {

    public static void main(String[] args) {
        int num1 = 100;
        int num2 = 10;
        int result;
        result = sumMethod2(num1, num2);
        System.out.println(result + "method2");
    }

    public static int sumMethod2(int num1, int num2) {
        int result = num1 + num2;
        return result;
    }
}
110method2
  1. int num1 = 100;100を宣言
  2. int num2 = 10;10を宣言
  3. 変数 result を宣言
  4. result = sumMethod2(num1, num2);の右辺でsumMethod2を実行
  5. さきほど宣言した10010を引数として持って、sumMethod2本体へ処理が移行
  6. 引数の10010sumMethod2内部のnum1num2に引き渡される
  7. int result = num1 + num2;で足し算される
  8. その結果は左辺のresultに格納
  9. 最後のreturnresult(計算結果)を元のメインメソッドに戻す
  10. result = sumMethod2(num1, num2);の左辺のresultに、計算結果の110が代入される
public class ReturnValue2.java {

    public static void main(String[] args) {
        int num1 = 100;
        int num2 = 10;
        sumMethod1(num1, num2);

        int result;
        result = sumMethod2(num1, num2);
        System.out.println(result + "method2");
    }

    public static void sumMethod1(int num1, int num2) {
        int result = num1 + num2;
        System.out.println(result + "method1");
    }

    public static int sumMethod2(int num1, int num2) {
        int result = num1 + num2;
        return result;
    }
}
110method1
110method2
  • sumMethod1 sumMethod2:メソッド名
  • (int num1, int num2)のカッコ内のnum1num2:引数
    • 引数は何個でもよい(ゼロでも)
  • sumMethod1void
    • 戻り値なし
  • sumMethod2int
    • 戻り値あり
      • 型を指定(intString
  • return:メソッドの外に処理を戻す
  • 定義されていないメソッドを実行するとエラーになる
    • 例:メソッド sumMethod3(int, int) は型 Sample02 で未定義です

「1ヶ月内の経過秒数計算機」を作成

public class Clock {

    public static void main(String[] args) {
        int seconds = getSecond(13, 14, 38, 32);
        System.out.println(seconds);
    }

    public static int getSecond(int d, int h, int m, int s) {
        int result = 86400 * d + 3600 * h + 60 * m + s;
        return result;
    }
}
1175912

このコードを書いたときの時間は13日14時38分32秒(よって1,175,912秒)。

「税込価格を求めるプログラム」を作成。

public class Tax {

    public static void main(String[] args) {
        int tax = 10; //税率
        int nonTaxed = 1500; //税抜価格
        double result;
        result = tax(tax, nonTaxed);
        double taxIncluded = result + nonTaxed; //税込価格
        System.out.println(nonTaxed + "円の商品の税込価格は" + (int) taxIncluded + "円(消費税は" + (int)taxMethod(tax, nonTaxed) + "円)です。");
    }

    public static double tax(int tax, int nonTaxed) {
        double result = nonTaxed * (tax * 0.01); //消費税
        return result;
    }
}
1500円の商品の税込価格は1650円(消費税は150円)です。

コンピュータとJavaプログラム

  • CPUは01しか解釈できない(2進数)
  • なので機械語への翻訳が必要
    • コンパイラ型(事前にまとめて翻訳)
    • インタプリタ型(逐次一行ずつ翻訳)
  • コンパイラ型について
    • メリット:処理速度が速い
    • デメリット:プログラムコードを一文字でも変更すれば、コンパイルしなおす必要がある
  • インタプリタ型について
    • メリット:都度プログラムコードを変更しても即時実行できる(コンパイラ不要)
    • デメリット:処理速度が遅い
  • Javaは両方の特性を持った言語である
    1. Javaコンパイラ(javac)で中間言語(バイトコード -> どのハードウェアやOSにも依存しない機械語)に変換
    2. バイトコードを、実行するハードウェアやOSに合わせたJavaVMが読み込んで機械語に変換し実行
  • さまざまなハードウェアやOS上で実行可能
    • 実行するまでは中間言語
  • 分類的にはインタプリタ型
  • 変数と宣言は、メモリ上にデータを展開するため必要
  • 参照型はメモリを指し示すのでポインタとも呼ぶ

To comment

@Contents
閉じる