クラス

■ 本 PDF について
・この PDF は、『ちゃんと使える力を身につける Java プログラミング入門』の一部を抜
き出したものです。
・本書の発売キャンペーンにおいて、2016 年 4 月から 5 月にかけて配布を行います。
・キャンペーンについて詳しくは、以下の URL をご覧ください。
https://book.mynavi.jp/pcbook/blog/detail/id=52524
■ご注意
・この PDF は、『ちゃんと使える力を身につける Java プログラミング入門』のキャンペー
ン用 PDF です。キャンペーンに参加し、応募条件を満たした方にのみ配布しています。
・この PDF は、マイナビの公式アカウントから直接 URL を受け取り、ダウンロードした
方のみが閲覧することができます。複製や再配布は禁止されておりますので、あらかじ
めご了承ください。
・もし、この PDF が不正に配布されているのを発見された場合は、以下のフォームより
ご連絡ください。
https://book.mynavi.jp/inquiry/id=32
・この PDF に含まれる内容は、著作権上の保護を受けています。本 PDF の一部あるいは
全部の内容について、著者およびマイナビ出版の許可を得ずに、無断で複写、複製する
ことは禁じられております。
・この PDF の内容についての質問にはお答えできません。あらかじめご了承ください。
■販売情報
本書は、以下の販売サイトにてお買い求めいただけます。
・Amazon
http://www.amazon.co.jp/dp/483995674X/
・マイナビブックス
https://book.mynavi.jp/ec/products/detail/id=52432
Java プログラムの基礎(1)
〜「API クラスライブラリ」
と「文字列」
CHAPTER
4
CHAPTER 3 では、画面に「Hello Java」と表示するプロ
グラムを作りました。
この章では、作成したプログラムの意味と挙動を解説し
ながら、Java プログラミングの基本的な書き方を説明し
ます。
CHAPTER
この章の内容
SECTION
SECTION
01 プログラムの構成単位となる「クラス」
Java のプログラムの構成をあらためて確認します。CHAPTER 3 までで見
てきたように、Java のプログラムは、
「クラス(Class)
」という単位でまと
めます。このクラスには、機能の動作を担う「メソッド」と、メソッドで使
うデータが含まれます。
SECTION
02
基本的な機能を提供する
「API クラスライブラリ」
Java では、よく使われる機能をクラスとしてまとめたファイルが、あらか
じめ用意されています。これが「API クラスライブラリ」と呼ばれるもので
す。この SECTION では、オンラインで公開されている Java 8 の API リファ
レンスの使い方を具体的に説明します。
SECTION
03 文字列の表記方法
P.062 で書いたプログラムのように、文字列を扱う場合は「"」(ダブル
クォーテーション)で全体を括ります。そして、" で括った文字列は、Java
の中では「String オブジェクト」という形式で扱われます。また、" の中身
についても、いくつかのルールがあります。
072
CHAPTER
SECTION
01
4
Java プログラムの基礎(1)〜「API クラスライブラリ」と「文字列」
プログラムの構成単位となる
「クラス」
Chapter
1
Chapter
2
Java では、プログラムの命令はメソッドに記述され、メソッドは必ず、
どこかのクラス(class)に属します。
Chapter
クラスとは、Java においてプログラムを管理する概念です。
3
Chapter
プログラムをまとめるための実体に相当する「クラス」
Java のプログラムは、機能単位でまとめた「クラス」と呼ばれる単位で
作り、それらを組み合わせて全体を作るという構造をとります。
4
Chapter
5
クラスとは、次のように、「class」で囲まれた部分のことです。
Chapter
class
クラス名
6
{
…クラスの内容…
}
Chapter
CHAPTER 3 で作成した「Hello Java」と表示するプログラムは、
public class Example01 {
public static void main(String[] args) {
System.out.println("Hello Java");
}
}
7
Chapter
8
Chapter
9
というように、クラス名に「Example01」を設定しました。
ば、Example01.javaというソースファイル名でなければなりません。
MEMO
クラス名は、プログラマが自由に設定できますが、public なクラスは、
ソースファイル名と合致させなければなりません。つまり、この例であれ
01 プログラムの構成単位となる「クラス」
073
このとき、このプログラムをコンパイルすると、
「Example01.class」と
いうファイルが作られます(作られるファイルについては、P.078 の「クラ
スをとりまとめるパッケージ」で説明します)。
プログラムの「class { }」の部分と、コンパイルされた「クラスファイ
ル(拡張子が .class のファイル)」は、1 対 1 で対応します。
クラスは、プログラムを構成する「ファイルの実体」です。実行される
ときには、このクラスファイルが読み込まれます。
ソースファイルで「Example01 というクラス」を作れば、
「Example01.
class」というクラスファイルが作られます。クラス名と、作られるクラス
のファイル名とは、必ず合致します。
Java では、いかなるプログラムも、
「class { }」で囲んで、クラスとして
構成しなければなりません。プログラムを「class{ }」の外側に記述するこ
とは、許されません。
プログラムはクラスの内部にメソッドとして記述する
クラスに属するものを「メンバ(member)
」といいます。
メンバを構成するのは、
「プログラム」とそのプログラムが扱う「データ」
です。プログラムの部分を「メソッド(method)」といいます。
クラス
プログラム群
データ群
mainメソッド
メンバ
図 4-1-1 クラスに属するメンバ
CHAPTER 3 で 作 成 し た「Hello Java」 と 表 示 す る プ ロ グ ラ ム に は、
main という名前の「メソッド」がひとつありました。
この例では「main」という名前にしましたが、メソッドの名前は、どの
ようなものでもかまいません。1 つのクラスに、複数のメソッドを記述する
こともできます。
074
ただし、「コンソールアプリケーション」なのか「Web アプリケーショ
ン」なのか、それとも、
「Android アプリ」なのか、など、作るアプリケー
ションの種類によって、決まった名前のメソッドを作ることが要求され
Chapter
1
ます。
main メソッドは、コンソールアプリケーションにおいて、必須のメソッ
ドです。逆に言うと、コンソールアプリケーション以外では、main メソッ
Chapter
2
ドが必要ないので、main メソッドが存在しないプログラムもあります。
Chapter
3
メソッドの定義
クラスやメソッドなどの記述箇所を「定義(define)」と言います。
CHAPTER 3 で作った main メソッドは、次のように定義していました。
public static void main(String[] args) {
System.out.println("Hello Java");
}
Chapter
4
Chapter
5
「public static void」という部分は、メソッドの役割などを示す構文で
す。そして、括弧の中身である「(String[] args)」は、このメソッドで使う
データです。
Chapter
6
メソッドの役割や引き渡すデータについては、追々説明しますが、メ
ソッドは、基本的に、次の書式で定義します。
Chapter
7
メソッドの書式
アクセス修辞子など メソッド名 ( メソッドで使うデータ )
{
Chapter
…メソッドの内容…
8
}
クラスやメソッドの定義例からわかるように、Java では、
「{」と「}」で
囲まれた部分を「ひとつの単位」として扱います。これを「ブロック
Chapter
9
(block)」と言います。
01 プログラムの構成単位となる「クラス」
075
ここで提示した main メソッドの書式は、コンソールアプリケーション
を作る場合に定められた定義であり、
①「public static void」と記述すること
② main という名称であること
③後ろに「String[] args」を伴うこと
が求められます(これは Java の開発元であるオラクル社がコンソールアプ
リケーションは、こういうものであると定めた定義なので、我々は変える
ことはできません)
。
ただし、③の「args」という名称は任意です。たとえば、
public static void main(String[] abc) {
…略…
}
のように「args」ではなく「abc」のように、別の名称にしてもかまいま
せん。
括弧のなかは、メソッドの「引数(ひきすう)」と言い、個数と書式が
合っていれば、任意の名称を使えます。
文はメソッドの内部に記述する
プログラムにおける命令に相当する「文(statement)」は、必ず、どこ
かのメソッドの内部に記述しなければなりません。
ここで言う「文」とは、命令であり、「何か処理する 1 文」のことです。
この例では、画面に文字を表示するための、
System.out.println("Hello Java");
の箇所が相当します。
Java では、必ず、メソッドの単位でプログラムが実行されるという決ま
りがあるため、メソッドの外側に文を記述することはできません。
たとえば、次の記述は、間違いです。
076
【間違い① メソッドの外側に文がある】
Chapter
public class Example01 {
System.out.println("Hello Java"); // メソッドの外にある
public static void main(String[] args) {
}
}
Chapter
2
Chapter
【間違い② メソッドの定義がない】
public class Example01 {
System.out.println("Hello Java"); //
1
3
メソッドに囲まれて
いない
Chapter
4
}
Chapter
5
クラスを作り、メソッドを書くことから始まる
Chapter
6
ここまで説明してきたように、Java のプログラムは、
・クラスがある ・その内部にメソッドがある
Chapter
7
というのが、最低限の構造です。
クラス名は、プログラマが自由に決められます(ただし public なクラス
の 場 合、 ソ ー ス の フ ァ イ ル 名 と 合 致 さ せ な れ ば な り ま せ ん。 つ ま り、
Example01 というクラス名なら、ソースのファイル名は Example01.java
Chapter
8
でなければなりません)。
メソッド名も、プログラマが自由に決められますが、コンソールアプリ
ケーションの場合は、「public static void main(String[] args)」という名
Chapter
9
前のメソッドが必要となるなど、作るアプリケーションの種類によって、
命名規則が決まっているものもあります。
なお、クラス名もメソッド名も大文字・小文字を区別します。たとえば、
「main」というメソッドを「Main」や「MAIN」、
「MaIn」などと記述する
と、それは「main」とは違うメソッドと解釈されるので、動かなくなります。
01 プログラムの構成単位となる「クラス」
077
COLUMN
クラスやメソッドの命名規則
クラスやメソッドは、どのような名前を付けてもよいのですが、皆が勝手な命名をすると、プログラムがわかりにくく
なります。そこで、いくつかの推奨された命名規則があります。
【クラス名】
先頭を大文字にして、残りは単語の区切りごとに大文字にします。たとえば、
「MyExampleClass」などとします。
【メソッド名】
先頭は小文字とし、残りは単語の区切りごとに大文字にします。メソッドは、何かの機能のとりまとめなので、その
機能の動きが分かりやすい名前にします。たとえば、
「ファイルサイズを取得するメソッド」ならば、
「getFileSize」や
「getFileLength」などのように命名します。
なお、クラス名やメソッド名には、Java の言語文法で使われている名前は使えません。たとえば「package」や
「public」、「class」などがそれに相当します。これらの利用できない名前を予約語と言います。
クラスをとりまとめるパッケージ
クラス名は、プログラマが自由に命名できるので、
「名前の衝突」が起き
る可能性があります。
た と え ば、
「A さ ん が Example01 と い う ク ラ ス を 作 る 」「B さ ん が
Example01 というクラスを作る」とします。このとき、public なクラスな
ら、この 2 つのクラスを一緒にして使えるのですが、同じ名前のため「名
前の衝突」が起き、エラーになってしまいます。
Aさん
Example01クラス
Bさん
Example01クラス
どちらも同じ
「Example01」
という名前
なので、組み合わせて使うとエラーに
なる
図 4-1-2 名前の衝突
078
この問題を解決するのが、パッケージです。
パッケージは、クラス名の前に、任意の文字をピリオドでつなげること
で、どの所属のクラスなのかを決めるものです。クラス名の前につける「任
Chapter
1
意の文字」のことを「名前空間(namespace)
」と言います。
たとえば、A さんのクラスには「userA」というパッケージ名を付け、B
さんのクラスには「userB」というパッケージ名を付けると、それぞれ
Chapter
2
「userA.Example01」
、「userB.Example01」となり、区別できます。
Chapter
userAパッケージ
Aさん
Example01クラス
3
userBパッケージ
Bさん
Example01クラス
Chapter
4
Chapter
userAパッケージ
5
userBパッケージ
「パッケージ名.クラス名」
と記述することで、区別で
き、組み合わせて利用でき
るようになる
Example01クラス
Example01クラス
こちらは
「userA.Example01クラス」
こちらは
「userB.Example01クラス」
Chapter
6
Chapter
7
図 4-1-3 パッケージ名でクラスを区別する
CHAPTER 3 で作成した「Hello Java」と表示するプログラムでは、
package example01;
public class Example01 {
Chapter
8
Chapter
…略…
9
}
のように、
「example01」というパッケージ名を付けています。ですから、
この Example01 クラスは、example01 パッケージに属します。すなわち
フルネームで記述すれば、「example01.Example01」です。
01 プログラムの構成単位となる「クラス」
079
パッケージはフォルダ名と合致する
パッケージ名を付けると、そのクラスは、「パッケージ名と同じフォル
ダ」に保存されるようになります。
NetBeans からだと、実行前のコンパイルが自動で処理されるのでわか
りにくいのですが、ソースファイルはコンパイルされ、クラスファイルと
なり、パッケージのフォルダの下に保存されています(P.067 参照)。
これらの名前を変更したり、階層を移動したりすると、動かなくなるの
で注意してください。
build
classes
パッケージ名のフォルダ
example01
Example01.class
パッケージ名のフォルダ
の下にクラスのファイル
が配置される
図 4-1-4 パッケージ名と同じフォルダの下にクラスファイルが配置される
パッケージ名にドメイン名を逆順にしたものを指定する
パッケージは、
「グループ化したときの所属」を示すものなので、この例
のように「example01」などの漠然としたパッケージ名は、本来は、適し
たものではありません。
実際には、グループ化の目的である「開発者名」「開発チームのグループ
名」「開発しているプログラムのプロジェクト名」など、プログラムの性質
や用途を示す名称を付けるべきです。
Java では、
「重複しない」という観点から、パッケージ名に、
「関係者が
所属する企業のドメイン名などを逆順にしたものを使うこと」が推奨され
ています。ドメイン名は、インターネット上で唯一無二のものであり、重
複しないからです。
たとえば、企業が「example.co.jp」というドメイン名をもっていて、
「myproject」というプロジェクトを開発しているときは、
080
package jp.co.example.myproject;
Chapter
1
などというパッケージ名を指定するようにします。
この場合、Example01 クラスは、フルネームで記述すると、「jp.co.
example.myproject.Example01」です。
Chapter
2
パッケージ名自体がピリオドで区切られた場合は、ピリオドはフォルダ
階層に相当します。つまり、この例の場合は、
「jp フォルダ」「co フォルダ」
「example フォルダ」「myproject フォルダ」の下に「Example01.class
Chapter
3
ファイル」が置かれるという階層になります。
もちろん、この場合も、Example01.class を別のフォルダ階層に移動し
てしまうと、動かなくなります。
Chapter
4
build
Chapter
5
classes
jp
co
Chapter
6
example
jp.co.example.myproject
パッケージ
myproject
Chapter
Example01.class
パッケージ名のフォルダ
の下にクラスのファイル
が配置される
7
Chapter
8
図 4-1-5 パッケージ名の階層が深いこともある
Chapter
9
01 プログラムの構成単位となる「クラス」
081
CHAPTER
SECTION
02
4
Java プログラムの基礎(1)〜「API クラスライブラリ」と「文字列」
基本的な機能を提供する
「APIクラスライブラリ」
Java では、
「画面に文字を表示する」
「ウィンドウを表示する」
「マウス
が動いているかどうか調べる」
「ファイルを読み書きする」
「ネットワー
ク通信する」など、さまざまなやりとりは、
「APIクラスライブラリ」を
通じて操作します。これは Java であらかじめ用意されている「クラス」
の集まりです。
基本的な機能を提供する APIクラスライブラリ
CHAPTER 3 では、画面に「Hello Java」と表示するには、
System.out.println("Hello Java");
と記述すると説明しました。
この「System.out.println」は実は、Java によって提供された「API ク
ラ ス ラ イ ブ ラ リ(Application Program Interface Class Library)」 を
使っています。
CHAPTER 1 で少し説明したように、Java では、OS の違いを吸収するた
め、
「画面出力」
「キーボードやマウスとのやりとり」
「ファイル操作」
「ネッ
トワーク通信」などは、すべて、API クラスライブラリを通じて操作します。
Java のプログラムから、これらの機能を実行することで、画面に文字を
表示したり、キーボードから文字入力を受け取ったり、ファイルを読み書
MEMO
きしたり、ネットワーク通信したりするのです。
API クラスライブラ
API クラスライブラリなど、
「いま実行されているのとは別の箇所にある
リは、略して
「API」
機能を拝借して実行すること」を、
「呼び出す(call する)」と表現します。
と呼ばれたり、
「標準
クラスライブラリ」
と呼ばれたりするこ
ともあります。
082
画面出力
Chapter
1
キーボード、マウス
Javaのプログラム
APIクラスライブラリ
ファイル操作
ネットワーク通信
Chapter
2
…
Chapter
3
図 4-2-1 API クラスライブラリ
Chapter
クラスライブラリはパッケージ化されている
API クラスライブラリの正体は、「クラス」という名前からわかるよう
4
Chapter
5
に、Java のクラスの集合体です。
たとえて言えば、
Chapter
public class 画面出力クラス {
public println(…) {
6
文字を表示する命令
}
Chapter
…
7
}
とか
Chapter
8
public class キーボードクラス {
public read(…) {
キーボードから 1 文字入力する命令
}
public readLine(…) {
キーボードから 1 行入力する命令
}
Chapter
9
…
}
02 基本的な機能を提供する「API クラスライブラリ」
083
とか
public class ネットワーククラス {
public openConnection(…) {
相手のサーバに接続する命令
}
…
}
MEMO
といった、さまざまな機能をもつクラスが、たくさん集まったものです。
こうしたクラスが、Java の開発元であるオラクル社によって提供され、
最初から、Java 自体に組み込まれています。これが、API クラスライブラ
書館」や「書庫」と
リです。
いう意味であり、
プ
ですからプログラマは、自分でこれらの機能を作らなくても API クラス
ログラミングの世
ライブラリで提供されているクラスを拝借して使うだけで、さまざまな機
能を実現できるようになっているのです。
界では、いくつかの
「プログラムを一
カ所に集めたもの」
どのような機能をもつクラスが提供されているのかは、Java の「API リ
という意味合いで
ファレンス」で参照できます。最新版の Java 8 の API リファレンスは、次
使われます。
の URL で参照できます。
https://docs.oracle.com/javase/jp/8/docs/api/
図 4-2-2 API リファレンス
084
「 ラ イ ブ ラリ
(Library)
」
は、
「図
Chapter
1
Chapter
2
Chapter
3
Chapter
4
Chapter
5
Chapter
6
図 4-2-3 パッケージについての説明を表示したところ
API クラスライブラリは、クラスなので、前節で説明したように、それぞ
Chapter
7
れに「パッケージ名」が付けられています。
パッケージは、分類ごとに名付けられています。主なパッケージを表
4-2-1 に示します。
Chapter
8
MEMO
API クラスライブラリのパッケージは
・「java で始まるもの(基本)」
・「javax で始まるもの(java で始まるものの拡張)」
・「org.omg で始まるもの(CORBAという通信方式をサポートするライブラリ。エン
Chapter
9
タープライズ系の開発で使われるものなので、一般に、使う機会はほとんどない)
」
の 3 つに分類されます。表 4-2-1 では、もっとも基本的な「java で始まるパッケージ」
のうち、よく使うものだけを提示しています。
02 基本的な機能を提供する「API クラスライブラリ」
085
表 4-2-1 API クラスライブラリの主なパッケージ(抜粋)
パッケージ名
java.applet
分類
(P.028)の機
Web ブラウザの内部で Java を実行する「Java アプレット」
能を提供する
java.awt
ウィンドウなどの基本的なグラフィック機能を提供する
java.io
ファイル入出力などの機能を提供する
java.lang
Java の基本的な機能を提供する
java.net
ネットワーク通信機能を提供する
java.security
セキュリティに関する機能を提供する
java.sql
データーベースを操作する機能を提供する
java.text
文字の書式を整える機能などを提供する
java.time
日付・時刻関連の機能を提供する
java.util
データ操作するのに便利な機能を提供する
パッケージ名が明示されていないときは、「java.lang パッケージ」が指
定されたものと見なされます。たとえば、
System.out.println("Hello Java");
の「System」は、「java.lang パッケージの System クラス」という意味
です。
もしフルネームで記述すれば、
java.lang.System.out.println("Hello Java");
です。
086
COLUMN
API クラスライブラリを確認する
API クラスライブラリは、実際に、ファイルとして提供されています。
Chapter
1
Java をインストールしたフォルダ(P.045 の図 2-3-5 の[インストール先]
)以下の
「jre」フォルダ内の「lib」フォルダには、
「rt.jar」というファイルがあり、これが、API
クラスライブラリの実体です。
「*.jar」という形式は、「ひとまとめにされたクラスファイル」を示すものです。ZIP
Chapter
2
形式ファイルを展開するツールを使うと、中身を見られます。
実際に展開すると、
「java」フォルダの「lang」フォルダの下に、System.classと
いうファイルが存 在するのがわかります。これが、プログラムで記 述している
「System.out.println」の「System」の正体です。
Chapter
3
Chapter
4
Chapter
5
Chapter
6
Chapter
7
図 4-2-A API クラスライブラリを確認する
Chapter
8
System.out.println の意味を調べる
API クラスライブラリのドキュメントには、そのクラスに備わっている
メンバの一覧や、メソッドの使い方が記載されています。
Chapter
9
実際に API リファレンスで「java.lang」の項目を開き、
「System クラス」
を調べてみましょう。
02 基本的な機能を提供する「API クラスライブラリ」
087
①「java.lang」をクリック
③下にスクロールすると、
out に関する解説がある
②「System」をクリック
図 4-2-3 System クラスを調べる
標準入出力
「System.out.println」の「out」は、この System クラスに備わる「out」
というデータのことです。
実際に調べると、out の解説があります。
【API リファレンスより引用】
public static final PrintStream out
「標準」出力ストリームです。このストリームはすでに開いていて、出力データの受け
取りが可能です。通常、このストリームはディスプレイ出力、またはホスト環境やユー
ザーによって指定される出力先の出力と一致します。
単純なスタンドアロンの Java アプリケーションにおいて、出力データの行を書き込む
一般的な方法は以下のとおりです。
System.out.println(data)
クラス PrintStream の println メソッドを参照してください。 088
わかりにくい表現ですが、out は、コンソールアプリケーションの「画
面」に出力するように結びつけられたものです。この仕組みを「標準出力
(standard output。stdout と略されることもある)」と言います。
Chapter
1
本書のサンプルでは利用していませんが、コンソールアプリケーション
には、「キーボード」からの入力も結びつけられています。これは System
クラスの「in」で受け取ります。これを「標準入力(standard input。stdin
Chapter
2
と略されることもある)」と呼びます。
つまり、コンソールアプリケーションでは、
「System.out」と「System.
in」を通じて、画面に何か表示したり、キーボードからの入力を受け取っ
たりできるように決められています。
Chapter
3
「標準出力」と「標準入力」は、合わせて「標準入出力」と呼ばれます。
Chapter
4
「出力」、データを読み込む行為(キー入力やファイルから
の読み込みなど)を「入力」と言います。
MEMO
データを書き出す(表示やファイルへの保存など)行為を
Chapter
5
Chapter
APIクラスライブラリ
System.out
6
出力
Javaのプログラム
画面
System.in
Chapter
7
入力
キーボード
Chapter
8
図 4-2-4 標準入出力
Chapter
9
02 基本的な機能を提供する「API クラスライブラリ」
089
COLUMN
リダイレクト
通常は、標準出力は「画面」、標準入力は「キーボード」に接続されていますが、
OS の機能によって、これをファイルに切り替えることもできます。
これを標準出力や標準入力の「リダイレクト(redirect)」と言います。
画面表示の代わりに
ファイルに書き込む
ファイル
APIクラスライブラリ
System.out
Javaのプログラム
System.in
キーボード
キーボードの代わりに
ファイルから読み込む
ファイル
図 4-2-B リダイレクト
リダイレクトすれば、画面に表示されるはずのデータをファイルに書き出したり、
キー入力の代わりにファイルから読み込んだりできます。
Windows の場合は、コマンドプロンプトから実行する際、
「>」と「<」の記号を
使ってリダイレクトを指定します。
Java のプログラムを実行するときに、
java example01.Example01 >
ファイル名
として実行すれば、標準出力のリダイレクトとなり、ふだんは画面に表示される文字
が、指定したファイルに書き込まれます。
また、
java example01.Example01 <
ファイル名
とすれば、もし、キー入力を受け取るプログラムなら、キーボード入力の代わりに、ファ
イルから文字を読み取ります。
090
文字を書き出す PrintStream
Chapter
では、
「out」とは一体、何でしょうか。解説を見ると、「out」は次のよ
1
うに記載されています。
Chapter
2
public static final PrintStream out
この定義は、out の実体が「PrintStream」であることを示しています。
そこで今度は、PrintStream の解説を見てみましょう。解説の「Print
Stream」にはリンクが張られているので、そこをクリックすれば、Print
Chapter
3
Stream の解説を見られます。
Chapter
4
MEMO
「java.lang」ではなく「java.io」に
PrintStream クラスは、
属しています。もし、APIリファレンスのトップページから る
場合は、「java.io パッケージ」から探してください。
Chapter
5
Chapter
6
Chapter
7
Chapter
8
Chapter
9
図 4-2-5 PrintStream クラスの解説を見る
ここには、println メソッドについての解説があります。次のように、い
くつかの書式があることがわかります。
02 基本的な機能を提供する「API クラスライブラリ」
091
図 4-2-6 println メソッドの書式
これらの違いは、println の後ろの括弧のなかに書く値、つまりメソッド
で使う値の種類の違いです。ここに何を書くかによって、どれが呼び出さ
れるのかが決まります。
void println(boolean x)
void println(char x)
…略…
void println(String x)
プログラムで、
System.out.println("Hello Java");
というように、括弧のなかに「ダブルクォーテーションで囲んだ文字」を
指定したとします。文字列は、Java では「String」という種類にあたりま
092
す(詳しくは後ほど説明します)。
そのため、この場合は、いくつかある「println」の定義のなかから、
Chapter
1
void println(String x)
Chapter
のように、括弧の中身が「String」として指定されている部分が、該当し
2
ます(これは String という種類の、x という値が括弧内に書かれるという
意味です)。
Chapter
3
この解説は、次のように記載されています。
【API リファレンスより引用】
Chapter
4
public void println(String x)
String を出力して、行を終了します。このメソッドは、print(String) を呼び出し
てから println() を呼び出すのと同じように動作します。
パラメータ :
x -
出力される String 値。
Chapter
5
Chapter
6
この解説も、何やら難しいことが記載されていますが、最初の文の「行
を終了する」というのは、「末尾に改行マークを付ける」のと同じです。
わかりやすく言えば、
Chapter
7
Chapter
System.out.println("Hello Java");
8
というのは、
「out に Hello Java という文字を出力し、最後に改行も出力す
る」という意味です。
Chapter
9
out は、先に説明したように標準出力であり、画面と結びつけられていま
す。ですから、この結果、画面に「Hello Java」と行末の改行が表示され
るというわけです。
02 基本的な機能を提供する「API クラスライブラリ」
093
System.out.println("Hello Java");
を実行したときの流れ
「Hello
Java」
PrintStream
Hello Java
void println(String x)
System.out
System.outは、画面に結び
つけられたPrintStream
画面
① System.out が指している
PrintStream のprintlnメ
ソッドに
「Hello Java」を渡す
②末尾に改行が付けられた
ものが書き込まれる
図 4-2-7 System.out.println を実行したときの動作
COLUMN
ストリーム
ここで見てきた「PrintStream クラス」のように、
「何かデータの流れを表現するも
の」は、
「ストリーム(Stream)」と呼ばれます。ストリームは、川の流れのことです。
ストリームは、Java 以外にも登場するプログラミングの概念で、データの入口と出
口があり、
「何か処理しながらデータが流れる仕組み」を川の流れに見立てて、このよ
うに表現しています。
ストリームは、「ファイルを読み書きするとき」や「データの書式を変えるとき」
「暗
号化したいとき」などに、しばしば用いられる概念です。
データ
入力
内部でデータを整理したり
加工したりする
ストリーム
図 4-2-C ストリーム
094
出力
加工されたデータ
③画面に表示される
メソッドに値を引き渡す「引数」
Chapter
1
System.out.println では、括弧のなかに「表示したい文字」を指定して
います。
Chapter
P.076 でも説明していますが、このように括弧のなかに指定する、「メ
2
ソッドに処理させたいデータ」のことを「引数(ひきすう)」と言います。
引数を変えれば、その結果が変わります。つまり、
Chapter
3
System.out.println("Hello Java");
とすれば、画面に「Hello Java」と表示されますし、
Chapter
4
System.out.println("Hello World");
Chapter
5
とすれば、画面に「Hello World」と表示されます。
どのような引数をとるのかは、メソッドごとに異なります。メソッドに
よっては、
「ひとつも引数をとらないもの(この場合、括弧の中身は、いつ
も空欄になります)」や「複数の引数をとるもの(この場合、カンマで区
切って指定します)」もあります。
Java」
void println(String x)
7
「Hello
Java」と改行
System.out.println("Hello World");
「Hello
World」
void println(String x)
6
Chapter
System.out.println("Hello Java");
「Hello
Chapter
Chapter
「Hello
World」と改行
8
渡す引数を変えることで、メソッドが処理するデータが変わる
Chapter
9
図 4-2-8 メソッドと引数
02 基本的な機能を提供する「API クラスライブラリ」
095
CHAPTER
SECTION
4
Java プログラムの基礎(1)〜「API クラスライブラリ」と「文字列」
文字列の表記方法
03
System.out.println("Hello Java") が、APIライブラリで提供されてい
る機能を呼び出しているということがわかったところで、今度は
「"Hello Java"」の部分に焦点を当てます。
ダブルクォーテーションで括って文字列を表現する
Java で文字を示すときは、「"」(ダブルクォーテーション)で、全体を
MEMO
括って表現します。
「"」で囲んだ文字
これを「文字列」と呼びます。つまり、
列は、
「文字列リテ
ラル」
と呼ばれるこ
System.out.println("Hello Java");
ともあります。「リ
テラル(literal)」
の「"Hello Java"」の部分は、文字列の表現であり、
「Hello Java」という
文字の並びを示します。
COLUMN
という意味です。
「文字」と「文字列」
「"」で括った文字群のことを「文字列」と呼ぶのは、
このような理由から、「文字」と「文字列」とを混同
Java においては(そして Java 以外のプログラミング言
語でも同じです)、
「1 文字だけ」と「複数の文字から構
しないでください。
成されるもの」を、区別して扱っているからです。
Java には、実は、1 文字だけを扱う表現もあり、これ
は「文字(char。character の略で、
「チャー」や「キャ
ラクタ」と読む)
」と呼んで、文字列とは区別します。
「"」(ダブルクォーテーション)で囲んだものは、
「
(文字ではなく)文字列」です。
たとえ、「"H"」のように 1 文字しか文字がなくても、
「"」で囲まれていれば文字列です。何文字記載してい
るかは、関係ありません。
ちなみに、
「文字(char)」は、ダブルクォーテーショ
また、「""」のように「"」と「"」のなかに何も文字
ンではなく、シングルクォーテーションで括って表記し
が入っていない表記も許されます。
ます(たとえば、「'H'」などと表現する)。
「文字(char)」は、
「文字列から 1 文字ずつ取り出
096
とは、
「元のままの」
これは、何も入っていない文字列のことで、「空文字
(からもじ)
」と呼ばれます。
して処理したいとき」、
「1 文字に対して数値計算などを
空文字は、データを初期化したいとき(たとえば、
したいとき」
「キーボードからの 1 文字入力を直接扱うと
ユーザーにテキストボックスを表示するとき、その初期
き」など、
「1 文字しか扱わない」ときに限って使われる
状態を「何も文字入力されていない状態にしたいとき」
少し特殊なもので、文字列とは区別されます。
など)に、しばしば使われます。
改行など特殊文字
Chapter
1
ときには、文字列に「改行」などの特殊な文字を入力したいこともあり
ます。
その場合、
Chapter
2
System.out.println("Hello
Chapter
3
Java");
のように、表記することはできません。これは、Java の文法で、「"」と、
Chapter
それに対応する「"」は、同じ行に表記しないとエラーになるからです。
4
代わりに改行などの特殊文字は、「
『¥』
(半角の円記号)と『英数字や記
号』の組み合わせで示す」という決まりがあります。これを「エスケープ
シーケンス(escape sequence)
」と言います(表 4-3-1)。
Chapter
5
エスケープシーケンスでは、改行は、「¥n」と定義されています。そこ
で、たとえば、
Chapter
6
System.out.println("Hello¥n¥n¥nJava");
MEMO
のように「¥n」を 3 つ記述すれば、
「Hello」と「Java」との間に、
「3 つの
半角の円文字「¥」
改行」が入ります。
は、OS やフォント
表 4-3-1 エスケープシーケンス
エスケープシーケンス
によっては、
「\」
表記されることも
¥b
バックスペース
あります。意味は
¥f
改ページ
¥n
改行(LF)
¥r
復帰(CR)
¥t
タブ文字
「¥」文字自身
¥"
「"」文字
¥'
「'」文字
¥ooo
¥uhhhh
7
(逆スラッシュ)で
意味
¥¥
Chapter
同じです。
Chapter
8
Chapter
9
3 桁の 8 進数で示した文字コード(ooo は 000 ∼ 377 の範囲)の
文字
4 桁の 16 進数で示した文字コードの文字(hhhh は 0000 ∼ ffff の
範囲)の文字
03 文字列の表記方法
097
改行は「¥n」で表現する
「¥n」を書いた数だけ改行される
図 4-3-1 エスケープシーケンスで改行を表現した例
MEMO
改行記号は一般に「¥n」を使いますが、Mac OS 9 以前では「¥r」を用います。ま
た Windows の場合、ファイルの改行コードには「¥r¥n」を用います。画面に表示す
るときは「¥n」のみで改行されますが、ファイルに書き出すときは「¥r¥n」のように
「¥r」と「¥n」を両方記述しないと、Windows 付属のメモ帳などで開いたときに、行
がつながって表示されます。
文字列中にダブルクォーテーションを含む場合
表 4-3-1 にも示してありますが、文字列中にダブルクォーテーションを
含 む 場 合 は、
「¥"」 と 記 述 し な け れ ば な り ま せ ん。 た と え ば、「Hello
"Java"」と出力したいときに、
【誤】
System.out.println("Hello "Java"");
と記述するのは間違いです。文字列の「"」は「¥"」と記述する必要があり、
【正】
System.out.println("Hello ¥"Java¥"");
と記述しなければなりません。
098
円記号自体
Chapter
1
このように「¥」は、エスケープシーケンスを示すので、
「¥」自体を出力
したいときは、「¥¥」と表記しなければならないので注意してください。
たとえば、「¥10,000」と出力したい場合、
Chapter
2
【誤】
System.out.println("¥10,000");
Chapter
3
と記述すると、8 進数文字の表記である「¥ooo」の形式と合致してしまう
ので、
Chapter
4
「¥10」と「,000」
と解釈されます。「¥10」は表示されない制御記号なので、結果として画面
Chapter
には、「,000」としか出力されなくなります(図 4-3-2)。
5
正しくは、
Chapter
【誤】
6
System.out.println("¥¥10,000");
MEMO
のように「¥」を重ねて「¥¥」と記述しなければならないので注意してくだ
ここでは「¥」は半
さい。
Chapter
7
角であると前提し
ています。全角の
「¥」は、エスケー
プする必要はあり
ません。
「¥10」は、エスケープシーケンスとみなされる。
正しくは、
「¥¥10,000」と記述しなければならない。
Chapter
8
Chapter
9
頭の「¥10」の部分が表示されない
図 4-3-2 「¥」文字は「¥¥」と表記しないと表示されない
03 文字列の表記方法
099
文字列の連結
さて、文字列は、
「+」
(半角文字の「プラス」)を使うと、連結できます。
たとえば、
System.out.println("Hello" + "ABC");
と記述すれば、
「Hello」と「ABC」が連結され、画面には「HelloABC」と
表示されます。
MEMO
ソースコードを見やすくするため、
「+」などの記号の前後には
空 白を記 述 するのが 慣 例 ですが、 空 白を取り除 いて、
「"Hello"+"ABC"」のように続けて記述してもかまいません。
「Hello」と「ABC」とを連結する
連結された「HelloABC」が表示された
図 4-3-3 文字列を連結した例
「+」記号は、いくつでも使えます。たとえば、
System.out.println("Hello" + "ABC" + "DEF" + "GHI");
などのようにすれば、「HelloABCDEFGHI」と表示されます。
100
■販売情報
本書にご興味を持っていただけたら、以下のサイトもご覧ください。
・Amazon
http://www.amazon.co.jp/dp/483995674X/
・マイナビブックス
https://book.mynavi.jp/ec/products/detail/id=52432