ちんあなごのプログラミング学習帳

プログラミング勉強したての赤子

MENU

Javaカンペメモ

ボク Java ワカラナイ

とある企業さんの面接前日の夜

「明日面接の時にJavaのテストやるからね!勉強してね!」

と.
エージェントさん経由伝えられたのが割と心に刺さったので、
その時Javaミリしらの状態から一夜漬けで勉強したときのメモに色々自分で見やすいように追記しました。

ちなみに手元にJavascriptの本と間違えて買ったJavaの本があったのですが
とりあえず脳死で手を動かした方が理解は早いだろうと思い
ずっとProgateやってました。課金までした。

※随時更新するので気長に待っててくだされば


【追記】 1/7 若干更新しました。

Javaの特徴

プログラミング言語は、大きく二つに分かれます。

コンパイラ型言語

コンパイラ言語は、業務システムやスマホアプリ等、プログラムの更新が容易に行えないプログラムの開発によく使われている。
コンパイラとは、ソースコードを実行可能な形式に変換してくれるプログラムのこと。


【利点】実行可能な形式への変換が事前に終わっているため、プログラムの実行が高速
【欠点】プログラムの実行のためのコンパイルに手間がかかる。
コンパイルが終わるまでエラー発生の場所がわからず、デバッグがしづらい

Javaの他にはC/C++、Go、Rust、Kotlin、Swift等。

インタープリタ型言語

コードを1行ずつ翻訳しながら実行するのが特徴。

【利点】作成したプログラムの実行結果をすぐに確認できる。デバッグしやすい
【欠点】実行速度が遅い

Webアプリケーションの開発に使われるのはこっち。
HTML、CSSPHPPythonPerlPHPRuby などがインタープリタ型言語です。

Javaの基本構文

class Hello{
  public static void main(String[] args){
    System.out.println("Hello");
  }
}

System.out.println("Hello"); ⇒ 「()の中身を出力せよ」という命令。
よく出てくる そして文の終わりにセミコロン(;)は必ずつけること。

ちなみに、lnをとってSystem.out.print("Hello");にすると次の文を表示した時に改行しなくなる。

class Helloクラス名。
Java を使って記述したプログラムは、保存する時は クラス名.java という決められた名前で保存する必要がある。
なのでファイル名は「Hello.javaとなっている。

メソッドはクラス名の中に書きます。だいたいこんな感じ

class クラス名{
 public static void メソッド名() {
    // ここにコードを書く(処理部分)
  }
}

変数

Javaでは、変数を定義するときにデータ型を書く必要がある。 連結や計算、上書きもできます。

int x = 2;
x = 3;  //3に上書きされる
x = number + 2;   //5に上書きされる
System.out.println(x); //「5」と表示される

String greeting = "こんにちは";
System.out.println(greeting + "チンアナゴさん"); 
//「こんにちはチンアナゴさん」と表示される

もちろん自己代入もできます

x = x + 10; ⇒ x += 10;
x = x - 10; ⇒ x -= 10;
x = x * 10; ⇒ x *= 10;
x = x / 10; ⇒ x /= 10;
x = x % 10; ⇒ x %= 10;

x = x + 1; ⇒ x += 1; ⇒ x++;
x = x - 1; ⇒ x -= 1; ⇒ x--;

コメントアウト

一行の場合 ▶︎ // で囲む。

// これはコメントです。

数行の場合 ▶︎ /**/ で囲む。

/*
これは
複数行の
コメントです。
*/

演算子

演算子にもいろいろ種類があります。 正式名称あまり覚えていなかったので追記。

  • 算術演算子▸ +  -  *  /  %
  • 比較演算子▸ > >= < <= == !=
  • 代入演算子▸ = +=  -= *=  /=  %=
  • インクリメント・デクリメント演算子▸ ++  –-
  • 論理演算子▸  !  ||  &&
  • シフト演算子▸ << >>

また、こういったのもあります。

データ型  変数名 = 条件式 ? 式1(trueの場合) : 式2(falseの場合);

たとえば、この条件分岐式(もし~なら〇〇、そうでなければ△△)が

int num = 1;
String result = "";
if (num == 1) {
        result = "正解"; //trueの場合
} else {
        result = "不正解"; //falseの場合
}

こうシンプルに書けるようになる。

int num = 1;
String result = num == 1 ? "正解" : "不正解";

データ型

String 文字列
int 整数(整数型、intは32ビット符号つき)
double 小数(浮動小数点数型)
boolean 真偽値

本当はデータ型にはプリミティブ型と参照型に分かれているらしい。
また、浮動小数点数型は double 以外に float もあるらしい。

Javaの型変換(組み込みメソッド)

数値型から文字型へ変換するときは、組み込みメソッドを使用するとできるようになる。 下はStringをdoubleに型変換したときのもの。 parseIntというのが組み込みメソッドですね。

