2005-01-06 11:14:30
テーマ:Java

J2SE5.0の新機能(9)Scanner

Formatted Input

以前は標準入力から値をとるのは大変でした。

BufferedReader
InputStreamReader
StringTokenizer
Integer.parseInt()

などなどを駆使して行う必要がありましたがJ2SE5.0でScannerクラスが追加されました。

Scanner s= new Scanner(System.in);
String param= s.next();
int value=s.nextInt();
s.close();

驚くほどきれいになりました。今までのあの苦労はなんだったんだ?という感じです。それでもC++の
cin >> param >> value;
には(コード量では)勝てませんが。
AD
いいね!した人  |  リブログ(0)
2005-01-04 18:06:31
テーマ:Java

J2SE5.0の新機能(8)printf

Formatted Output

今までは文法の拡張の話ばかりでしたが、クラスライブラリ関連も扱って行きたいと思います。今回はprintfです。
C言語でおなじみのprintfがJavaのライブラリにも仲間入りしました。

System.out.printf("name count%n");
System.out.printf("%s %5d%n", user,total);

printfのAPIドキュメントを見ていただければ分かると思いますが、printfはformatというメソッドの別名です。C言語使いの人に分かりやすいように付けたのだと思われます。また、可変長な部分の引数がObject型になっていますがAutoboxingのおかげでintやdoubleも書けるというのも見逃せない点です(もともとC言語を使っていた人からすれば当然ですが)。2つの文法の拡張があってはじめてprintfが実現したんですね。
AD
いいね!した人  |  リブログ(0)
2004-12-29 23:27:46
テーマ:Java

J2SE5.0の新機能(7)Static Import

Static Import

Staticなメソッドやフィールドを省略して書けるようになる。



Before

double val = Math.sin(10) + Math.cos(Math.PI);


After

import static java.lang.Math.*; // 冒頭(普段Import書くところ)で宣言。

double val = sin(10) + cos(PI);


java.lang.Mathクラスにはsinやlogなどの関数があります。以前はMath.sin(1.0)などと記述する必要がありましたが、Static Importを使えばStaticなメンバにクラス名を省略してアクセス出来るようになります。
AD
いいね!した人  |  リブログ(0)
2004-12-28 22:01:31
テーマ:Java

J2SE5.0の新機能(6)拡張for文

Enhanced for Loop

一言で言えば、foreachです。
C#のforeachをforに換えてinを:に換えるだけです。

Before

ArrayList<Integer> list = new ArrayList<Integer>();
for (Iterator i = list.iterator(); i.hasNext();)
{
Integer value=(Integer)i.next();
...
}


After

ArrayList<Integer> list = new ArrayList<Integer>();
for (Integer i : list)
{
...
}

sunのページより引用。

これが無ければコードが書けなくなるわけではないですが、コードをシンプルに分かりやすく表現できるようになります。すべての要素にアクセスするときはこの拡張for文を使うのがお勧めです。

いいね!した人  |  リブログ(0)
2004-12-27 22:44:00
テーマ:Java

J2SE5.0の新機能(5)Generics

Generic Types
J2SE5.0の新機能の本命(?)のGenericsです。C++のテンプレートに相当する機能です。C#にも同様の機能が次期バージョンから搭載予定。

Before

ArrayList list = new ArrayList();
list.add(0, new Integer(42));
int total = ((Integer)list.get(0)).intValue();

After

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = list.get(0).intValue();

(sunのページより引用。Autoboxingを使えばnew Integer(42)は単に42と書ける)

従来javaの標準ライブラリのコンテナは要素としてObject型の変数を取っていました。これだと、Integerしか入れないにもかかわらず、コンテナから取り出すときにキャストする必要がありました。これを解消するためにInteger専用のコンテナを作ろうとすると、扱いたい型が増えるたびにいくつも作らなければいけません。

良く考えれば、ArrayListにしろHashtableにしろアルゴリズムはデータの型に依存するものではないので、型を特定しない形でアルゴリズムだけ書いて色々な型で使いまわすのが賢い選択です。それを現状のObject型という形でなく実現するのがGenericsです。

