「ソフトウェア演習(B)Java言語」
Computer Programming III (Java)
ベーシックコース (Basic course)

どんなプログラム言語であれ、 コメントはとても大事です。プログラムには必ず内容を表すコメントを書く習慣にしましょう。
Comments inside any program is extremely important. Let's make it a rule to write proper comments whenever you program.

コメントは/* */(複数行の場合に推奨)または//を使ってください。
For comments, please use /* */(for multiple lines) or //.



第1回 Java言語イントロ +ファイル処理(例外処理)
Introduction to Java, File Processing (Exception Handling)

Javaとは? (What is Java?)

Java言語は、C言語と似たシンタックスを持ちますが、C, C++のような1段型のコンパイル型の言語と違うということに注意する必要があります。 Java言語のコンパイラは、バイトコードと呼ばれるマシンに依存しない中間言語(Javaのクラスファイル)に翻訳されます。 これをJavaのインタープリタを通して、実行することでプログラムが実行されます。 このとき、インタープリタが正しく起動するためにJavaを搭載するマシンには、Java実行環境 (Java Runtime Environment (JRE))がインストールされている必要があります。 JREは Java仮想マシン (JVM) とJavaアプリケーション・プログラミング・インタフェース (API)から成り立っています。 Java API は標準クラスライブラリと言い換えられます。 Java仮想マシンと Java API は互いに互換性が保証されている必要性があります。 Java言語のダウンロードサイト(以前はサンマイクロシステムズ社、現在はオラクル社)では、JRE として共にバンドルされています。 見方を変えれば、Java仮想マシンがプロセッサであり、Java API がユーザインタフェースであるような仮想的なコンピュータと考えることができます。

The Java language has a syntax similar to C, but it needs to be noted that it is different from a one-stage compiled language like C, C ++. The Java language compiler is translated into a machine - independent intermediate language (Java class file) called bytecode. By running this through the Java interpreter, the program is executed. At this time, the Java execution environment (Java Runtime Environment (JRE)) must be installed on the machine that has Java installed so that the interpreter starts properly. JRE consists of Java Virtual Machine (JVM) and Java Application Programming Interface (API). The Java API is paraphrased as a standard class library. The Java virtual machine and the Java API need to be mutually compatible. It is bundled together as a JRE at the Java language download site (formerly Sun Microsystems, now Oracle Corporation). In other words, it can be thought of as a virtual computer where the Java virtual machine is the processor and the Java API is the user interface.


なお、Java言語は、TIOBE社の調査によると、過去数年間連続で世界でもっとも人気のあるプログラミング言語です。

Java言語の基礎を説明する前にサンプルプログラムでコンパイル法と実行法を述べます。
SquaredSum.java
1 
2 
3 
4 
5 
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
	プログラム1-1:簡単なJavaプログラム例
	1からNまでの二乗和を求めてプリントする
	Program 1-1: A simple Java program
	Computing the squared sum from 1 to N, and print the result
*/
public class SquaredSum {/* クラス名(ファイル名と一致) */
  /*
  @param N: number to be square summed 
  @return 2乗和(squared sum)
  */
  public double sumSquare(int N){// SquaredSumクラス内で二乗和を計算するメンバ関数 
    double result = 0.0;
    for (int i = 0 ; i < N ; i++)
      result += (i+1)*(i+1);
    return result;
  }
  // main関数:SquaredSumクラス外(型はpublic static void)で定義する 
  public static void main(String[] args){
    int N = Integer.valueOf(args[0]).intValue();// 第一引数を入力 
    SquaredSum s = new SquaredSum();// クラスのインスタンス作成 
    double r = s.sumSquare(N);  // クラス内の関数の呼出し
    System.out.println("1から"+N+"までの2乗和の計算\n\t1*1+...+n*n = "+r);// プリント 
  }
}
プログラム1-1を用いてJava言語での典型的なオブジェクト指向プログラミングをまとめたものが以下の図となります。



Java言語でのオブジェクト指向プログラミング例

このプログラムがUTF-8符号で外部ファイルSquaredSum.javaに書かれているとします。 コンパイルは、以下のようにjavacという名前のコンパイラで実行します。
Suppose that this program is written in external file SquaredSum.java with UTF-8 code. Compilation is done by the compiler named javac as follows.


javac -J-Dfile.encoding=utf-8 SquaredSum.java

ここで、-J-Dfile.encoding=utf-8はプログラムの符号をUTF-8であると指定しているオプションです。 SJIS符号であればこのオプションは不要ですが、CやC++はUTF-8がデフォルトであることを考えれば、Javaも同じUTF-8で記述するのがいいかと思います。 もし正しくコンパイルされると、SquaredSum.classという名前の中間コード(クラスファイル)が生成されます。

Here, -J-Dfile.encoding=utf-8 is an option specifying that the sign of the program is UTF-8. This option is unnecessary if the program is encoded by an SJIS code, but considering that UTF-8 is the default for C and C++, it is better to write Java in the same UTF-8. If compiled correctly, an intermediate code (class file) named SquaredSum.class is generated.


実行は、

java -Dfile.encoding=utf-8 SquaredSum 10

