1章 Javaの基礎

1.Javaの基礎
■コンパイル・実行方法
Test.java

import java.io.*;

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

C:\>Java>javac Test.java

C:\>Java>java Test
Hello Java World.

 
2.予約語
 自分で作る変数や関数などの名前を「識別子」とよぶ。プログラマーが自由に命名。ただし、制約がある。
  ・半角英数字および半角アンダーバー(_)のみ使用可。最初の一文字は英字。
  ・大文字、小文字は区別。
  ・下記の予約誤は使用不可。
予約語
abstract boolean break byte cast catch char
class const continue default do double else
extends final false finally float for goto
if implements import instanceof int interface long
native new package private protected public return
short static super switch synchronized this throw
throws transient true try void vlatile while
 ・クラス名は大文字ではじめる。 
 ・メソッドは、変数は小文字ではじめる。単語のつながりで表現し、2単語目以降の単語の初めは大文字にする。
例)
 class MyClass{
 int lengthOfLine;
 int getLength(){
     return lengthOfLine;
 }
}
 
※メソッド=機能ごと(ひとまとめ) ⇒ アンダーライン 、イタリック=クラス名
Test.java
 
import java.io.*;
 
//コメント
class Test{
    public static void main(String args[ ]) {
            System.out.println("Hello Java World.");
   }
}
 
 緑   : コメント
水色  : 予約語 
グレー  : JDKで用意されているクラス
 
3.構成
 
      ■ 一次式 ・ 識別子 ・・・・・・・・・・・・・・・ x
                         ・ 定数 ・・・・・・・・・・・・・・・・・ 30
                   ・ 文字列 ・・・・・・・・・・・・・・・ "this is a pen"
                         ・ メソッド ・・・・・・・・・・・・・・ func( )
                       ・ (演算式) ・・・・・・・・・・・・ ( x + 10 )
                       ・ 一次式(式の並び) ・・・・・ max( x,10 )
                     ・ 一次式[ 式 ] ・・・・・・・・・・ array[i]
                       ・ 一次式.識別子 ・・・・・・・・ struc.x
        
      ■ 式、演算子 式 ・・・・・・・・・・・・・・・・・・ x + y + 5
 ・1文の終わりを示す記号「;」
   ・1行の中に文が2つ以上あってもよい。コンパイラは1文を1文として認識する。
※下記の左右のプログラムは同じもの。
import java.io.*;

class Test{
    public static void main(String args[ ]) {
                  int x = 10;
                  int y = 20;
                  int z = x + y;
   }
}

import java.io.*;

class Test{
public static void main(String args[ ]) {
int x = 10;    int y = 20;       int z = x + y;
}}

ブロック
 文をブロックを表す「 { 」と「 } 」で囲む。ブロックは「一文とみなす単位」
 条件分岐(「if」、「else」)や反復(「for」「while」・・・)などは、基本的に一文しかじっこうできない。それだと不便だから、ブロックで一文とみなすことで複数の文を反復する事ができる。
 JavaはC++と同様オブジェクト指向言語である。オブジェクト指向とは、プログラムも実世界に存在するモノと考えてプログラムすること。このモノをクラスといい、データとメソッドから作られる。例えば、オブジェクト指向言語で"お絵かきソフト”を作ろうとしたとき、ペンクラスを用意し、ペンクラスには「絵を書く」というメソッドなどを用意する。
 Javaではパッケージという機能をつかう。JDKで用意されているクラスのうち、GUIを担うクラス群(ボタンやテキストエリア)は「awk」という名前でパッケージ化されている。ネットワーク関係を担うクラス群は「net」という名前でパッケージ化してある。さらに、パッケージの中にパッケージを入れることもできるので、たくさんのクラスを作った場合、整理するのがC++に比べ便利である。
 また、Javaはどのパッケージを使用するかをあらかじめ宣言しなくてはならない。
 下記の例は、javaパッケージのioパッケージの中の全てのクラスを使用できるというimport宣言である。
 (*が全てのクラスを使用するという意味)
Test.java

import java.io.*;
  
//コメント
class Test{ 
  public static void main(String args[ ]) {
       System.out.printin("Helo Java World.");
    }
}   

 Javaでは全てのプログラムはクラス内に収められる。
 クラス内に最初に実行されるべきmainメソッドを定義する。Javaでは、戻り値はvoid、引数はString型の配列と決まっている。
 基本的に1つのファイルに1クラス。クラス名とファイル名は同じ。
 
 
