Aritalab:Lecture/Programming/Java
Line 1: | Line 1: | ||
+ | {{Lecture/Header}} | ||
==Java プログラミング== | ==Java プログラミング== | ||
===プログラムの書き方=== | ===プログラムの書き方=== |
Revision as of 14:05, 7 October 2010
Wiki Top | Up one level | レポートの書き方 | Arita Laboratory |
|
Java プログラミング
プログラムの書き方
Eclipseのような統合環境でプログラムを書く場合、自動的にインデントが入ります。インデントはプログラムを読みやすくする(特に{}の対応)ために入れるので、崩さないようにしましょう。Emacsの場合は、JDEなどを使ってください。
Eclipseの場合は、Menu→Source→Formatで崩れたインデントを修正できます。自分流にインデントしたい人はPreferences→Java→Code Styleで変更できます。
コンパイルの仕方
全てのプログラムはクラスの集合として表現されます。 ファイル名はそのファイル内に記述するクラス名にします。 ファイル集合の中で、どこかに一箇所、スタートする位置としてmain関数をおきます。
- Hello World!と書く Test.java
public class Test { public static void main(String[] args) { for(int i=0; i < args.length; i++) System.out.println(args[i]); } }
コンパイルして実行してみましょう。
$ javac Test.java [1]+ Done $ java Test Hello World Hello World
基本データ型
変数は必ず型を持ち、異なる型の間では型変換を行う必要があります。
また、各基本データ型int, float, double等はクラスと互換性が無いため、それぞれInteger, Float, Doubleというクラスが用意されています。
浮動小数点の精度 |
---|
Javaで小数とfloatを一緒に使うと、「精度が落ちている」とエラーになります。メモリは気にせず常にdoubleを使いましょう。 |
float f = 3.14; // コンパイルエラー。精度が落ちている。3.14fならOK double d = 3.14; // OK
コンパイラは、自明な型変換なら自動で行ってくれます。
Integer I = 1; // 基本データ型をIntegerクラスに型変換 int i = I; // クラスIの中身を基本データ型に型変換
Stringクラスとchar[]
Javaで文字列を扱うときはStringクラスを使うのが一般的です。 C言語のようにchar配列も使えますが、Stringクラスのほうが圧倒的に便利です。 Java API仕様のString Classは熟読しておくと便利です。
String str = "abcde"; String str2 = str.substring(1, 3); //部分文字列の取得 String str3 = str.replaceAll("[bc]", "ff"); //正規表現による置換 String str4 = str.split("[bd]"); //正規表現による分割 String str5 = str.trim(); //前後の空白を除いたコピー作成 String str6 = str.toLowerCase(); //小文字変換
Objectとvoid*
C言語におけるvoid*型は、あらゆるポインタ型の代用となる点でJavaのObject型に似ています。 Object型はあらゆるクラスの基底クラスの型にあたります。
Integer i = 1; Double d = 1.0; Object obj = i; // エラーではない。 obj = d; // エラーではない。 obj += 3; // エラー。objは数値型ではない。
文字列と数字の変換
よく必要になるのは、文字列型から数値への変換です。
String str = "3.1415"; float pi = Float.valueOf(str); // piに3.1415という数値が入る。 int pi = Integer.valueOf(str); // コンパイルエラー。3.1415は整数ではない。
逆に、数値を文字列にするには+記号で大丈夫です。この演算子はオブジェクトに定義されるtoString()というメソッドを呼び出して文字列をつなぎます。
String str = "Value of pi is " + 3.14;
上の1行は簡単に見えますが、まず3.1415という数値がDouble型のクラスに変換され、toString()メソッドにより文字列型に変換されてから、StringBufferという別のクラスが内部的に呼び出されて文字列を結合する処理が処理系の中で行われます。
クラス
オブジェクト単位でデータを管理するのに、クラスを定義します。
クラスライブラリ
Javaの特徴は優れた標準クラスライブラリが付属していることです。 ライブラリのクラス一覧はJava API仕様で参照できます。 ライブラリの使い方等は上記のサイトを参照するのが一番便利です。 ライブラリを自分のプログラム中で利用するには、importコマンドを使います。 よく使うのは、
- java.io.*
- java.text.*
- java.util.*
などでしょう。
I/Oライブラリと例外処理
Javaでファイルとの入出力を行う際には、必ず例外処理(exception)の手続きをしなくてはなりません。 処理する内容はtry{ 通常処理 } catch (Exception e) { 例外処理 }の構文で記述します。キャッチするExceptionには様々なサブクラスがあり、例外毎に異なる処理を行える仕組みになっています。
例外処理 |
---|
プログラムの実行中に予期しない異常が発生した際に行う手続きのこと。
例えば開こうとしたファイルが存在しなかったり、アクセスできなかったりする入出力関係の例外が代表的。 |
- ファイルから1行ずつ読み込んで正規表現検索をする Grep.java
import java.io.*; // ioライブラリの全クラスを使えるようにする。 import java.util.regex.*; public class Grep { public static void main(String[] args) { if (args.length < 2) { System.err.println("Usage: Grep pattern file"); System.exit(1); } try { Pattern p = Pattern.compile(args[0]); // java.util.regexで定義される正規表現 BufferedReader br= new BufferedReader (new FileReader(args[1])); // java.ioで定義されるクラス String line; while ((line = br.readLine()) != null) { Matcher m = p.matcher(line); if (m.find()) System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } }
実行例
$ java Grep Grep Grep.java public class Grep { { System.err.println("Usage: Grep pattern file"); $