JAVAコーディング

ファイルへ書込

2008年05月21日
JAVAでファイルに入出力するには、Fileクラスを使います。

import java.io.*;

FileWriter fwrite new FileWriter([args[0]);
for (int i = 0; i < 10; i++) {
  fwrite.write("Line " + i + "\n");
    ・
    ・
    ・
}
fwrite.close();


バッファを使う場合
FileWriter fwrite new FileWriter([args[0]);
BufferedWriter bwrite = new BufferedWriter(fwrite);
for (int i = 0; i < 10; i++) {
  bwrite.write("Line " + i + "\n");
    ・
    ・
    ・
}
bwrite.close();


文字コードを変換して書き込む場合
Writer fwrite = new OutputStreamWriter(new FileOutputStream(args[0]), "EUC-JP");
for (int i = 0; i < 10; i++) {
  fwrite.write("Line " + i + "\n");
    ・
    ・
    ・
}
fwrite.close();

文字コードには、Shift_JIS、ISO-2022-JP、EUC-JP、JISAutoDetectなどがあります。

JAVAコーディング

ファイルから読込

2008年05月20日
JAVAでファイルに入出力するには、Fileクラスを使います。

import java.io.*;

FileReader fread = new FileReader
while ((intRead = fread.read()) != -1) {
  ・
  ・
  ・
}
fread.close;


バッファを使う場合
FileReader fread = new FileReader
BufferedReader bread = new BufferedReader(fread);
String strVal;
While ((strVal = bread.readLine()) != null) {
  ・
  ・
  ・
}
fread.close;


文字コードを変換して書き込む場合
Reader fread = new InputStreamReader(new FileInputStream(args[0]), "EUC-JP");
while ((intRead = fread.read()) != -1) {
  ・
  ・
  ・
}
fread.close;

文字コードには、Shift_JIS、ISO-2022-JP、EUC-JP、JISAutoDetectなどがあります。

JAVAコーディング

エラー処理

2008年05月19日
try {
  例外が発生する可能性のある処理
    ・
    ・
}

catch (例外型 変数) {
  例外が発生したときの処理
    ・
    ・
}

finally {
  例外が発生しても発生しなくても行う処理
    ・
    ・
}


例外の例としては、0除算、ファイル入出力、DB接続失敗などがあります。



例外を発生させるときは、throw を使います。例外を発生させるメソッドには、throwsを使って定義しておきます。
class classA {
  public static void main(String[] args) {
    try {
      methodA();
    } catch (MyException exception) {
      System.out.println(exception.errMsg);
    }
  }
  static void methodA() throws MyException {
    MyException MyError = new MyException("エラーメッセージ");
    throw MyError;
  }
}

JAVAコーディング

import文、package文

2008年05月18日
JAVAで外部クラスを利用する場合、importします。

import dir.クラス1;
import dir.クラス2;

dirフォルダ内のすべてのクラスをインポートする場合、
import dir.*;
と書きます。

ディレクトリの区切りは【.】です。

import文はpackage文とclass文の間に書きます。


packageはいくつかのクラスやインタフェースをひとまとまりにしたものです。
クラスやインターフェイスが増えてくると、ディレクトリごとに整理するようになります。このディレクトリがパッケージ名と一致します。

コーディングしているクラスが、どのパッケージ(ディレクトリ)にあるかを示すようです。
ディレクトリの区切りは【.】です。

このため、package文はファイルの先頭に記述します。

JAVAコーディング

ループ文(for、while、do while)

2008年05月17日
JAVAでのループ処理です。

指定回数ループの繰り返し
for (int num=0; num<10; num++) {
  ・
  ・
  ・
}


trueかfalseを返す式で判定を行い、trueの間ループ処理を行います。
while (判定式) {
  ・
  ・
  ・
}

do {
  ・
  ・
  ・
} while (判定式)

whileはまず式の判定を行いますが、do whileは一度処理を実行した後判定をします。


for、while、do whileでループを打ち切るコマンドに、breakとcontinueがあります。
breakはループを終了します。ネストされているループにのみ適用されます。
continueはcontinue以下をスキップして、ループの次の条件へ移行します。

JAVAコーディング

switch文

2008年05月13日
JAVAのswitch文です。

switch (式) {
  case xxx1:
  処理1
  break;


  case xxx2:
  処理2
  break;


  default:
  処理3
  break;
}

式がxxx1の場合処理1を実行、xxx2の場合処理2を実行、どちらにも当てはまらない場合処理3を実行します。


breakがない場合
switch (式) {
  case xxx1:
  処理1


  case xxx2:
  処理2


  default:
  処理3


式がxxx1の場合処理1~3を実行、xxx2の場合処理2~3を実行、どちらにも当てはまらない場合処理3を実行します。

JAVAコーディング

if文

2008年05月12日
JAVAのifです。

if (条件) {
} else {
}


if (条件1) {
  処理1
} else if(条件2) {
  処理2
} else if(条件3) {
  処理3
} else {
  処理4
}

条件は一度当てはまると、それ以降の判定は行われません。つまり、条件2と条件3に当てはまる場合、処理2しか実行されません。

JAVAコーディング

文字列操作

2008年05月11日
x文字目~z文字目までを取得する場合、

String s = "One Two Three Four Five";
String substring = s.substring(0,10);

substringは"One Two Th"となります。


sの中で、はじめて"T"が出現する文字位置を取得する場合、
int i = s.indexOf("T");
iは5となります。

JAVAコーディング

IntegerとStringクラス

2008年05月10日
JAVAではIntegerとStringで宣言した変数はオブジェクトとなります。

String s ="120";
Integer obj = Integer.valueOf(s);
int i = obj.intValue();


String s ="120";
Integer obj = Integer.valueOf(s).intValue();


Integer obj1 = new Integer(15);
Integer obj2 = obj1;

obj1とobj2は同じオブジェクトを参照します。

JAVAコーディング

配列 その2

2008年05月09日
JAVAでの多次元配列の宣言は
int intArray[][];
です。

JAVAの多次元配列は1次元配列の寄せ集めなので、それぞれの行で次元数が異なってもOKです。
例えば次のように次元数が異なった多次元配列を作れます。
[0] [1] [2] [3] [4] [5]
[0] [1] [2] [3] [4]
[0] [1] [2] [3]
[0] [1] [2] [3] [4] [5]
[0] [1] [2]


また、
配列要素数は
intArray.length
で取得できます。

多次元配列の場合、
intArray[index].length
となります。

JAVAコーディング

配列 その1

2008年05月08日
JAVAでの配列の宣言は、

int intArray[];
intArray = new int[10];

まとめて
int iArray[] new int[10];

となります。


int j[] = {0,1,2,3,4,5};
int k[];
k = j;
jとkは同じ配列を参照します。

JAVAコーディング

クラス その3

2008年05月06日
クラスで引数がことなれば、同じ名前のメソッドを作成できるようです。
class xxx {

  method(double x){
  }

  method(double x, double y){
  }

  method(double x, double y, double z){
  }
}


ここで、引数について。
メソッド引数は全て値引渡し
配列は参照渡
となります。

JAVAコーディング

クラス その2

2008年05月05日
interface interfaceA {
  String getVal();
  void setVal(String strVal);
}


public class clsFunction implements interfaceA {
  private String strVal;

  public String getVal() {
    return strVal;
  }

  public void setVal(String strVal) {
    this.strVal = strVal;
  }
}


インターフェイスは複数指定も可能です。implements interfaceA,interfaceB,interfaceC ・・・
クラスを継承するときは、
class B extends superClassA implements interfaceA
と書きます。クラスBはsuperClassAを継承。


クラスを使用するときは
clsFunction function = new clsFunction();
function.setVal(strCode);
strCode = function.getVal;

JAVAコーディング

クラス その1

2008年05月04日
JAVAはすべてクラスを作って処理していくようです。

public class clsA {
  public static void main(String val[]) {
    ・
    ・
    ・
  }
}

staticの付いているフィールドやメソッドは、クラス固有でオブジェクト間で共有される(mainメソッドは通常static)。
voidは戻り値無しという意味です。

JAVAコーディング

関係演算子

2008年05月03日
&& (x && y) xとyの両方がtrueの場合にtrue
& (x & y) xとyの両方がブール型且つ両方ともtrueの場合にtrue
|| (x || y) xとyのいずれかがtrueの場合にtrue
| (x | y) xとyの両方がブール型且ついずれかがtrueの場合にtrue
^ (x ^ y) xとyの両方がブール型且つxとyが異なった値の場合にtrue
! (!x) xがfalse場合にtrue


更に、
((a <= 0) & (c < b/a))
a <= 0とc > b/aの両方が評価される

((a <= 0) && (c < b/a))
a <= 0が偽ならc < b/aは評価されない

JAVAコーディング

比較演算子

2008年05月02日
JAVAの比較演算子です。

==
!=
>=
<=

ただし、オブジェクトの比較に==を使うと、オブジェクトが参照する参照元を比較します。こういう場合はequalsを使います。
等しい
strVal.equals(strVal2.toString())
等しくない
!"2".equals(strVal)

JAVAコーディング

数値から文字列への変換

2008年04月27日
数値から文字列への変換方法です。

String strVal = String.valueOf(numVal)

numValの型は、int、short、byte、long、float、double型です。

JAVAコーディング

文字型変数の宣言

2008年04月23日
文字型変数の宣言方法です。

String strVal = "S";

JAVAコーディング

数値型変数の型変換

2008年04月21日
型の異なる数値への型変換の方法です。

byte bytNum;
int intNum = 127;
bytNum = (byte)intNum;

これで、int型の変数intNumに代入されている数値を、byte型に変換。

(int)xxxxx;
ならint型に変換。

JAVAコーディング

数値型変数の宣言

2008年04月17日
せっかくJAVAでのコーディングをした(やさられた)ので、忘れないうちにまとめておこうかと思います。といってもほとんど忘れていますが。


int num;
num = 100;

まとめて
int num = 100;
と書くことも可能。


intの他にも
byte
long cnt = 100000L; または 100000l
float f = 1.5e-3f; または 1.5e-3F
double
の型があります。

JAVAコーディング

ArrayListとArray

2008年03月19日
JAVAにはArrayListとArrayがあるようです。どう違うのでしょう。

ソースを見ていると、ArrayListは2次元配列のように思えます。見よう見真似でコーディングしてみたのですが、困ったことがおこりました。

ArrayListの1要素の値更新ができないのです。参考にしたソースは、1次元配列から、ArrayListにAddしています。Addした後のArrayListの値を更新しようとしてもできないのです。1レコード(行)の削除や更新処理はできるのです。


仕方ないので、1次元配列の値を更新してからArrayListにAddすることにしました。


ところが、ArrayListはAddした1次元配列の値を参照で受け取っているようなのです。

1. 1次元配列Aに値を代入
2. ArrayList1にAdd
3. 1次元配列Aの値を変更
4. ArrayList2にAdd

という処理をしたのですが、先にAddしたArrayList1の値も変更されてしまいます。

ArrayList1の値はそのままに、ArrayList2の値だけを変更したかったのですが。


そこで、1次元配列もAとBを作成し、それぞれArrayList1、ArrayList2にAddしました。今度は思うように動作しました。


どうやらArrayListは2次元配列とは異なるようです。

JAVAコーディング

やっとスタート地点

2008年03月06日
JAVAでの開発、やっと本当にやっとコーディングに入りました。数行で書けるメソッドを1つ試しに作り、コンパイル。何度かやっているうちに、エラーもなくなり実行できるようになりました。

テスト結果がファイルで書き出されるようになっているので、結果を見てみます。なんかわかるようなわからないようなエラーメッセージが・・・ JAVAが出力しているエラーではなく、どうやらHさん(開発会社)がチェックして出力しているエラーのようです。

DBからデータを取得しているメソッドなので、画面に出力して本当に取得できているか調べてみます。

JAVAでの標準出力は、

System.out.println("標準出力");

のようです。


結果、きちんと値を取ってきています。


どこでそのようなエラーが出ているのか、エラーメッセージが入っていそうなプロパティを出力して調べまわったのですが、どうしてもわかりません。同じような処理をしている他のメソッドを探して、ソースをコピーして、を何度もやってみたのですが、結果は同じ。

半日悩んだ末、Hさんに尋ねてみました。
・どこでそんなエラーが出ているのか、どうやったらわかるのか。ヒントでもいいのでなにかないか。


わかってしまえばなんでもなく、1コマンド忘れていた(というか、その処理は既にしていると勘違いしていた)だけでした。

そのほかにも、エラーログのレベル(エラー、警告など)の設定方法も教えてもらいました。
ドキュメントがあるのかもしれませんが、見つけきれていないし(多分ない)、引継ぎ資料に残しておかなければいけません。

そして、動かしてみたら、動きました。もう涙が出てきました。今までやってもやっても、というかやればやるほど後退していた感が強かった開発ですが、やっとスタート地点に立てました。


1部のコーディングからテストまでの全体像がなんとなくわかったので、念願だった線引きができました。でも、コーディングとテストの種類も1種ではないので、本当の意味で全体は見えません。

派遣期間は3月末までですが、終わらないことははっきりしました。私の予想では4月中旬近くまでかかりそうです。
できるまで延長という話も出ているので、なるべく早く終わらせようと思います。