4.データの型と宣言
 変数を使う場合には宣言をしなくてはならない。データの型、名前、初期値を宣言する。Javaでは全て符号付。
Javaの型
  データの種類 バイト長 数値の範囲  
真or偽 boolean   true or false
整数 byte 1 -128~+127
1文字 char 2 -32768~+32767
整数 short 2 -32768~+32767
整数 int 4 -2147483648~+2147483647
整数 long 8 -263~263-1
小数 float 4 仮数部232、指数部28
小数 double 8 仮数部252、指数部211
1文字を表す「char」型は、16bit(2byte)に拡張されている。Javaが世界中の言語で使用できるように、例えば漢字も1文字で表すことができるようunicodeと呼ばれる文字コードに拡張されている。
int      a;                //変数名「a」をint型で宣言
char   ch1,ch2;     //変数名「ch1」と「ch2」をchar型で宣言
long  l;        //変数名「l
」をunsigned long型で宣言
変数の宣言を行っただけでは、変数にどんな値が入っているかわからない。宣言後、代入もなしに使用するとエラーとなる。
 
5.定数と変数
整数定数
 ・10進数      100    255    -50
 ・16進数      0x64   0xFF
 ・8進数       0144  0377
 ・文字        ’d’   ’あ’
小数定数
 円周率を表すには「3.1415」「0.31415E1」、「31415E-5」
 小数は標準でdouble型になるから、float型として扱いたい場合は数字の後に「f or F」をつくる。
代入
   int a. b;          // 変数名「a」 「b」をint型で宣言
   char ch1,ch2;  // 変数名「ch1」と「ch2」をchar型で宣言
   long l;       // 変数名「l」をlong型で宣言
   float f;      // 変数名「f」をfloat型で宣言
 
   ch1 = 'A';
   ch2 = '0x4C';    // 16進数で4Chを代入
   l = 'C';             // long型 l に'C'のASCl lコード4Chを代入
//  f = 3.1415;       // エラー!!
    f = 3.1415f;      // fを最後に付ける
    a = b = 100;   // aとbに100を代入
初期化
int a = 100;
char ch = 'あ';
int b = a = 5;    // aもbも5になる
int n = m = 100;   // このような使い方はダメ!! 
import java.io.*;
  
class Test{  
  public static void main(String args[ ]) {
        int a;
        int b = a;   // どんな値が入っているかわからないaでbを初期化することはできない
  }
}  
C:\java\>javac Test.java  
Test.java:6: Variable a may not have been initialized.  
                    int b = a;
                                 ^      
1 error 
 
6.簡単な演算
演算は式と式を演算子でつなぐ。
代入演算子
 コピー演算子ともいう。変数に定数を代入したりする場合に用いる。「=」を用いる。
「char」型の変数の値を「int」型に代入する場合のように、大きい変数に小さい変数を代入する場合はない。しかし、逆に「int」型の変数の値を「char」型の変数に代入する場合、エラーが出る。
  int    n1, n2, n3;
  char  c1, c2, c3;

  c1 = 100;
  n1 = c1;                // 代入先が型の方が大きいので問題なし

  n2 = 100;
  c2 = n2;                // エラー:小さい型には代入できない
  c2 = (char)n2;   // 明示的なキャスト/FONT>

算術演算子
 「+」(加算)、「-」(減算)、「*」(乗算)、「/」(除算)、「%」(余り) 
比較演算子
 「==」(等値)、「=!」(非等値)、「>」「>=」「<=」「<」(大小関係) 

 成り立つ場合は「真」すなわちtrue、成り立たない場合は「偽」すなわちfalseとなる。  int  n = 100;
 比較の「==」と代入の「=」は別物。
  int  n1 = 100;
  int  n2 = 200;
  int  n3;

  n3 = (n1 == n2);             // エラー:型が異なる
  n3 = (int)(n1==n2);         // エラー:キャストしてもだめ
  boolean  b = (n1==n2);    // これはOK

論理演算子 
 真と偽を論理演算で評価
  演算子 使用例 意味  
