Posts Tagged ‘Java’

deepEquals

土曜日, 2 月 6th, 2010

今日、ネットサーフィン(死語)してて、面白そうな記事を見つけたのでさっそく試してみました。

ネタもとは英語だったので詳しく理解することはできなかった。

コードの切れ端と読めない英語をながめてみました。

私はこれを見てすぐに自信を持って答えることはできませんでした(><)

まぁ・・・永遠の初心者ですからしかたないです。

けど気になるので下記のようなシンプルなコードを書いて実行してみました。

24行目からの if 文の処理結果はよく知られた結果となることは間違いないでしょう。

29行目からの if 文の処理結果が気になります。

1

実行結果だけ確認するのもあれなので、NetBeans を使ってるのだからウォッチポイントを設定してデバッグ実行してみました。

変数 a,b,c,d をウォッチポイントとして違いを確認してみました。

2

変数 c,d は一段階深い所に Object 型の配列の中に Object 型配列の変数が格納され一段階深くなってます。

素人考えでは一段階深くなったところで同じじゃないの?って思ってしまいます。

3

そこで29行目にブレークポイントを仕掛けてステップ実行させてみました。

下のコードの2392行目で引っかかるようですね。

4

念のために実行結果はこうなります。

5

たぶん Java プログラマなら知ってて当然ってことでしょうがこんなこと考えたことがなかったので新鮮でした。