J2SE5.0ではArrayListなど主要コンテナはGenericsを使って書かれているので、上の例のような書き方が可能になっています。上の例はGenericsで書かれたクラスを使う例ですが、Genericsを使ってクラスを設計する場合については別に書くかもしれません。これ以外にGenericなメソッドというのもあります。詳しくは以下を参照してください(英語)。

http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
いいね!した人  |  リブログ(0)
2004-12-26 04:28:48
テーマ:Java

J2SE5.0の新機能(4)可変長引数

Varargs(可変長引数)
	static void test1(String ... args)
	{
		for(int i = 0;i < args.length;i++)
		{
			System.out.println(args[i]);
		}
	}

	public static void main(String[] args)
	{
		test1("test","abcde","asdf");
	}

J2SE5.0では可変長引数がサポートされました。これまたC,C++,C#にはあってJavaには無かったものです。可変長引数は最後の引数として記述するする必要があるようです。これを利用してC言語ではおなじみのprintf(書式付出力)が標準ライブラリに追加されました。これについては別の機会に書きます。

JavaはC,C++から不要なものを取り去るというコンセプトでしたが、ここに来て機能を削りすぎたのを認めている感じですね。
いいね!した人  |  リブログ(0)
2004-12-25 21:41:39
テーマ:Java

J2SE5.0の新機能(3)enum

Enumerated Types

宣言
public enum Color { black , white };


void put(Color color,int x,int y)
{
if(color == Color.white){ .... }else{ .... }
}

enumは定数をひとまとまりにする用途に用途に使えます。型名が付くので定数より便利になります。
C++やC#にはあるのですがJavaにはありませんでした。これが導入される前はprivateなコンストラクタしかないクラスにstatic finalな変数を持たせる方法とかで解決していたようです。
いいね!した人  |  リブログ(0)
2004-12-25 21:31:10
テーマ:Java

J2SE5.0の新機能(2)Autoboxing

Autoboxing and Auto-Unboxing of Primitive Types

Before

Integer i = new Integer(1);
int j = i.intValue();

After

Integer i = 1;
int j = i;

自動でプリミティブ型とそのラッパークラス間の変換を行ってくれる機能です。標準ライブラリのコンテナにはプリミティブ型を入れることができないので、こういう機能があると便利です。C#にはあった機能。
いいね!した人  |  リブログ(0)
2004-12-25 21:26:18
テーマ:Java

J2SE5.0の新機能(1)

J2SE5.0(Tiger)の新機能について書いてみようと思います。とりあえずまとめ(リンクの紹介)から。個別の機能については次回以降で扱おうと思います。英語が読める方は下のリンクを読んだほうが早いです。

どこかの解説の焼き直しになるといけないので、他のサイトを見ずにSunのページだけを参照して書いてみる事にします。(とは言っても以前見たものをある程度記憶しているので全くオリジナルではないかもしれません。)

J2SE5.0新要素に関するSunのページ
http://java.sun.com/developer/technicalArticles/releases/j2se15/
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html

ちなみに12/20にJ2SE5.0はUpdate1が出ています。バグフィックス中心のようです。
http://java.sun.com/j2se/1.5.0/download.jsp

その他いくつかリンク

APIドキュメント
1.5.0でなく5.0と呼ぶことについて

目次
Metadata
Generic Types
Autoboxing and Auto-Unboxing of Primitive Types
Enhanced for Loop
Enumerated Types
Static Import
Formatted Output
Formatted Input
Varargs
いいね!した人  |  リブログ(0)
2004-12-21 01:14:15
テーマ:Java

java5.0

いまさらながらですがTigerを触ってみました。とりあえず、printfとかautoboxingとかを体験。
以下は参考にしたサイトです。
いろいろ触った結果をこれから書いていくかもしれません。


http://java.sun.com/j2se/1.5.0/index.jsp

IBM Developerworks

http://www.alles.or.jp/~torutk/oojava/maneuver/1998/11-1.html

http://www5.airnet.ne.jp/sakuraba/java/laboratory/J2SE1.5/contents.html
いいね!した人  |  リブログ(0)

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。