Posts Tagged Java

Javaと例外

Javaで標準クラスを使う限り例外機構の実装はTry-Catchで決まりそう。
自前クラスをわざわざ用意するのは無駄なので標準クラスを使いたいところ。
なので、あまり好きじゃないけどTry-Catch文で試す。
前回の引数をとる続編として、引数をどんどん掛け算して行く。

Try-Catch文の書き方は

try
{
/* 処理 */
}
catch( 受け取るエラーのException型 変数 )
{
/* 処理でこけた後の処理 */
}

となる。
try文で処理をテストして、エラーが出た瞬間にcatch文へ進む。
catch文で例外の型に合致する箇所でパラメータを受け取り、適宜処理をする。

ArgumntsCalc.java

class ArgumentsCalc
{
public static void main( String args[] )
{
int argc = args.length;
double tmp, ans = 1.0;
for( int i = 0; i < argc; ++i )
{
try
{
ans *= Double.parseDouble( args[i] );
}
catch( NumberFormatException e )
{
System.out.println( e );
}
}
System.out.println( "result is " + ans + "." );
}
}

こんな感じ。
エラーが起きたらとりあえずエラー内容を出力する。
実行結果は下記の通り。

McLaren% javac ArgumentsCalc.java
McLaren% java ArgumentsCalc 2.0 5 x
java.lang.NumberFormatException: For input string: "x"
result is 10.0.

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

, , ,

No Comments

Javaと引数

Javaで引数をとってみる。

引数を複数とって、その数と引数自体を表示し、その長さも表示したい。
実行方法は

McLaren% java ArgumentsTest x y z abc

とする。

で、こんな感じのコードを書いてみた。

ArgmentsTest.java

class ArgumentsTest
{
public static void main( String args[] )
{
int maxLen = args.length;
System.out.println( "total arguments count is " + maxLen + "." );
for( int i = 0; i < maxLen; ++i )
{
System.out.println( "\tcurrent arguments is \"" + args[i] + "\"." );
System.out.println( "\t\tlength is " + args[i].length() + "." );
}
}
}

Javaでは引数がmainで取得したString型の変数に集約される。
と言うのも、引数の数を取得したければ .lengthを付け足せばそのメンバ変数に引数の数が入っている。
各々の引数は配列毎に格納されるので、その中で長さを取得したければ .length()メソッドを呼び出せば文字列長を取得することが出来る。

実行結果は下記の通り。

McLaren% javac ArgumentsTest.java
McLaren% java ArgumentsTest x y z abc
total arguments count is 4.
current arguments is "x".
length is 1.
current arguments is "y".
length is 1.
current arguments is "z".
length is 1.
current arguments is "abc".
length is 3.

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

, ,

No Comments

Javaと標準出力と変数など

Javaを弄ろうと思って本読んでる。
で、とりあえずさっきHello Worldも出してみたわけ。

PHPべったりで、Cを少し勉強した俺からして、「Javaってどんな感じかなぁ。」というのが知りたかった。
まず、文字出力メソッドがおおらか。
例えば、下記のようなコードは普通に通る。

PrintTest.java

class PrintTest
{
public static void main( String args[] )
{
int num = 10000;
System.out.println( "num is " + num );
}
}
McLaren% javac PrintTest.java 
McLaren% java PrintTest      
num is 10000

なんか、JavaScriptと同じと言うか、この部分はJavaをそのまま流用したような実装になってるんだなぁ、と。

配列に関してもおおらか。
気持ち悪い書き方だけど、下記コードと実行結果。
ArrayTest.java

class ArrayTest
{
public static void main( String args[] )
{
int nums[];
nums = new int[10];
for ( int i = 0; i < 10; ++i )
{
System.out.println( "current num is " + nums[i] );
}
System.out.println( "end" );
}
}
McLaren% javac ArrayTest.java
McLaren% java ArrayTest      
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
end