のようにjavaという名前のインタープリタで行います。 このとき、main関数を含むクラス名を指定しますが、SquaredSum.classと書かずに、SquaredSumとだけ書きます。

上記のオプションはMacやLinuxで有効ですが、参考までにWindowsでJavaをインストールし、UTF-8でプログラムのコンパイルならびに実行する場合、コマンドプロンプトでは、コンパイルは、

javac -encoding utf-8 SquaredSum.java

実行は、

java -Dencoding=utf-8 SquaredSum 10

のようにオプションの書き方が少し異なるので注意してください。


最初の実行コマンドで述べた-Dfile.encoding=utf-8オプションは、UTF-8で符号化されたクラスファイルを実行するものです。 コンパイル時とオプションの記法が若干異なることに注意してください。 utf-8の部分は大文字でUTF-8でも同様です。 もし、このオプションなしに、上のプログラムを実行するとターミナルの設定によっては、結果に含まれる日本語が文字化けすることがありますので注意してください。
文字化けを避けるため、-Dfile.encoding=utf-8オプションをつけるようにしてください。 実行結果は以下のようになります。

The -Dfile.encoding=utf-8 option mentioned in the first execution command is to execute a class file encoded with UTF-8. Please note that compile time and option notation are somewhat different. The part of utf-8 is uppercase and it is the same in UTF-8. If you execute the above program without this option, depending on the terminal settings, the Japanese included in the result may be garbled, so be careful. In order to avoid garbled characters, please attach the option -Dfile.encoding=utf-8. The execution result is as follows.

$ javacu SquaredSum.java

$ javau SquaredSum 10
1から10までの2乗和の計算
        1*1+...+n*n = 385.0
        プログラム1-1のコンパイルと実行

ここで実行の際に、末尾に数値10がついているのがわかります。 10である必要はありませんが、ここは正の整数値がくることが期待されます。 その数値までの二乗和を計算するためです。 結果として、1*1 + 2*2 + 3*3 + 4*4 + 5*5 + 6*6 + 7*7 + 8*8 + 9*9 + 10*10なので385となります。 この10という外から与えた数値は、18行目のint N = Integer.valueOf(args[0]).intValue();の部分でプログラムに渡されます。 args[0]の部分が10という文字列で、 全体としてはInteger.valueOf(整数文字列).intValue()で入力文字列が10という整数に変換されることを意味します。 なお、これは、Integer.parseInt(args[0]);と書いても同じ結果が得られます。 もし、この数値を入力するのを忘れるとどうなるでしょうか?

Here we see that at the end we have the number 10 at the end. It does not have to be 10, but it is expected that a positive integer value will come here. This is to calculate the sum of squares up to that number. As a result, it is 385 because it is 1 * 1 + 2 * 2 + 3 * 3 + 4 * 4 + 5 * 5 + 6 * 6 + 7 * 7 + 8 * 8 + 9 * 9 + 10 * 10. The number given from outside this 10 is passed to the program in the portion of int N = Integer.valueOf (args [0]). IntValue (); in line 18. The args [0] part is a string of 10, which means that Integer.valueOf (integer string) as a whole, the input string is converted to an integer of 10 by intValue (). The same result can be obtained by writing Integer.parseInt (args [0]); What if you forget to enter this number?

$ javau SquaredSum 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at SquaredSum.main(SquaredSum.java:18)
        プログラムに引数を正しく与えない場合

上のようにjava.lang.ArrayIndexOutOfBoundsExceptionが発生します。 それが20行目で発生していることがわかります。
プログラムの9~10行目のコメント内に@で始まる、@paramや@returnなどがあります。 これは、javadocというクラスの文書(ユーザガイドあるいはAPIガイドとも呼ばれます)を自動的に生成する場合に有効な書法です。興味のある人は、適宜、javadocに合わせたコメントを書くようにしてください。本授業では、特に、javadocは意識せず、意味のあるコメントを書くことに重点を置きます。

A java.lang.ArrayIndexOutOfBoundsException occurs as above. You can see that it is occurring on line 20. In the comments of lines 9 to 10 of the program, there are @param and @return, etc., beginning with @. This is a valid writing method for automatically generating a document of a class called javadoc (also called user guide or API guide).

ここで述べたUTF-8のコンパイルと実行に関して、シェルとしてbashを使っていると仮定して、そこにコンパイルオプションと実行オプションをつけたコマンドを事前登録する方法を紹介します。 このために自分のホームディレクトリで、 .bashrcという名前のファイルに以下のようにaliasを、たとえば以下のように2行定義してください。

For the compilation and execution of UTF-8 mentioned here, assuming that you are using bash as a shell, I will show you how to pre - register the command with compile option and execution option there. To do this, define your alias in a file named .bashrc in your home directory as follows, for example:


alias javacu="javac -J-Dfile.encoding=utf-8"
alias javau="java -Dfile.encoding=utf-8"

この後,

source ~/.bashrc

コマンドラインからタイプすれば設定終了です。 以降は、ターミナル窓から、コンパイルは

javacu SquaredSum.java

で、 UTF-8符号のオプションをつけたものとしてjavacuという名前でコンパイルでき、

javau SquaredSum 5

のようにjavauという名前で、UTF-8符号で実行できます。


Java言語で使える名前について (Variable names in Java)