言語

ファイルを作成

Eclipseでファイルを生成するコードを動かすと、コードがあるパッケージのフォルダではなくプロジェクトフォルダにファイルが生成される。さっきの実行ファイルのことから考えれば当たり前?パッケージの上が実行ディレクトリなんだな。

パッケージの中に入れたクラスの実行

パッケージの中に入れたクラスをコマンドラインから実行するには、パッケージとなっているフォルダのひ上に移動して、"java パッケージ名.クラス名"で実行。パッケージフォルダの上でコンパイルする時は"javac パッケージ名/ファイル名"。ファイル名は"*.jav…

正規表現

Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle 正規表現を書いたPatternクラスと比較文字列から、Matcherクラスを作る。後はMatcherクラスにいろいろ尋ねる。このMatcherクラスというのがまだよく分からないんだけど…

ネットアクセス

URLクラスを使う。 ファイルアクセスの場合と比較。 String filename="ファイル名"; BufferedReader br = new BufferedReader(new FileReader(filename)); Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle BufferedRea…

タブの設定

「ウィンドウ」メニュー - 「設定」 - 「Java/コードスタイル/フォーマッター」でプロファイルを「編集」。「インデント」タブの中にタブをスペースに置き換える設定がある。深い。

パッケージの追加

すでにコードがあるパッケージをプロジェクトに追加するのはどうやるんだろうといろいろやっていたら、プロジェクトフォルダの中にいれて、プロジェクトを「更新」したら自動的に追加された。

例外

try/catch節は使わなくてもいいのかと思っていたら、例外の種類によっては必須だった。またその場合、メソッド定義に何の例外を投げるか書かないといけない。

インターフェースクラス その2

インターフェースクラスはインターフェース定義専用のただの仮想関数かと思ったけどそうじゃないようだ。Javaでは多重継承ができないけど、実はインターフェースクラスによりインターフェースだけなら多重継承ができる。

「Java言語プログラミングレッスン (下)」 結城浩 著

上巻はプログラム初心者向けという感じだったけど、そういう読者が下巻の内容についてこれるのかなと無用な心配をしてしまう。でも、基本的には単なる使い方の説明ではなく適度に原理から説明されるので分かりやすい。付録にCとJAVAの相違点が書かれているの…

CalendarクラスのMONTH

なぜCalendarクラスの月だけは0から始まるんだろう?

mainとオブジェクト

mainメソッドはかならずstaticなので、mainを実行しただけではそのクラスのオブジェクトは生成されていない。なので、そのクラスの他のメソッドを呼び出すためには、呼び出すメソッドもstaticにするか、オブジェクトを生成しないといけない。

不変オブジェクト

IntegerクラスやDoubleクラスなどの数値クラスから作られたオブジェクトは不変オブジェクトであり、値を後から変更できない。うーん、じゃあ普通の計算で使う変数としては使えないのか。intやdoubleの基本型で定義された変数はオブジェクトではないので、数…

「Java言語プログラミングレッスン (上)」 結城浩 著

変数とは何かというような基礎から説明されていて、Javaの入門書と言うよりプログラム自体の入門書といった感じ。またこの上巻で説明されているのはif文とかfor文とかだったので、収穫は基本文法がCとおんなじだという事が分かったぐらいだ。ほとんど流し読…

エラーの取り扱い その2

基本型のintを返す(予定だった)メソッドで、失敗を返したい場合はどうすればいいんだろう。基本型なのでnullは入れられないよな? 例外処理?でもなあ例外ってわけでもないような気がするんだよな。想定内の失敗。nullを返せるようにIntegerオブジェクトを返…

基本型と数値クラス

基本型のintとかdoubleの他に、IntegerとかDoubleとかの数値クラスが用意されている。数値クラスの方が便利な場合があるのは分かるけど、どういう時にどっちを使ったほうが良いという指針みたいなのはあるんだろうか。必要なければ基本型でよい?

基本データ型のキャスト

代入するときに左辺の方がデータ領域が大きければ情報量が落ちないので暗黙のキャストが可能。左辺の方が小さいときは明示的にキャストしなくてはいけない。

エラーの取り扱い

Rubyでnilオブジェクトを返していたところはJavaだとどういう仕組みにすればいいんだろう。-1を返すとかtry/catchを使うとかになるのかな。

日付の扱い

Javaには日付を扱うクラスとしてCalendarクラス、Dateクラスがあるようなのだけど、日付を指定してオブジェクトを作るにはCalendarクラスを使うのが正当のようだ。 Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle Ora…

ネーミング

Rubyの時は変数名やメソッド名は全て小文字で'_'で区切るというのが一般的だったようなんだけど、Javaでは単語の先頭を大文字にして'_'を使わないのが一般的のようだ。 この違いはどこから来るのかな。

ファイルの移動とpackage

おお。ファイルを別のパッケージに移動するとちゃんと参照なんかを修正してくれるんだ。packageはやっぱりフォルダと対応している。けど、java.lang.Stringとかどこにあるんだろう。そのまま考えたらどこかにjava,langというフォルダがあって、String.javaが…

インターフェースクラス

これはC++的な言い方をすれば「インターフェース定義専用の仮想クラス」ということでいいのかな。

mainとコンストラクタ

クラスの中にmainがあるのでまだ混同してしまう時があるのだけど、mainはコンストラクタではない。さらに言えばmainはそのクラスのメソッドですらないと考えたほうがいいのかも? object = new ClassA(); object.main(); というコードを書くことはあるのか?…

参照型のコピー

StringBufferクラスのインスタンスを作り、別のメソッドの中でapendで文字列をくっつければ、呼び出し元でも修正された文字列を見ることになる。 StringBuffer sb = new StringBuffer("0123"); add(sb); System.out.println("sb:"+sb);//01234567が表示され…

ヘッダファイル

「Eclipse」でJavaプログラミング超入門:Eclipseではじめるプログラミング(1) - @IT ここの説明にヘッダファイルが出てこないのは入門だからか? あるいはJavaにはヘッダファイルというものがない?

基本型と参照型

なるほど。型には基本型と参照型があって、配列やクラスは参照型なのでnewして実体を作らないないと使えない。C++の参照型と同じか? 確かC++の参照型の場合は、初期化しない変数だけの宣言はできなかったような気がする。 とにかく、見えないだけでやっぱり…

main

main関数はクラスの中にある。「クラスを実行」するとそのクラスのmain関数が呼ばれる。main関数を持たないクラスは別のクラスから呼ばれる受動的なクラス。という感じか。

new

宣言とか生成したときに何が作られているのかがまだ良く見えない。 int i こう書いたときはそのまま普通にiを変数として使える。 でもクラスの場合はちょっと違うようだ。Pointクラスを自作したとして、 Point o; //点oオブジェクト と書いただけではoは使え…

package

JavaのpackageはC++のnamespace見たいなのものなのかと思ったけどちょっと違うようだ。実際のファイルのありかを示すディレクトリ情報でもある。packageとディレクトリは完全に一対一対応なのかな?

EclipseでJava

少し前にインストールしたeclipseを起動してみる。バージョンは3.2.0。最新版は3.2.2らしいのでちょっと古いけどとりあえずそのまま試す。 まずeclipseのチュートリアルにしたがってHelloWorldを書く。次のチュートリアルはSWTを使った開発になっているけど…

Javaをやることになった

作ってるソフトの方針変更でRubyをやめてJavaで作ることになった。Javaはまったくやったことないけど、C++の知識の延長でどうにかなるだろうか。