public class Main {
    public static void main(String[] args) {
        String strNumber = "123";
        int number = Integer.parseInt(strNumber);
        System.out.println("変換後の数字: " + number);
    }
}

組み込みメソッドでよく使いそうなものを下記にまとめています。

String ➡︎ int parseInt
int ➡︎ String Integer.toString
String➡︎double parseDouble

データ型の強制型変換(キャスト)

int→longへ、int→double等、数字同士の型変換の時に使用。 double→int等、広い型への変換へは型変換しなくてもできるとのこと。

【データ型の扱える範囲の広さ】
double > float > long > int > short(-32768~32767) > bye(-128~128)

(変換したいデータ型)値で書いてあげると変換できます
(これをキャストという)。

例えば int型の値を大きいlongにしたい時

int i = 10;
long l = (long)i;

この例ではint型の変数iをキャスト演算子を使ってlong型に変換してから代入を行っています。
この場合は代入するよりも前の時点で既に右辺の値はlong型となっています。

キャスト演算子に関してはさっきの表にはありませんでした。C++を勉強するとよく出てくるらしい。
この辺に関しては理解が深まったら都度まとめようと思います。

qiita.com

次に計算する時に片方に合わせたい時。 たとえば、int型同士の計算で結果が割り切れない値になってしまうためdouble型にしたいとき。
ここではnumber1の方がdouble型に変換されています。

int number1 = 13;
int number2 = 4;
System.out.println((double)number1 / number2 );  //「3.25」と表示

Javaの色々な構文

switch-case文
switch (式){
  case 値A:
    // 式の値と値Aが一致したときの処理
    ...
    break;
  case 値B:
    //  式の値と値Bが一致したときの処理
    ...
    break;
  default:
    // 式の値がどのcaseの値とも一致しなかったときの処理
  ...
}

【注意】
switch-case文で使える型はint、short、char、byte、enum、String(java7~)の6つだけ
Java6以前の環境ではswitch-case文がString型に対応していないのでenumを使って工夫する必要がある。
break; はSwitch文を終了する命令。
これがないとcaseの処理後にその次のcaseの中まで実行してしまう。

while文
while (条件式){
  // 繰り返しの中で実行される処理
  ...
}

具体的には…

int num = 1;  //変数の初期化

while (num < 5){ //()内が条件
  System.out.println("num = " + num); //繰り返す処理
  num *= 2;  //処理実行 変数 num の値を 2 倍
}
//結果は [num=1(一回目)  num=2(二回目)  num=4(3回目) ]と順番に出てくる 
//num=8 は num<5 の条件を満たさずfalseなので表示されずここで終了

【注意】
・while 文の場合、最初の条件式が false となった場合には繰り返し処理が一回も行われない。
・for 文とは異なり初期化式や変化式はない。

if文(複数条件)
if (条件式1){
  // 条件式1が true のときに実行される処理
  ...
}else if (条件式2){
  // 条件式2が true のときに実行される処理
  ...
}else if (条件式3){
  // 条件式3が true のときに実行される処理
  ...
}else{
  // すべての条件式が false のときに実行される処理
  ...
}

具体的には…

int point = 3;

if (point > 90){
  System.out.println("とても良い");
}else if (point > 70){
  System.out.println("まずまずのようだ");
}else{
  System.out.println("ダメかも");
}

今回の場合は、変数 point に格納されている値を対象として、
もし90 より大きい場合は「とても良い」、 70 より大きい場合は「まずまずのようだ」、 70以下の場合は「ダメかも」とそれぞれ画面に表示します。

【注意】
Rubyには「else if」を「elsif」で記載することができたましたが、Javaではその書き方はしないようです。

boolean

booleanの初期値はfalse。
boolean型変数の宣言の仕方は「boolean 変数名」。

// 変数の宣言と値の設定を別にする場合
boolean b1;
b1 = true;

// 変数の宣言と初期値の設定を同時にする場合
boolean b2 = false;

// booleanに値を代入してみる
b1 = false;
b2 = true;

// boolean変数からの値の代入もできる
boolean b3 = b1; // → b3はfalseになる

// Javaのbooleanは数値や文字列ではないので、それらを代入できない
// 以下は全てコンパイルエラーとなる
boolean b4 = 0;
boolean b5 = null;
boolean b6 = "";
boolean b7 = "true";

if文で使用する場合、

boolean b1 = true;

if (b1) {
    System.out.println("true!"); // → b1はtrueなのでこちら
} else {
    System.out.println("false!");
}

boolean b2 = false;

if (b2) {
    System.out.println("true!");
} else {
    System.out.println("false!"); // → b2はfalseなのでこちら
}

if (b1 && b2) {
    System.out.println("true!");
} else {
    System.out.println("false!"); // → true && falseはfalseになるので、こちら
}


実はbooleanとBooleanは違うらしい。
まだ違いが理解しきれてないですが、参考記事はこちら。

www.sejuku.net

Copyright ©エンジニアを目指すちんあなご All rights reserved.