new、mallocと言うよりはcallocと言う雰囲気。
まぁ、メモリ確保した後すぐに中身入れ替えちゃうような時は無駄な気がするけど、事故るよりは良いってことなんでしょうな。

あと、面白いのは

arrayVarName.length

とすると、そのまま配列の個数が取得できる。

class ArrayTestWithInit
{
public static void main( String args[] )
{
int nums[];
nums = new int[10];
int max = nums.length;
System.out.println( "nums length is " + max );
for ( int i = 0; i < max; ++i )
{
nums[i] = i;
}
for ( int i = 0; i < max; ++i )
{
System.out.println( "current num is " + nums[i] );
}
System.out.println( "end" );
}
}
McLaren% javac ArrayTestWithInit.java
McLaren% java ArrayTestWithInit      
nums length is 10
current num is 0
current num is 1
current num is 2
current num is 3
current num is 4
current num is 5
current num is 6
current num is 7
current num is 8
current num is 9
end

こう言うことも出来る。

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

,

No Comments

いろんな言語でこんにちは[ Java篇 ]

JavaでのHello World。
Mac OSXで動作確認済み。
あ、コンソールのみね。

class HelloWorld
{
public static void main( String args[] )
{
System.out.println( "Hello World!" );
}
}
McLaren% javac HelloWorld.java
McLaren% java HelloWorld 
Hello World!

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

, ,

No Comments

MacOSXでのJava文字化け解消とか

移り気な俺はJavaにも興味津々。
と言うわけで、いまさらJavaの端っこをかじることに。
で、Macには標準で入っている。

と言うか、Javaのバージョンアップがあったからちょいとやってみようかと思ったんだけれども。
あと、ちょっとした縁で本を借りたので、内容はWindows用っぽいけどやっぱり無理矢理チャレンジすることにw

で、最初につまずいたのがJava自身の文字化け。
どうやらShift JISをベースに出してくれるらしく、ちょっと面倒なことに。
Javaのバージョンが知りたくて

javac --version

を打ったんだけど、

McLaren% javac --version
javac: --version �͖���ȃt���O�ł��B
�g����: javac &lt;options&gt; &lt;source files&gt;
�g�p�”\�ȃI�v�V�����̃��X�g�ɂ‚��ẮA-help ��g�p���܂�

こんな感じに。

恐らくこのままだとエラーメッセージまでこれw
せめて英語でエラーを受けたいところ。
(文字化けと比較すれば、英語ならまだ読めるw)

で、いろいろ探したところ、シェルの設定ファイルに下記を書き込めば良いとのこと。
恐らく多くの人はbashなので~/.bashrcを。
自分はzshなので~/.zshrcを。

alias javac=&quot;javac -J-Dfile.encoding=UTF-8&quot;
alias java=&quot;java -Dfile.encoding=UTF-8&quot;

で、もう一度Javaコンパイラのバージョンを見てみることに。

McLaren% javac --version
javac: --version は無効なフラグです。
使い方: javac &lt;options&gt; &lt;source files&gt;
使用可能なオプションのリストについては、-help を使用します

おお、日本語w
(そして–versionなんてフラグは無いw)
さすが世界企業Sun。
そして愛しのVimの原型viを開発したビル・ジョイも参加して作っただけある。
やっぱすごい。
そして便利そう。
(クソ単純な俺)

そうそう、実は自分のファイルにこれだけは書いてあった。

export JAVA_OPTIONS=&quot;-Dfile.encoding=UTF-8&quot;

一度挑戦しようとしかけたのかね?w
とは言え、失敗していたからアレなんだけれども。

と、ここまで書いたんだけど、今CおよびC++の勉強中だから、あくまで気まぐれ。
いつ続きをやるかわかりませんので悪しからず〜。

あ、ちなみに正式なバージョン情報は

McLaren% javac -version
javac 1.6.0_17

と言った感じ。
(珍しく、ハイフン1つ少なくていいのね)

そんだけ。

Post to Twitter

, , , , ,

No Comments