&& a && b AND(かつ)  
|| a || b OR(または)  
! !b NOT(否定)  
  int n1 = 100;
  int n2 = 200;
  int n3 = 10;

  boolean b = (n1==n2) && (n1==n3); // n1,n2,n3がすべて同じ時、bはtrueになる

これら論理演算子は、trueかfalseを演算しますので、boolean型の物しか演算できません。以下はエラー。
  int n1 = 100;
  int n2 = 200;
  int n3 = 10;

  boolean b1 = n1 && n2;    //エラー
  boolean b2 = !n2;            //エラー

 
7.ディスプレイへの表示
結果をDOS窓上に表示させることはアプリケーションとしても行いますし、現在の変数の値を表示させて、デバッグ作業の一環としてもやる。
DOS窓への文字の表示は下記のように行う。ここでは、決り文句だと覚える。
import java.io.*;
  
class Test{
       public static void main (String args[ ]) {
            System.out.print("abcdef");
            System.out.print("0123");
      }
} 
C:\java>javac *.java
  
C:\java>java Test
abcdef0123
C:\java>
「System.out.print」の引数に、文字列を渡してやる。改行はしないから、「abcdef」と「0123」は1行に表示される。
改行する場合は、「\n」を入れる。
import java.io.*;
  
class Test{
       public static void main (String args[ ]) {
            System.out.print("abcdef\n");
            System.out.print("0123\n");
      }
} 
C:\java>javac *.java
  
C:\java>java Test
abcdef
0123

C:\java>

一番最後に改行を入れる場合は、「\n」と書かなくても「println」メソッドを使うと改行される。
import java.io.*;
  
class Test{
       public static void main (String args[ ]) {
            System.out.println("abcdef");
            System.out.println("0123");
      }
} 
C:\java>javac *.java
 
C:\java>java Test
abcdef
0123

C:\java>

DOS窓には「標準出力」と「標準出力エラー」がある。標準出力は、MS-DOSのリダイレクト機能を使うとファイルに落としたりすることができる。標準エラー出力では、リダイレクト機能は、使えない。
「System.out.print」は、標準出力に出力する。標準出力エラーに表示したい場合は「System.err.printin」とする。
import java.io.*;
  
class Test{
       public static void main (String args[ ]) {
            System.out.println("abcdef");
            System.err.println("0123");
      }
} 
C:\java>javac *.java
 
C:\java>java Test > a.txt          ←リダイレクト機能 :標準出力をファイルに標準エラー出力の未表示される
0123

C:\java>type a.txt                   ←出力したファイルを表示 標準出力のみがファイルに落ちた
abcdef                                      標準出力のみがファイルに落ちた

C:\java>

printメソッドは、文字列だけでなく、数字も表示することができる。また、数字や文字列を「+」演算子でつなげることもできる。 
class Test{
       public static void main (String args[ ]) {
      int n1 = 100;
            System.out.println("n1=" + n1 +  "です");
      }
} 
C:\java>javac *.java
 
C:\java>java Test
n1=100です

C:\java>

 
8.文字列
import java.io.*;

class Test{
       public static void main (String args[ ]) {
           int          n               = 1;
            String str1                = "モーニング娘。の中で" + n +  "番目にかわいいのは";

            String strMyouji         = "後藤";
            String strNamae         = "真紀";
           String strName           = strMyouji + strNamae;
            System .out.println(str1 + strName + "だと思います");
   }
} 

C:\java>javac *.java
 
C:\java>java Test
モーニング娘。の中で1番目にかわいいのは後藤真紀だと思います

C:\java>

  エスケープシーケンス 機能  
  \n 改行(次の行の先頭に行く)  
  \t 水平タブ  
  \\ 円記号「\」(機種・OSによってはバックスラッシュ)  
  \' シングルクォーテーション「'」  
  \" ダブルクォーテーション「"」  
  \b 1文字戻る  
  \r  その行の先頭に戻る  
  \uxxxx xxxxは4行のUnicodeを表す  
import java.io.*;

class Test{
       public static void main (String args[ ]) {
           int          n               = 1;
            System .out.println
("私の\t名前は\"Mike Davis\"\nです。");
   }
} 

C:\java>javac *.java
 
C:\java>java Test
私の   名前は"Mike Davis"
です。

C:\java>