NetBeans の優秀なデバッガをこんなことに使う私って・・・幸せ者だ(^^;

Hatena タグ: ,

JDK 7 の Switch 文を試してみる

火曜日, 2 月 2nd, 2010

JDK 7 で変更のはいる Switch 文を試してみました。

JDK 6 ではエラーとなります。

1

ターゲット JDK を JDK 7 に変更します。

 2

プロジェクトをビルドします。

なにやらビルドエラーが出てますが NetBeans 6.9 の Dev 版を使っているので気にしない(いいのか!

3

プロジェクトを実行します。

ちゃんと String 型で Switch 文の制御ができてますね(^^)

素晴らしい!!

4

Hatena タグ: ,,

Play!

月曜日, 1 月 25th, 2010

CodeZine の記事で Java で動く軽量フレームワーク Play! が紹介されていた。

なにげに見てたら NetBeans プロジェクトとして取り込むことができるとあった。

Play! がどういったものかは CodeZine の記事をご覧いただくとして、記事をもとに NetBeans で動かしてみた。

まず、コマンドプロンプトで Web アプリケーションを作成します。

11

次に NetBeans プロジェクトとして取り込めるようにします。

13

これで NetBeans プロジェクトとして取り込めるはず。 たぶん・・・

では、取り込んでみます。

14

プロジェクト構成は下図のようになってます。

test パッケージがエラーとなってます。

未使用のインポートがあるようです。

何故かは調べてないので解りませんが無視するか、指示にしたがって未使用のインポートを削除でとりあえずエラーはなくなります。

16

プロジェクトが実行できるか確認します。

無事にプログラムが実行されました。

17

ブラウザで確認します。

18

ついでだから記事のとおりプログラムを変更してみました。

いつもの NetBeans での使い勝手の良さがこれでも一緒ですね。

19 20

で、ちょっとだけ触ってみただけなのですが・・・

NetBeans プロジェクトとして取り込んで何が便利なのかな?って考えてみた。

賢いエディタ機能が使える!

これくらいしか思い浮かばない(><)

Hatena タグ: ,

無限大

金曜日, 8 月 21st, 2009

Java でも無限大を定義することができます。

ちょっとそれを試してみました。

なぜかって?

今まで無限大を使ったことがないからです。(^^;

 

package infinity2;

public class Main {

    private static final double i = Double.POSITIVE_INFINITY;
    private static final double j = Double.NEGATIVE_INFINITY;
    private static final double k = 1.0e40;

    public static void main(String[] args) {
        if (i == i + 1) {
            System.out.println(“無限大 ” + i);
        }
        if (j == j – 1) {
            System.out.println(“無限小 ” + j);
        }
        if (k == k + 1) {
            System.out.println(“1.0e40 に1を足しても ” + k);
        }
        System.out.println(“ulp = ” + Math.ulp(k));
        System.out.println(“最も近い浮動小数点数 ” + Math.nextUp(k));
    }
}

 

このプログラムの実行結果は下記のとおりです。

無限大 Infinity
無限小 -Infinity
1.0e40 に1を足しても 1.0E40
ulp = 1.2089258196146292E24
最も近い浮動小数点数 1.0000000000000002E40

 

無限大や無限小って英語で Infinity , -Infinity って表示されるんですね。

初めて知りました。

おまけがついてますけど浮動小数点数演算って癖があるので微妙・・・(^^;;;

Hatena タグ:

素敵な無限ループ

木曜日, 8 月 20th, 2009

無限ループ文の作り方にはいろいろなものがありますが最近知った素敵な無限ループ文を個人的に覚え書きしておきます。

package infinity;

public class Main {

    public static void main(String[] args) {
        int count = 0;
        // 素敵な無限ループ
        for(int i = 0; i <= Integer.MAX_VALUE; i++)
            if (i == Integer.MAX_VALUE)
                // 無限ループになるトリックの答え
                System.out.println(“Integer.MAX_VALUE + 1 = ” + (i + 1));
            count++;
        System.out.println(count);
    }
}

無限ループがあるので標準出力に変数 count の値は表示されません。

無限ループの中で int の最大値の時に 1 を足した時の値を表示させてます。

Integer.MAX_VALUE + 1 = -2147483648

これで解るように int の最小値になってます。

普通このような無限ループを使う人はいないと思うので素敵ですね!

Hatena タグ:

JDK 6 Update 15 がリリースされてます

木曜日, 8 月 6th, 2009

JDK 6 Update 15 がリリースされてます。

Windows 7 、Internet Explorer 8、Windows Vista SP2 などのサポートをしているようです。

G1 ガベージコレクタも含まれているようです。

この G1 ガベージコレクタ と言うものはいったい何なのでしょう?

調べてみたところ Garbage-Firstガーベージコレクタ 略のようです。

名前からして早そうですね。

今までのガベージコレクタは 世代別GC と呼ばれるものでヒープ領域を物理的に二つのYoung領域とOld領域(Tenured領域)に分けて管理しています。

それに対してG1 ガベージコレクタ はヒープ領域は一つです!

その一つだけ用意された領域の中でいくつかをYoung領域とし、残りをOld領域として利用してます。

詳しくは Java SE 6 Update 14のEarly Access公開、G1ガーベージコレクタが利用可能に をご覧ください。

これによって、全ヒープ領域に対して常にフルGCを実施するのではなくGCの効果が高い領域を優先的に開放するので、アプリケーションの停止時間を大幅に減少できる。

パフォーマンスアップが期待されますね。

とりあえず今からダウンロードしてインストールすることにします。

Hatena タグ:

Java One 2009 Return of the Puzzlers 間違った(><)

木曜日, 6 月 25th, 2009

こちらのサイトに Java One 2009 Puzzlers が紹介されていたので考えてみました。

問題はこちら

1

解答はなかったので念の為に(どっからくるんだその自信)プログラムを実行して確認してみました。

おお!なんと間違ってました。orz

やはり、私は未熟者です!

Hatena タグ:

JDK 7 ならこう?

金曜日, 6 月 19th, 2009

ちょっと勉強になるブログを発見した。

http://d.hatena.ne.jp/bleis-tift/20090616/1245134308

http://d.hatena.ne.jp/shin/20090618/p2

ついでに以前試した JDK 7 の walkFileTree を使ったチュートリアルをもとにゴニョゴニョしてみた。

特定ディレクトリ以下の列挙 ということなので見栄えは良くないが JDK 7 ならこんなのもありかな?

import java.io.IOException;
import java.nio.file.FileRef;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;

public class Find {

    public static class Finder implements FileVisitor {

        private final PathMatcher matcher;

        Finder(String pattern) {
            matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
        }

        void find(Path file) {
            if (matcher.matches(file.getName())) {
                System.out.format("%s%n", file);
            }
        }

        @Override
        public FileVisitResult preVisitDirectory(FileRef dir) {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult preVisitDirectoryFailed(FileRef dir, IOException exc) {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFile(FileRef file, BasicFileAttributes attrs) {
            find((Path) file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(FileRef file, IOException exc) {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(FileRef dir, IOException exc) {
            return FileVisitResult.CONTINUE;
        }
    }

    public static void main(String[] args) {
        Path searchDir = Paths.get("C:\\ターゲットディレクトリ");
        String pattern = "*";
        EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
        Finder finder = new Finder(pattern);
        Files.walkFileTree(searchDir, opts, Integer.MAX_VALUE, finder);

    }
}

基本的に間違っていたらごめんさない。

素人のやることだから笑ってゆるしてね(^^;

追記 List<String> result に格納するのがポイントだったのかな?

Hatena タグ:

NB6.7 Dev で Java EE 6

月曜日, 6 月 1st, 2009

JavaOne で何かしらの新技術がお披露目されるだろうと期待している私ですが待ちきれずに NetBeans で Java EE 6 って動くのか調べてみました。

といってもネットでググって調べただけです。

結果は・・・ ありました!

下記サイトです。

http://ekschi.com/technology/2009/05/19/totd-81-getting-started-with-servlet-30-and-ejb-31-in-java-ee-6-using-netbeans-67/

英語が駄目なのでだいたいこんな感じじゃないかと真似てみました。

一部コードは簡略化してありますが問題ないはずだと思います。

NetBeans 6.7 開発版に GlassFish V3 Preview を追加して Java EE 6 を試してみます。

まず GlassFish V3 Preview の zip 版をダウンロードしてインストールします。

NetBeans のサーバーに GlassFish V3 Preview を追加できるように GlassFish v3 Enabler というプラグインをインストールします。

1

インストールが完了したら [ サービス ] ウィンドウでサーバーを追加します。

2

GlassFish v3 が追加可能になってますので画面の指示にしたがって追加します。

3

4

5

GlassFish v3 が追加され利用可能となりました。

6

Java EE 6 の機能の一部ですが早速試してみます。

新規プロジェクトを作成します。

[ Java Web ] カテゴリを選択し、プロジェクトに [ Web アプリケーション ] を選び [ 次へ> ] ボタンをクリックします。

11

プロジェクトの設定を行います。

とりあえずここはデフォルト設定としました。

12

サーバーには GlassFish v3 を設定します。

Java EE バージョンには本当は Java EE 6 を選びたいところですが無いので Java EE 5 をドロップダウンリストから選択します。

13

フレームワークは利用しないので [ 完了 ] ボタンを押して終了します。

14

プロジェクトに POJO ベースの EJB を追加します。

[ 新規 ] → [ Java クラス... ] を選択します。

15

名前と場所を設定します。

16

HelloEJB クラスが自動生成されます。

このクラスに @Stateless アノテーションをつけます。

エラー表示が出てヒントが出ますのでヒントの指示どおり javax.ejb.Stateless をインポートします。

17

sayHello メソッドを作ります。

これで EJB の作成は終わりです。

 

19

次に、この EJB を呼び出すサーブレットを作成します。

[ 新規 ] → [ Java クラス... ] を選択します。

名前と場所の設定を下図のようにします。

22

自動生成された HelloServlet クラスに @WebServlet をつけます。

URL パターンも忘れずにつけます。

23

javax.servlet.annotation.WebServlet をインポートします。

24

HttpServlet を継承します。

26

EJB をインジェクトします。

ヒントのとおりインポートを修正してエラーを修正します。

29

doGet メソッドをオーバーライドします。

32

33

34

下記コードのように doGet メソッドを編集します。

35

これで単純にサーブレットから EJB を呼び出して http://localhost:8080/WebApplication1/hello のアドレスに ” こんにちわ(^^) ゆっち ” と表示されればOKです。

おっと、Java EE 6 では sun-web.xml ファイルと web.xml が不要となるんでしたね。

削除してしまいましょう。

41

なんか寂しい気がするけど気にしない。

42

それではプロジェクトを実行し、http://localhost:8080/WebApplication1/hello にアクセスしてみましょう。

動きましたね(^^)

52

Java EE 6 ってシンプルでいいですね。

アノテーションでなんでもありのようになったような気がしないでもないが大歓迎です(^^)

Hatena タグ: ,

やっぱ、楽だね(^^)

火曜日, 5 月 12th, 2009

NetBeans を使って JDK 7 build 58 を試してみました。

試すといっても私は素人ですし、英語もだめなのでこちらのサイトで紹介されているものをまんま試してみました。

その一部始終はこちらです。

NetBeans に JDK を一度登録したらプロジェクトのプロパティでいつでも選択できるようになります。

1

JavaDoc も登録して使用できます。

便利です!

2

プログラム実行時のコマンドライン引数も設定できますのでいちいち長いコマンド入力をしなくてすみます。

3

気軽に試せます。

また、エラーやヒントも対応してくれます。(たぶん・・・)

新しい物好きな人で楽なのがいい人向けの隠れた使い方でしょうか(^^;

Hatena タグ: ,,