Java学習教材(2)

Similar documents
Microsoft Word - 第3章.doc

Java学習教材(2)

PowerPoint Presentation

(Microsoft Word - Excel\211\236\227p2\217\315.docx)

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合

2016 年 度 情 報 リテラシー 変 更 された 状 態 同 様 に 価 格 のセルを 書 式 設 定 する 場 合 は 金 額 のセルをすべて 選 択 し [ 書 式 ]のプルダウンメニューか ら[ 会 計 ]を 選 択 する すると が 追 加 され 金 額 としての 書 式 が 設 定 さ

1

PowerPoint Presentation

目 次 1. Web メールのご 利 用 について Web メール 画 面 のフロー 図 Web メールへのアクセス ログイン 画 面 ログイン 後 (メール 一 覧 画 面 ) 画 面 共 通 項 目

PowerPoint プレゼンテーション

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

<4D F736F F D C97F195CF8AB DEC90E096BE8F912091E6312E313294C52E646F63>

01_07_01 データのインポート_エクスポート_1

ガイダンス

検 索 しよう... 1 結 果 を 見 よう ~ 検 索 結 果 一 覧 ~... 2 結 果 を 見 よう ~ 検 索 結 果 詳 細 ( 図 書 )~... 3 結 果 を 見 よう ~ 検 索 結 果 詳 細 ( 雑 誌 )~... 4 ログインしよう... 5 私 の 本 棚 を 活 用

1.3 利 用 方 法 図 1 国 立 国 会 図 書 館 デジタルコレクション 送 信 サービスの 対 象 資 料 本 文 の 閲 覧 は 図 書 館 サービスカウンター 備 え 付 けの 専 用 パソコン(1 台 )のみでの 利 用 となります 利 用

オブジェクト指向プログラミング・同演習 5月21日演習課題

<4D F736F F D ED28FDA8DD7837D836A B2E646F6378>

2016 年 度 情 報 リテラシー 次 に Excel のメニューから[ 挿 入 ]タブをクリックし 表 示 されたメニュー 内 の[グラフ]にある[ 折 れ 線 グラフ]のボタンをクリックする するとサブメニューが 表 示 されるので 左 上 の[ 折 れ 線 ]を 選 択 する [ 挿 入 ]

< F2D93648E718E868EC58B8F30332E6A7464>

■デザイン

計算式の取り扱い

入 札 参 加 資 格 申 請 システム 操 作 マニュアル 入 札 参 加 資 格 の 資 格 有 効 ( 変 更 ) 日 を 迎 えると 追 加 届 の 登 録 ができるようになります ( 入 札 参 加 資 格 申 請 の 定 時 受 付 では いずれかの 申 請 先 団 体 から 入 札 参

ガイダンス

<4D F736F F D20819C486F70658F6F93588ED297708AC7979D89E696CA837D836A B E A2E646F63>

C.1 共 有 フォルダ 接 続 操 作 の 概 要 アクセスが 許 可 されている 研 究 データ 交 換 システムの 個 人 用 共 有 フォルダまたは メーリングリストの 共 有 フォルダに 接 続 して フォルダを 作 成 したり ファイル をアップロードまたはダウンロードしたりすることがで

プログラミング基礎I(再)

SXF 仕 様 実 装 規 約 版 ( 幾 何 検 定 編 ) 新 旧 対 照 表 2013/3/26 文 言 変 更 p.12(1. 基 本 事 項 ) (5)SXF 入 出 力 バージョン Ver.2 形 式 と Ver.3.0 形 式 および Ver.3.1 形 式 の 入 出 力 機 能 を

< F2D B838A835882CC8CF68EAE2E6A7464>

PowerPoint プレゼンテーション

続 に 基 づく 一 般 競 争 ( 指 名 競 争 ) 参 加 資 格 の 再 認 定 を 受 けていること ) c) 会 社 更 生 法 に 基 づき 更 生 手 続 開 始 の 申 立 てがなされている 者 又 は 民 事 再 生 法 に 基 づき 再 生 手 続 開 始 の 申 立 てがなさ

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

「1 所得税及び復興特別所得税の確定申告書データをお持ちの方」からの更正の請求書・修正申告書作成編

1. 表 から 値 を 抽 出 する 説 明 1.1. 表 から 値 を 抽 出 するための 関 数 について 説 明 します LOOKUP VLOOKUP HLOOKUP 関 数 は 検 索 値 に 対 応 する 値 を 検 索 値 を 含 む 一 覧 表 から 抽 出 し てくれる 関 数 です

<4D F736F F D B68F918DEC90AC89898F4B899E977095D2816A2E646F63>

目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について EXCEL 一 括 登 録 EXCEL ダウンロード 検 索 条 件 の 指 定 プレビュー EXCEL ダウンロード(データ 抽 出 あ

1 書 誌 作 成 機 能 (NACSIS-CAT)の 軽 量 化 合 理 化 電 子 情 報 資 源 への 適 切 な 対 応 のための 資 源 ( 人 的 資 源,システム 資 源, 経 費 を 含 む) の 確 保 のために, 書 誌 作 成 と 書 誌 管 理 作 業 の 軽 量 化 を 図

1. 前 払 式 支 払 手 段 サーバ 型 の 前 払 式 支 払 手 段 に 関 する 利 用 者 保 護 等 発 行 者 があらかじめ 利 用 者 から 資 金 を 受 け 取 り 財 サービスを 受 ける 際 の 支 払 手 段 として 前 払 式 支 払 手 段 が 発 行 される 場 合

Microsoft PowerPoint _リビジョンアップ案内_最終.pptx

ワープロソフトウェア

1.2. ご 利 用 環 境 推 奨 ブラウザ Internet Explorer Google Chrome(バージョン 32 時 点 で 動 作 確 認 済 み) Mozilla Firefox(バージョン 26 時 点 で 動 作 確 認 済 み) Safari 7

<4D F736F F D2091E F18CB48D C481698E7B90DD8F9590AC89DB816A2E646F63>

研究者情報データベース

5-2 一 般 ユーザー 用 :メール 2 送 信 者 のリンクをクリックすると 受 信 メールの 内 容 を 見 ることができます 受 信 メール 内 容 画 面 項 目 送 信 者 宛 先 CC 本 文 (テキスト) 本 文 (HTML) メールアドレスのリンクをクリックするとアドレス 帳 へ

4.5. < 参 加 表 明 書 を 提 出 する> 調 達 案 件 一 覧 の 表 示 対 象 となる 案 件 を 検 索 し 調 達 案 件 一 覧 に 表 示 させます 参 加 したい 案 件 の 調 達 案 件 名 称 行 - 入 札 参 加 資 格 確 認 申 請 / 技 術 資 料 /

「給与・年金の方」からの確定申告書作成編

メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受 信 したメールが 一 覧 表 示 されます メール 受 信 タブをクリックすると 受 信 箱 フ

R4財務対応障害一覧

新 生産管理システム ご提案書 2002年10月15日 ムラテック情報システム株式会社

WEBメールシステム 操作手順書

< F2D834F838C A815B A CC>

<4D F736F F D F B B838082F090DD927582B782E995FB96405F E646F6378>

Microsoft Word - word_05.docx

決 算 時 の 流 れ-1 1 年 間 の 仕 訳 入 力 が 終 了 したら 以 下 の 手 順 で 決 算 書 を 作 成 します Step1 精 算 表 を 印 刷 する 1.[F2 入 力 ]タブより 合 計 表 を 選 択 し 月 度 の 指 定 で 期 首 ~12ヶ 月 目 を 指 定

POWER EGG V2.01 ユーザーズマニュアル ファイル管理編

弁護士報酬規定(抜粋)

次の演習課題(1),(2)のプログラムを完成させよ

医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 入 力 項 目 について 基 本 情

( 別 紙 ) 以 下 法 とあるのは 改 正 法 第 5 条 の 規 定 による 改 正 後 の 健 康 保 険 法 を 指 す ( 施 行 期 日 は 平 成 28 年 4 月 1 日 ) 1. 標 準 報 酬 月 額 の 等 級 区 分 の 追 加 について 問 1 法 改 正 により 追 加

PowerPoint プレゼンテーション

V-CUBE One

<4D F736F F D208E9197BF342D8EC08F4B87428EF68BC B834A E646F6378>

PowerPoint プレゼンテーション

ことばを覚える

■コンテンツ

の と す る (1) 防 犯 カ メ ラ を 購 入 し 設 置 ( 新 設 又 は 増 設 に 限 る ) す る こ と (2) 設 置 す る 防 犯 カ メ ラ は 新 設 又 は 既 設 の 録 画 機 と 接 続 す る こ と た だ し 録 画 機 能 付 防 犯 カ メ ラ は

2

Ver 改 訂 日 付 改 訂 内 容 1

<4D F736F F D203193FA8AD45F95CA8E86325F89898F4B315F94F093EF8AA98D AD97DF914F82CC8FEE95F182CC8EFB8F C28E8B89BB2E646F63>

< F2D F B834E2E6A7464>

別冊資料-11

改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記

Microsoft Word - 不正アクセス行為の禁止等に関する法律等に基づく公安

II Java :30 12:00 I. I IV II. III. IV. ( a d) V. : this==null, T == N A ActionListener C class D actionperformed G getsource I implements K

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン

養 老 保 険 の 減 額 払 済 保 険 への 変 更 1. 設 例 会 社 が 役 員 を 被 保 険 者 とし 死 亡 保 険 金 及 び 満 期 保 険 金 のいずれも 会 社 を 受 取 人 とする 養 老 保 険 に 加 入 してい る 場 合 を 解 説 します 資 金 繰 りの 都

目 次 1. 化 学 研 究 所 研 究 者 データベースについて 研 究 者 情 報 データベース 登 録 システムログイン 画 面 メニュー 画 面 パスワードの 変 更 公 開 時 の 表 示 / 非 表 示 の 設 定.

WebMail ユーザーズガイド

目 次 1 ログインする 1 2 研 修 情 報 を 登 録 する 2 step1 登 録 フォームに 入 力 する 2 step2 プレビューで 入 力 内 容 を 確 認 する 18 step3 下 書 き 保 存 する 20 step4 登 録 する 21 step5 管 理 者 による 承

(Microsoft Word - Word\211\236\227p8\217\315.docx)


PowerPoint プレゼンテーション

<4D F736F F D20819C B78AFA95DB91538C7689E68DEC90AC289

目 次 1. ログイン/ログアウト 1.1 ログインする p ログアウトする p.3 2. 受 講 一 覧 画 面 p.4 3. 授 業 ページの 閲 覧 3.1 授 業 ページへの 遷 移 p 授 業 資 料 を IT s class.からダウンロードする p

03_主要処理画面.xlsx

Microsoft Word - サンプル _データベースアクセス_.doc

目 次. WEB メールへのログイン.... メール 送 信 手 順.... メール 受 信 手 順 アドレス 帳 の 操 作 手 順 フォルダーの 操 作 手 順 メール 発 信 者 登 録 署 名 登 録 手 順 基 本 的 な 設 定

SchITコモンズ【活用編】

Programming-C-9.key

一般競争入札について

(3) 小 単 元 の 指 導 と 評 価 の 計 画 小 単 元 第 11 章 税 のあらまし の 指 導 と 評 価 の 計 画 ( 四 次 確 定 申 告 制 度 抜 粋 ) 関 心 意 欲 態 度 思 考 判 断 技 能 表 現 知 識 理 解 小 単 元 の 評 価 規 準 税 に 関 す

ThinkBoard Free60 Manual

Microsoft Office Excel2007(NO.2エクセル初級後編)

< F2D82518CC282CC D2E6A7464>

eol 操 作 マニュアル 目 次 基 本 機 能 トップページとナビゲーション 構 成 基 本 機 能 タブメニュー と プルダウンメニュー について 基 本 機 能 ダイレクト 企 業 検 索 について 企 業 検 索 企 業 基 本 情 報 企 業 情 報 の 閲 覧 ダウンロード 有 報 メ

k_setumeikai_siryo

図 2 エクスポートによるシェープファイルの 新 規 保 存 新 規 保 存 するファイルは,より 分 かりやすい 名 前 をつけて 適 切 なフォルダ(shape フォル ダにまとめておくのがよい) 上 に 保 存 しておく 2 / 10

<91808DEC837D836A B5F8F488E528A6D E786C7378>

2. データを 検 索 する なごやコレクションのデータを 検 索 するための 方 法 として キーワード 検 索 詳 細 検 索 の 二 通 りの 検 索 方 法 が あります 2.1. キーワードから 探 す キーワードを 入 力 する トップページの 入 力 ボックスに 検 索

Transcription:

Java 学 習 教 材 (2) 筑 波 大 学 コンピュータサイエンス 専 攻 三 谷 純 最 終 更 新 日 2013/2/8 (C) 2013 Jun Mitani 図 表 出 典 : 三 谷 純 著 プログラミング 学 習 シリーズ Java ( 翔 泳 社 刊 )

本 資 料 の 位 置 づけ Java 2 アプリケーションづくりの 初 歩 ( 三 谷 純 著 ) 本 資 料 は Java2 アプリケーションづくりの 初 歩 ( 三 谷 純 著 ) を 大 学 企 業 などで 教 科 書 として 採 用 され た 教 員 指 導 員 を 対 象 に 授 業 などで 活 用 していただくことを 前 提 として 作 られてい ます どなたでも 自 由 に 使 用 できます 授 業 の 進 め 方 などに 応 じて 改 変 していただいて 結 構 です 大 型 本 : 296ページ 出 版 社 : 翔 泳 社 (2010/1/29) 言 語 日 本 語 ISBN-10: 4798120995 ISBN-13: 978-4798120997 発 売 日 : 2010/1/29

第 9 章 パッケージとJava API

パッケージとは Javaには クラスライブラリ と 呼 ばれる 便 利 なクラスやインタフェースがあらかじめ 準 備 されている クラスライブラリは 必 要 に 応 じて 自 由 に 使 え る クラスライブラリは 複 数 の パッケージ に 分 類 されている

Javaの 主 なパッケージ

パッケージに 含 まれるクラスの 利 用 java.utilパッケージに 含 まれるRandom クラスのインスタンスを 生 成 する 例 java.util.random rand = new java.util.rondom(); パッケージ 名 クラス 名 (パッケージ 名 ).(クラス 名 )という 表 現 をクラス の 完 全 限 定 名 という

import 宣 言 完 全 限 定 名 を 毎 回 記 述 するのは 大 変 とても 長 い 完 全 限 定 名 の 例 javax.xml.bind.annotation.adapters.xmladapter パッケージ 名 クラス 名 import 宣 言 をすれば プログラムの 中 でパッ ケージ 名 の 記 述 を 省 略 できる import パッケージ 名.クラス 名 ;

import 宣 言 の 使 用 例 import java.util.random; class ImportExample { public static void main(string[] args) { Random rand = new Random(); // 0~1の 間 のランダムな 値 を 出 力 する System.out.println(rand.nextDouble()); java.util.randomのimport 宣 言 をしている

複 数 のクラスのimport 宣 言 複 数 のクラスをimport 宣 言 する 場 合 そ のクラスの 数 だけ 宣 言 する import java.util.arraylist; import java.util.random; import java.util.*; *(アスタリスク) 記 号 を 使 って 省 略 できる java.utilパッケージに 含 まれる 全 てのクラスを import 宣 言 したのと 同 じ

パッケージの 階 層 例 えば 次 の 二 つは 異 なるパッケージ java.utilパッケージ java.util.zipパッケージ import java.util.*; と 記 述 してもjava.util.zipパッケージのク ラスは 使 用 できない 次 のように 記 述 する import java.util.*; import java.util.zip.*;

java.langパッケージ java.langパッケージにはjavaの 基 本 的 な 機 能 を 提 供 するクラスが 含 まれる System.out.println() のSystem クラスもjava.langパッケージに 含 まれ る import java.lang.*; という 記 述 は 省 略 できる

API 仕 様 書 Javaにはあらかじめ3000 以 上 のクラスや インタフェースが 準 備 されている API 仕 様 書 で 使 い 方 を 調 べられる http://docs.oracle.com/javase/jp/6/api/

API 仕 様 書 で 確 認 できるクラス 情 報 Randomクラスは java.utilパッケージ に 含 まれる java.lang.objectク ラスを 継 承 している Serializableインタ フェースを 実 装 している サブクラスに SecureRandomクラスが ある

クラスの 説 明 フィールド コンストラク タ メソッド の 説 明 が 続 く クラスの 説 明

Stringクラス String は java.langパッケージに 含 まれるクラス 次 の2 通 りでインスタンスを 生 成 できる String message = "こんにちは"; String message = new String("こんにちは"); new を 使 わなくてもインスタンスを 作 れる 特 殊 なクラス

Stringオブジェクトの 生 成 方 法 による 違 い String s1 = new String("こんにちは"); String s2 = new String("こんにちは"); System.out.println(s1 == s2); // false 異 なる2つのインスタンスが 生 成 される たまたま 文 字 列 が 同 じだけ

Stringオブジェクトの 生 成 方 法 による 違 い String s1 = "こんにちは"; String s2 = "こんにちは"; System.out.println(s1 == s2); // true 1つのインスタンスを 参 照 する

Stringクラスのメソッド Stringクラスには 文 字 列 を 扱 うための 便 利 なメソッドがある String str = "Javaの 学 習 "; System.out.println(str.length()); // 7 System.out.println(str.indexOf(" 学 習 ")); // 5 System.out.println(str.indexOf("Ruby")); // -1 System.out.println(str.contains(" 学 習 ")); // true System.out.println(str.contains("Ruby")); // false String str2 = str.replace("java", "Java 言 語 ")); System.out.println(str2); // Java 言 語 の 学 習

Stringクラスのメソッド 文 字 列 を 区 切 り 記 号 で 分 割 する 例 String str = "2012/12/31"; String[] items = str.split("/"); for(int i = 0; i < items.length; i++) { System.out.println(items[i]); 実 行 結 果 2012 12 31

Mathクラス java.lang.mathクラスには 数 学 的 な 計 算 を 行 う 便 利 なクラスメソッドが 多 数 ある

Mathクラスの 使 用 java.langパッケージはimport 文 を 省 略 できる クラスメソッドの 使 用 方 法 ( 復 習 ) Math.メソッド 名 ( 引 数 ); class MathExample { public static void main(string[] args) { System.out.println("-5の 絶 対 値 は" + Math.abs(-5)); System.out.println("3.0の 平 方 根 は" + Math.sqrt(3.0)); System.out.println(" 半 径 2の 円 の 面 積 は" + 2*2*Math.PI); System.out.println("sin60 は" + Math.sin(60.0*Math.PI / 180.0));

パッケージの 作 成 パッケージは 自 分 で 作 成 できる package パッケージ 名 ; とプログラムコードの 先 頭 に 記 述 する package mypackage; public class MyClass { public void printmessage() { System.out.println("mypackage.MyClassのprintMessageメソッド"); Eclipseでは[ファイル]-[ 新 規 ]-[パッケージ]でパッケージを 新 規 作 成 その 中 にクラスを 作 成 する

パッケージの 階 層 構 造 とフォルダの 階 層 構 造 jp.co.javacompany.developパッケージ 内 に MyClassクラスがある 場 合 注 :クラスの 継 承 の 階 層 とパッケージ の 階 層 はまったく 関 係 ない

パッケージ 名 の 設 定 パッケージ 名 は 他 人 が 作 ったものと 同 じ ものではいけない( 名 前 の 衝 突 ) ドメイン 名 をパッケージ 名 に 使 用 するこ とが 多 い 並 び 順 は 逆 例 :jp.co.javacompany.develop

クラスのアクセス 制 御 アクセス 修 飾 子 を 使 って パッケージ 外 部 からのアクセスを 制 御 できる クラスとインタフェースの 宣 言 で 使 用 できるアクセス 修 飾 子

メソッドとフィールドのアクセス 修 飾 子 メソッドとフィールドの 宣 言 で 使 用 できるアクセス 修 飾 子

アクセス 修 飾 子 の 優 先 順 位 フィールドやメソッドのアクセス 修 飾 子 がpublicであっても クラスのアクセス 修 飾 子 がpublicでない 場 合 は パッケー ジの 外 からはアクセスできない

複 数 のクラス 宣 言 を 持 つプログラムコード 1つの.javaファイルで 複 数 のクラスを 宣 言 できる public 修 飾 子 をつけられるのは1つだけ public 修 飾 子 をつけたクラス 名 とファイル 名 は 一 致 する 必 要 がある MultiClassExample.java class SimpleClass { String str; SimpleClass(String str) { this.str = str; public class MultiClassExample { public static void main(string[] args) { SimpleClass sc = new SimpleClass("Hello."); System.out.println(sc.str);

第 10 章 例 外 処 理

例 外 の 発 生 プログラムが 動 作 する 時 にトラブルが 発 生 することがある これを 例 外 と 言 う 例 外 が 発 生 する 例 外 が 投 げられ る 例 外 がスロー(throw)される な どと 表 現 する

例 外 が 発 生 する 例 ゼロでの 除 算 int a = 4; int b = 0; System.out.println(a / b);

例 外 が 発 生 する 例 範 囲 を 超 えたインデックスの 参 照 int[] scores = new int[3]; scores[0] = 50; scores[1] = 55; scores[2] = 70; scores[3] = 65;

投 げられた 例 外 をキャッチする 例 外 が 投 げられたとき にも その 例 外 を キャッチして 処 理 を 続 けることができる 仕 組 みがある try~catch 文 を 使 う 例 外 処 理 と 呼 ぶ

try~catch 文 try { tryブロック 本 来 実 行 したい 処 理 だが 例 外 が 投 げられる 可 能 性 がある 処 理 catch( 例 外 の 型 変 数 名 ) { catchブロック 例 外 が 投 げられたときの 処 理 finally { finallyブロック 最 後 に 必 ず 行 う 処 理

処 理 の 流 れ

例 外 処 理 の 例 public class ExceptionExample3 { public static void main(string[] args) { int a = 4; int b = 0; try { int c = a / b; System.out.println("cの 値 は" + c); catch (ArithmeticException e) { System.out.println(" 例 外 をキャッチしました"); System.out.println(e); System.out.println("プログラムを 終 了 します");

finallyの 処 理 public static void main(string[] args) { int a = 4; int b = 0; try { int c = a / b; System.out.println("cの 値 は" + c); catch (ArithmeticException e) { System.out.println(" 例 外 をキャッチしました"); System.out.println(e); return; finally { System.out.println("finallyブロックの 処 理 です"); System.out.println("プログラムを 終 了 します");

catchブロックの 検 索 class SimpleClass { void dosomething() { int array[] = new int[3]; array[10] = 99; // 例 外 が 発 生 する System.out.println("doSomethingメソッドを 終 了 します"); public class ExceptionExample5 { public static void main(string args[]) { SimpleClass obj = new SimpleClass(); try { obj.dosomething(); // 例 外 の 発 生 するメソッドの 呼 び 出 し catch (ArrayIndexOutOfBoundsException e) { System.out.println(" 例 外 をキャッチしました"); e.printstacktrace();

例 外 オブジェクト 例 外 が 発 生 した 時 には java.lang.exceptionクラスの 例 外 オブジェクト が 投 げられる 実 際 は Exceptionクラスのサブクラス 例 外 の 種 類 によって 異 なる ゼロ 除 算 :ArithmeticException 配 列 の 範 囲 を 超 えた 参 照 ArrayIndexOutOfBoundsException

例 外 オブジェクトの 種 類 による 場 合 分 け try { 例 外 が 投 げられる 可 能 性 のある 処 理 catch( 例 外 の 型 1 変 数 名 1) { 例 外 の 型 1の 例 外 が 投 げられたときの 処 理 catch( 例 外 の 型 2 変 数 名 2) { 例 外 の 型 2の 例 外 が 投 げられたときの 処 理 finally { 最 後 に 必 ず 行 う 処 理

例 外 クラスの 階 層 Exceptionオブジェクトが 投 げられる 可 能 性 がある 場 合 は try~catch 文 を 書 かなくてはいけない ただし RuntimeExceptionだけは try~catch 文 が 無 くてもよい

例 外 を 作 成 して 投 げる 例 外 オブジェクトを 自 分 で 作 成 して 投 げ ることができる 例 外 オブジェクトの 作 成 Exception e = new Exception(" という 例 外 が 発 生 しました"); 例 外 オブジェクトを 投 げる throw e; 通 常 はExceptionクラスをそのまま 使 用 せず サブクラスを 作 って 例 外 を 投 げる

メソッドの 外 への 例 外 の 送 出 自 分 で 作 成 した 例 外 オブジェクトを throwした 後 の 処 理 1. try~catch 文 で 囲 んで 処 理 する 2. メソッドの 外 に 投 げる (メソッドの 呼 び 出 し 側 で 処 理 する) 2の 場 合 はメソッドの 宣 言 に throws を 追 加 する 戻 り 値 メソッド 名 ( 引 数 ) throws 例 外 の 型 { 例 外 を 投 げる 可 能 性 のあるメソッドの 内 容

メソッドの 外 への 例 外 の 送 出 の 例 class Person { int age; void setage(int age) throws InvalidAgeException { if(age < 0) { throw new InvalidAgeException("マイナスの 値 が 指 定 された"); this.age = age; public class ExceptionExample7 { public static void main(string[] args) { Person p = new Person(); try { p.setage(-5); catch (InvalidAgeException e) { System.out.println(e);

第 11 章 スレッド

スレッドとは スレッドは 処 理 の 流 れ これまで 見 てきたプログラムは 命 令 が1つ ずつ 処 理 された シングルスレッド Javaでは 複 数 の 処 理 を 同 時 に 行 うことが できる マルチスレッド 例 1.ファイルをダウンロードしながら 画 面 の 表 示 を 更 新 する 例 2.アニメーション 表 示 しながらユーザ のマウス 操 作 を 受 け 付 ける

スレッドの 作 成 通 常 のプログラムは1つのスレッドで 実 行 される 新 しいスレッドを 追 加 できる 2つの 方 法 がある 1.Threadクラスを 継 承 した 新 しいクラス を 作 成 する 2.Runnableインタフェースを 実 装 した 新 しいクラスを 作 成 する

方 法 1.Threadクラスを 拡 張 する class MyThread extends Thread { // Thread クラスのrunメソッドをオーバーライド public void run() { 命 令 文 Threadクラスを 継 承 したクラスを 作 成 する runメソッドをオーバーライドする 命 令 文 に 処 理 を 記 述 する

方 法 1のThreadの 使 用 例 class MyThread extends Thread { public void run() { for(int i = 0; i < 100; i++) { System.out.println("MyThreadのrunメソッド("+i+")"); public class SimpleThreadTest { public static void main(string[] args) { MyThread t = new MyThread(); t.start(); for(int i = 0; i < 100; i++) { System.out.println("SimpleThreadTestのmainメソッド("+i+")");

Threadの 使 用 例 Threadクラスのrunメソッドを 直 接 呼 ば ない startメソッドを 呼 ぶことで 別 スレッ ドの 処 理 が 始 まる 複 数 のスレッドが 並 行 して 処 理 を 進 める

方 法 2.Runnableインタフェースを 実 装 する 方 法 1がいつでも 使 えるとは 限 らない 他 のクラスのサブクラスは Threadクラ スのサブクラスになれない 方 法 2 Runnableインタフェースを 実 装 する Runnableインタフェースに 定 義 されている runメソッドを 追 加 する

方 法 2のThread 使 用 例 class MyThread implements Runnable { public void run() { for(int i = 0; i < 100; i++) { System.out.println("MyThreadのrunメソッド("+i+")"); public class SimpleThreadTest2 { public static void main(string[] args) { MyThread t = new MyThread(); Thread thread = new Thread(t); thread.start(); for(int i = 0; i < 100; i++) { System.out.println("SimpleThreadTest2のmainメソッド("+i+")");

スレッドを 一 定 時 間 停 止 させる Thread.sleep( 停 止 時 間 (ミリ 秒 )); public class SleepExample { public static void main(string[] args) { for(int i = 0; i < 10; i++) { try { Thread.sleep(1000); catch (InterruptedException e) { System.out.println(e); System.out.print("*");

スレッドの 終 了 を 待 つ スレッドAからスレッドBのjoinメソッドを 呼 ぶと ス レッドBの 処 理 が 終 わるまでスレッドAは 次 の 処 理 に 移 らない MyThread t = new MyThread(); t.start(); try{ t.join(); catch (InterruptedException e) { System.out.println(e);

joinメソッドの 呼 び 出 しによる 待 機

スレッドを 止 める スレッドはrunメソッドの 処 理 が 終 了 する と 動 作 が 止 まる whileループの 条 件 を 制 御 してrunメソッ ドを 終 了 させるのが 一 般 的 class MyThread extends Thread { public boolean running = true; public void run() { while(running) { // 命 令 文 System.out.println("runメソッドを 終 了 ");

マルチスレッドで 問 題 が 生 じるケース 複 数 のスレッドが1つの 変 数 に 同 時 にアク セスすると 不 整 合 が 生 じる 場 合 がある スレッドAが 変 数 iの 値 を1 増 やす スレッドBが 変 数 iの 値 を1 増 やす 上 記 の 処 理 が 同 時 に 行 われるとiの 値 が1 しか 増 えない 場 合 がある

問 題 が 生 じないケース 変 数 moneyの 値 ( 現 在 の 値 は98)をスレッドAとスレッドB が1ずつ 増 やす 処 理

問 題 が 生 じるケース 変 数 moneyの 値 ( 現 在 の 値 は98)をスレッドAとスレッドB が1ずつ 増 やす 処 理 スレッドAの 処 理 にスレッドBが 割 り 込 んだ

スレッドの 同 期 メソッドにsynchronized 修 飾 子 をつけ ると そのメソッドを 実 行 できるスレッ ドは 一 度 に1つに 限 定 される static synchronized void addoneyen() { money++; あるスレッドによってメソッドが 実 行 されている 間 は 他 のスレッドはその 処 理 が 終 わるまで 待 機 することになる これをスレッドの 同 期 と 呼 ぶ

第 12 章 ガーベッジコレクションとメモリ

プログラムの 実 行 とメモリ 管 理 プログラム 実 行 中 に 覚 えておかなくては ならない 情 報 はメモリに 格 納 される メモリにはスタックとヒープと 呼 ばれる 領 域 がある スタック ヒープ メソッドの 呼 び 出 し 履 歴 メソッドの 中 で 宣 言 されたローカル 変 数 の 値 メソッドの 処 理 が 終 わると そのメソッ ドに 関 する 情 報 と 変 数 が 削 除 される 生 成 されたインスタンス ガーベッジコレクタによって 管 理 される

スタックとヒープ MyObject dosomething() { MyObject obj = new MyObject(); return obj;

空 きメモリサイズの 確 認 class DataSet { int x; int y; public class FreeMemoryTest { public static void main(string[] args) { System.out.println(" 空 きメモリサイズ:" + Runtime.getRuntime().freeMemory()); DataSet[] data = new DataSet[100]; for(int i = 0; i < 100; i++) { data[i] = new DataSet(); System.out.println(" 生 成 済 みインスタンス 数 :" + (i + 1) + " 空 きメモリサイズ:" + Runtime.getRuntime().freeMemory());

使 用 できるサイズは 有 限 インスタンスを 大 量 に 生 成 すると ヒー プを 消 費 する 全 て 使 い 切 ってしまうと 実 行 時 エラーが 発 生 する メソッドの 呼 び 出 しの 階 層 があまりに 深 いとスタックも 使 いきる 可 能 性 がある ( 再 帰 呼 び 出 しなどを 行 った 場 合 )

ガーベッジコレクション プログラムの 中 で 不 要 になったインスタ ンスの 情 報 を 削 除 し メモリの 空 き 領 域 を 増 やす 処 理 Java 仮 想 マシンが 自 動 で 行 う インスタンスが 不 要 になる インスタンスがどこからも 参 照 されなくなる

ガーベッジコレクションの 対 象 になるタイミング MyObject obj1 = new MyObject(); MyObject obj2 = new MyObject(); obj2 = obj1; 参 照 先 の 変 更 ガーベッジコレクションの 対 象

ガーベッジコレクションの 対 象 になるタイミング MyObject obj = new MyObject(); obj = null; nullの 代 入 生 成 されたインスタンスは 誰 からも 参 照 されなくなる void dosomething() { MyObject obj = new MyObject(); メソッドの 処 理 が 終 わると 生 成 されたインスタンスは 誰 からも 参 照 されなくなる

ガーベッジコレクションが 実 行 されるタイミング Java 仮 想 マシンが 適 切 なタイミングで 実 行 する ガーベッジコレクションは 時 間 のかかる 処 理 なので ある 程 度 不 要 なインスタン スが 貯 まってからまとめて 行 われる Runtime.getRuntime().gc(); の 命 令 文 で ガーベッジコレクションを 指 定 したタイミングで 行 わせることもでき る

第 13 章 コレクション

大 きさの 変 わる 配 列 Javaでの 配 列 の 使 い 方 MyObject[] objects = new MyObject[100]; objects[0] = new MyObject(); 要 素 の 数 を 指 定 する 必 要 がある 格 納 できる 要 素 の 数 の 上 限 は 後 から 変 更 できない java.utilパッケージにarraylistという 便 利 なクラスがある 要 素 の 数 を 最 初 に 決 める 必 要 が 無 い 便 利 なメソッドが 備 わっている

ArrayListの 活 用 ArrayList months = new ArrayList(); months.add("january"); System.out.println(" 要 素 数 " + months.size()); months.add("februaly"); System.out.println(" 要 素 数 " + months.size()); months.add("march"); System.out.println(" 要 素 数 " + months.size()); System.out.println("== 一 覧 の 出 力 =="); System.out.println(months.get(0)); System.out.println(months.get(1)); System.out.println(months.get(2));

型 を 指 定 したArrayListクラス 型 パラメータを 指 定 したArrayListオブ ジェクトの 生 成 ArrrayList<Point> points = new ArrayList<Point>(); < >の 中 に 配 列 に 格 納 するオブジェクトの 型 を 指 定 する 型 パラメータ ここで 指 定 した 型 のオブジェクトだけを 格 納 でき るようになる 上 の 例 ではPointクラスのインスタンスまたは Pointクラスのサブクラスのインスタンス

型 パラメータの 指 定 の 有 無

ジェネリクス API 仕 様 書 でArrayListを 見 るとクラス 名 が 次 のようになっている ArrayList<E> E はArrayListに 格 納 できるオブジェク トのクラスを 指 定 する 型 パラメータ getメソッドは 次 のように 記 述 されている public E get(int index) 戻 り 値 の 型 が E となっている 型 パラメータ で 指 定 したクラスの 参 照 が 戻 り 値 と 言 う 意 味 特 定 のクラスに 特 化 したArrayListにできる

ラッパークラス ArrayListに 格 納 できるのは 参 照 型 基 本 型 の 値 は 格 納 できない ArrayList<int> は 誤 り ラッパークラスを 使 用 する ラッパークラスとは 基 本 型 をオブジェクトとし て 扱 うためのクラス ArrayList<Integer> arr = new ArrayList<Integer>(); arr.add(new Integer(50)); Integer integer0 = arr.get(0); int i = integer0.intvalue();

基 本 型 とそれに 対 応 するラッパークラス

コレクションフレームワーク 実 際 のプログラムでは 複 数 の( 多 数 の)オブジェクト を 扱 うことが 多 い 配 列 よりも 便 利 に 使 えるクラスがJavaには 予 め 多 数 準 備 されている これらをコレクションフレームワークと 呼 ぶ(ArrayListもこれに 含 まれる) 目 的 に 応 じて 使 い 分 ける 膨 大 な 数 のオブジェクトから 目 的 のオブジェクトを 素 早 く 取 り 出 したい 同 じインスタンスへの 参 照 が 重 複 して 格 納 されないようにした い キーワードを 使 ってオブジェクトを 取 りだしたい 特 定 の 値 で 並 び 変 えたい 大 きく 分 けると リスト マップ セットの3 種 類

リスト オブジェクトが 順 番 に 並 ぶ 先 頭 から2 番 目 のもの 最 後 に 追 加 したも の を 取 りだすことができる 異 なる 要 素 が 同 一 のオブジェクトを 参 照 できる Listインタフェースを 実 装 する

マップ キーと 値 (オブジェクト)のペアを 管 理 する キーでオブジェクトを 取 りだせる キーは 重 複 してはいけない Mapインタフェースを 実 装 する

セット 格 納 されるオブジェクトに 重 複 がないことを 保 証 する 個 々のオブジェクトを 指 定 して 取 りだす 方 法 が 無 い(リストやマップと 組 み 合 わせて 使 用 する) Setインタフェースを 実 装 する

リストコレクション:ArrayList 配 列 + 便 利 な 機 能 インデックスで 直 接 要 素 にアクセスできるので 高 速 要 素 の 追 加 と 削 除 には 内 部 で 要 素 のコピーが 行 われるので 低 速

リストコレクション:LinkedList 要 素 の 追 加 と 削 除 は 高 速 インデックスを 指 定 しての 要 素 へのアク セスは 低 速

マップコレクション:HashMap キーと 値 に 使 用 する 型 を 型 パラメータで 指 定 する HashMap<String, String> map = new HashMap<String, String>(); map.put(" 住 所 ", " 茨 城 県 つくば 市 "); map.put(" 氏 名 ", "Java 太 郎 "); System.out.println(map.get(" 住 所 ")); System.out.println(map.get(" 氏 名 "));

セットコレクション:HashSet キーと 値 に 使 用 する 型 を 型 パラメータで 指 定 する HashSet<String> set = new HashSet<String>(); map.add("jan"); map.add("feb"); System.out.println(set); // 要 素 を 全 て 出 力 System.out.println(set.contains("Jan"));

コレクションに 含 まれる 全 要 素 へのアクセス これまでに 学 習 したfor 文 を 使 うと 次 の ようにしてArrayListの 全 要 素 にアクセ スできる ArrayList<String> list = new ArrayList<String>(); list.add("good morning."); list.add("hello."); for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); この 方 法 は インデックスを 指 定 して 要 素 にアクセスできるものにしか 使 えない インデックスを 指 定 したアクセスが 低 速 なコレクションには 適 さない 他 にも 全 要 素 にアクセスする 方 法 がある

イテレータ(Iterator) イテレータは コレクションの 中 の 要 素 を1つず つ 順 番 に 参 照 する 能 力 をもつオブジェクト 主 に 次 の2つのメソッドがある boolean hasnext() まだ 要 素 があるか E next() 現 在 参 照 している 要 素 を 返 して 次 の 要 素 に 移 動 する

イテレータ(Iterator)の 使 用 例 HashSet<String> set = new HashSet<String>(); set.add("a"); set.add("b"); set.add("c"); set.add("d"); Iterator<String> it = set.iterator(); while(it.hasnext()) { String str = it.next(); System.out.println(str); セットコレクションに 対 しても 1つずつ 要 素 を 参 照 できる

拡 張 for 文 通 常 のfor 文 イテレータを 使 ったアクセ スよりも 簡 潔 に 記 述 できる 構 文 for( 型 名 変 数 名 : コレクション) { forループ 内 の 処 理 ArrayList<String> list = new ArrayList<String>(); list.add("good morning."); list.add("hello."); for(string str : list) { System.out.println(str);

LinkedListクラスによるキュー キュー: 先 入 れ 先 出 し(First In First Out:FIFO)によるオブジェクト 管 理

Queueインタフェースの 使 用 Queue<String> queue = new LinkedList<String>(); queue.offer("(1)"); System.out.println("キューの 状 態 :" + queue); queue.offer("(2)"); System.out.println("キューの 状 態 :" + queue); queue.offer("(3)"); System.out.println("キューの 状 態 :" + queue); queue.offer("(4)"); System.out.println("キューの 状 態 :" + queue); while(!queue.isempty()) { System.out.println(" 要 素 の 取 り 出 し:" + queue.poll()); System.out.println("キューの 状 態 " + queue);

LinkedListクラスによるスタック スタック: 後 入 れ 先 出 し(Last In First Out:LIFO)によるオブジェクト 管 理

LinkedListのスタックとしての 利 用 LinkedList<String> stack = new LinkedList<String>(); stack.addlast("(1)"); System.out.println("スタックの 状 態 :" + stack); stack.addlast("(2)"); System.out.println("スタックの 状 態 :" + stack); stack.addlast("(3)"); System.out.println("スタックの 状 態 :" + stack); stack.addlast("(4)"); System.out.println("スタックの 状 態 :" + stack); while(!stack.isempty()) { System.out.println(" 要 素 の 取 り 出 し:"+stack.removeLast()); System.out.println("スタックの 状 態 " + stack);

sortメソッドによる 並 べ 替 え コレクションに 格 納 された 要 素 を 値 の 大 小 で 並 べ 替 えたいことがよくある Collectionsクラスのsortメソッドで List インタフェースを 実 装 したコレクション (ArrayList, LinkedListなど)の 要 素 の 並 び 替 えを 行 える ArrayList<String> list = new ArrayList<String>(); // listに 要 素 を 追 加 する 処 理 Collections.sort(list); // 並 び 替 え 実 行

自 作 クラスのインスタンスの 並 び 替 え 自 分 で 作 ったクラスを 順 番 に 並 び 替 える 場 合 は 大 小 をどのように 決 定 するのか 明 らかにしてお く 必 要 がある Comparableインタフェースを 実 装 する public int comapareto(クラス 名 変 数 名 ) メソッドを 実 装 する

Comarableインタフェースの 実 装 例 class Point implements Comparable<Point> { int x; int y; Point(int x, int y) { this.x = x; this.y = y; public int compareto(point p) { return (this.x + this.y) - (p.x + p.y); ArrayList<Point> list = new ArrayList<Point>(); // listに 要 素 を 追 加 する 処 理 Collections.sort(list); // 並 び 替 え 実 行

第 14 章 入 出 力

入 出 力 入 力 :プログラムにデータが 入 ってくること ファイルからのデータの 読 み 込 み キーボードで 入 力 されたデータの 読 み 込 み ネットワーク 通 信 によるデータの 読 み 込 み 出 力 :プログラムからデータを 送 りだすこと 画 面 への 表 示 ファイルへの 保 存 ネットワーク 通 信 による 送 信 プリントアウト ストリームオブジェクトがデータの 橋 渡 しをする 扱 うデータは 文 字 列 データ(Unicode,16ビッ ト 単 位 ) と バイナリデータ(8ビット 単 位 ) に 分 けられる

標 準 出 力 入 出 力 先 を 特 に 指 定 しなかった 場 合 に 標 準 的 に 使 用 される 出 力 一 般 的 には コ ンソール 標 準 出 力 への 文 字 列 の 出 力 System.out.println("こんにちは");

標 準 入 力 標 準 入 力 からの 文 字 列 の 受 け 取 り InputStreamReader in = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(in); try { String str = reader.readline(); catch(ioexception e) {

文 字 列 と 数 値 の 変 換 標 準 入 力 から 渡 されるデータは 文 字 列 10 という 文 字 列 を 数 値 として 処 理 で きるようにするには 次 のような 変 換 が 必 要 String str0 = "10"; int i = Integer.parseInt(str0); String str1 = "0.5"; double d = Double.parseDouble(str1);

ファイルへの 出 力 try { File file = new File("C: java test.txt"); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); for(int i = 0; i < 5; i++) { bw.write("[" + i + "] r n"); bw.close(); catch (IOException e) { System.out.println(e);

バッファを 用 いたデータの 書 き 込 み

バッファを 用 いたデータの 読 み 込 み

ストリームの 連 結 ストリームは 最 低 1つ 必 要 目 的 に 応 じてストリームを 複 数 連 結 できる

ファイルからの 入 力 try { File file = new File("C: java test.txt"); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String s; while((s = br.readline())!= null) { System.out.println(s + "を 読 み 込 みました"); br.close(); catch (IOException e) { System.out.println(e);

シリアライゼーションとオブジェクトの 保 存 プログラムの 状 態 をファイルに 保 存 する ( 一 度 プログラムを 終 了 させて 後 から 続 きを 行 うときなどに 必 要 ) 方 法 1.テキストファイルに 文 字 列 で 情 報 を 書 き 込 む 方 法 2.シリアライゼーションによってオブ ジェクトそのものをファイルに 保 存 する

シリアライゼーション オブジェクトをその 状 態 を 保 持 したままファイ ルに 書 き 出 すことができる このことをシリアライゼーションと 言 う ファイルに 書 き 出 せるオブジェクトは Serializableインタフェースを 実 装 している 必 要 がある 実 装 すべきメソッドは 何 もないの で 宣 言 するだけ class Point implements Serializable { int x; int y;

シリアライゼーションを 使 用 したオブジェクトの 保 存 try { FileOutputStream fs = new FileOutputStream("C: java triangle.ser"); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeobject(/* 出 力 するオブジェクトへの 参 照 */); os.close(); catch(ioexception e) { System.out.println(e);

保 存 したオブジェクトの 再 現 try { FileInputStream fs = new FileInputStream("C: java triangle.ser"); ObjectInputStream os = new ObjectInputStream(fs); MyObject obj = (MyObject)os.readObject(); os.close(); catch(ioexception e) { System.out.println(e); catch (ClassNotFoundException e) { System.out.println(e);

ファイルとフォルダの 操 作 java.io.fileクラスを 使 って ファイ ルとフォルダの 操 作 を 行 える Fileオブジェクトの 作 成 File file = new File("C: java test.txt"); Fileクラスのファイル 操 作 のための 主 なメソッド boolean exists() ファイルが 存 在 するか どうか 確 認 する boolean delete() ファイルを 削 除 する boolean renameto(file dest) 名 前 を 変 更 する

フォルダ 操 作 フォルダもファイルと 同 じように java.io.fileクラスを 使 用 する Fileオブジェクトの 作 成 File file = new File("C: java"); Fileクラスのフォルダ 操 作 のための 主 なメソッド String[] list() boolean mkdir() boolean mkdirs() boolean delete() フォルダに 含 まれるファイルの 一 覧 を 返 す フォルダを 作 成 する 階 層 を 持 ったフォルダを 一 度 に 作 成 する フォルダを 削 除 する

第 15 章 GUI

GUIアプリケーションとは GUI: Graphical User Interface CUI: Character-based User Interface

Swingライブラリ ウィンドウ ボタン メニューなどを 扱 うクラス 群 を 集 めたライブラリ javax.swingパッケージに 含 まれる GUIアプリケーションを 扱 うには ユーザ の 操 作 に 応 答 するためのイベント 処 理 が 必 要

import javax.swing.*; フレームの 作 成 class SimpleFrameExample { public static void main(string[] args) { JFrame frame = new JFrame(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setsize(300, 200); frame.setvisible(true);

自 分 自 身 のインスタンスを 生 成 するクラス import javax.swing.*; public class MyFrame extends JFrame { public static void main(string[] args) { new MyFrame(); MyFrame() { setdefaultcloseoperation(jframe.exit_on_close); setsize(300, 200); setvisible(true);

コンポーネントの 配 置 ボタンやチェックボックスなどのGUI 部 品 は コンポーネント と 呼 ばれる コンポーネントは コンテナの 上 に 配 置 される

JButton(ボタン)コンポーネントの 配 置 import javax.swing.*; public class MyFrame extends JFrame { public static void main(string[] args) { new MyFrame(); MyFrame() { setdefaultcloseoperation(jframe.exit_on_close); getcontentpane().add(new JButton("ボタン")); setsize(300, 200); setvisible(true); ボタンを 配 置 しただけなので クリックしても 何 も 起 こらない

ボーダーレイアウト JFrameクラスのgetContentPaneメソッド で 取 得 できるコンテナはBorderLayoutと 呼 ばれる 方 法 でコンポーネントが 配 置 される 配 置 場 所 を5つから 選 択 して 指 定 できる add(borderlayout.west, new JButton("ボタン"));

ボーダーレイアウトの 配 置 例 getcontentpane().add(borderlayout.center, new JButton("CENTER")); getcontentpane().add(borderlayout.south, new JButton("SOUTH")); getcontentpane().add(borderlayout.west, new JButton("WEST")); getcontentpane().add(borderlayout.east, new JButton("EAST")); getcontentpane().add(borderlayout.north, new JButton("NORTH")); setsize(300, 200); setvisible(true);

ボーダーレイアウトの 配 置 例 コンポーネントの 数 に 応 じて 自 動 的 に 大 きさが 調 整 される WESTに 配 置 しなかった 場 合 CENTER,SOUTHのみ 配 置 した 場 合

レイアウトマネージャ レイアウトマネージャがコンポーネントをど こに どの 大 きさで 配 置 するかを 決 定 する 各 種 のレイアウトマネージャが 準 備 されてい る それぞれ レイアウト 方 法 が 異 なる BorderLayout FlowLayout BoxLayout GridLayout レイアウトマネージャを 変 更 するには コン テナのsetLayoutメソッドを 使 用 する

フローレイアウト setdefaultcloseoperation(jframe.exit_on_close); getcontentpane().setlayout(new FlowLayout()); getcontentpane().add(new JButton("1 January")); getcontentpane().add(new JButton("2 February")); getcontentpane().add(new JButton("3 March")); getcontentpane().add(new JButton("4 April")); getcontentpane().add(new JButton("5 May")); getcontentpane().add(new JButton("6 June")); setsize(300, 200); setvisible(true);

ボックスレイアウト getcontentpane().setlayout( new BoxLayout(getContentPane(), BoxLayout.Y_AXIS);

グリッドレイアウト getcontentpane().setlayout( new GridLayout(2, 3));

パネルを 活 用 したレイアウト JPanelはコンポーネントをのせることが できるコンポーネント JPanelを 活 用 することで 複 雑 なコン ポーネントの 配 置 が 可 能 になる

イベント 処 理 ボタンがクリックされた などのよう に ユーザによって 何 か 操 作 が 行 われた ことを イベントが 発 生 した という Javaでは イベントオブジェクト (java.awt.event)によって イベント が 表 現 される イベントが 発 生 したときの 処 理 をイベン ト 処 理 という

ソースとリスナ イベントを 発 生 するオブジェクトのことを ソース(source)と 呼 ぶ JButtonなどの コンポーネントに 限 られる イベントを 受 け 取 るオブジェクトのことをリ スナ(listener)と 呼 ぶ 必 要 なインタ フェース(リスナインタフェース)を 実 装 し ているクラスがリスナになれる

イベント 処 理 (ボタン 押 下 時 の 処 理 )を 行 うプログラムの 作 成 1.リスナを 作 成 する イベント 通 知 を 受 け 取 るクラスを 作 成 する ActionListenerインタフェースを 実 装 す る イベントが 発 生 すると actionperformed メソッドが 呼 び 出 される 2.ソースにリスナを 登 録 する イベントが 発 生 した 時 に その 通 知 を 誰 に 送 るのかをソースに 登 録 する リスナ 登 録 リスナ 登 録 はaddActionListenerメソッ ドで 行 う

import javax.swing.*; import java.awt.event.*; public class SingleButtonExample extends JFrame implements ActionListener { public static void main(string[] args) { new SingleButtonExample(); SingleButtonExample() { JButton button = new JButton("ボタン"); button.addactionlistener(this); getcontentpane().add(button); setdefaultcloseoperation(jframe.exit_on_close); setsize(200, 100); setvisible(true); public void actionperformed(actionevent ae) { System.out.println("ボタンが 押 されました");

イベント 処 理 の 様 子 リスナ 登 録 したオブジェクト (SimpleButtonExampleオブジェクト)へイ ベントが 通 知 される(actionPerformedメソッ ドが 呼 び 出 される)

複 数 のコンポーネントがある 場 合 異 なるボタンに 対 して 同 じオブジェクトをリ スナ 登 録 している 場 合 は 同 じように actionperformedメソッドが 呼 ばれる 引 数 で 渡 されるActionEventオブジェクトの getsourceメソッドでイベント 通 知 元 のオブ ジェクトを 判 別 できる

JButton button1; JButton button2; MultiButtonsExample() { button1 = new JButton("ボタン1"); button1.addactionlistener(this); getcontentpane().add(borderlayout.west, button1); button2 = new JButton("ボタン2"); button2.addactionlistener(this); getcontentpane().add(borderlayout.east, button2); setdefaultcloseoperation(jframe.exit_on_close); setsize(200, 100); setvisible(true); public void actionperformed(actionevent ae) { if(ae.getsource() == button1) { System.out.println("ボタン1が 押 されました"); else if(ae.getsource() == button2) { System.out.println("ボタン2が 押 されました");

さまざまなコンポーネント Swingライブラリには さまざまなコン ポーネントがある 必 要 に 応 じてAPI 仕 様 書 を 調 べる

第 16 章 グラフィックスとマウスイベント

JPanelを 使 ったグラフィックス 描 画 描 画 を 行 うためのパネルクラスの 作 成 (JPanelを 継 承 ) paintcomponentメソッドをオーバーライドする 引 数 のGraphicsオブジェクトを 使 って 描 画 import java.awt.*; import javax.swing.*; public class MyPanel extends JPanel { public void paintcomponent(graphics g) { g.fillrect(50, 30, 150, 100); 作 成 したパネルクラスを 配 置 する getcontentpane().add(new MyPanel());

Graphiscオブジェクトの 座 標 系 描 画 領 域 の 大 きさはコンポーネントの getsizeメソッドで 取 得 できる

直 線 の 描 画 public void paintcomponent(graphics g) { Dimension d = getsize(); g.drawline(0, 0, d.width, d.height); g.drawline(0, d.height, d.width, 0);

様 々な 描 画 メソッド drawarc 円 弧 を 描 く drawline 直 線 を 描 く drawoval 楕 円 を 描 く drawpolygon 多 角 形 を 描 く drawpolyline 折 れ 線 を 描 く drawrect 長 方 形 を 描 く drawstring 文 字 列 を 描 く setcolor 描 画 色 を 指 定 する

Graphics2Dクラス Graphicsクラスよりも 高 機 能 なグラ フィックス 機 能 を 提 供 する グラデーション アンチエイリアシング 線 の 太 さ 線 のスタイルの 指 定 など paintcomponentメソッドの 引 数 の Graphicsオブジェクトをキャストして 使 用 できる public void paintcomponent(graphics g) { Graphics2D g2d = (Graphics2D)g; // Graphics2Dのメソッドを 使 った 描 画

マウスイベント マウスクリック カーソルの 移 動 ド ラッグ 操 作 などもイベントの1つ イベント 処 理 によって マウスで 操 作 で きるプログラムを 作 成 できる リスナ 登 録 リスナインタフェースの 実 装 イベントが 通 知 された 時 の 処 理

2つのイベントリスナ MouseListenerインタフェース void mouseclicked(mouseevent e) void mouseentered(mouseevent e) void mouseexited(mouseevent e) void mousepressed(mouseevent e) void mousereleased(mouseevent e) MouseMotionListenerインタフェース void mousedragged(mouseevent e) void mousemoved(mouseevent e) それぞれ 次 のメソッドでリスナ 登 録 する addmouselistener addmousemotionlistener

import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel implements MouseListener, MouseMotionListener { public MyPanel() { addmouselistener(this); addmousemotionlistener(this); public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { public void mousedragged(mouseevent e) { public void mousemoved(mouseevent e) {

第 17 章 ネットワーク

ネットワーク 接 続 一 般 的 にTCP/IPというプロトコルが 用 い られることが 多 い 一 方 をサーバー 他 方 をクライアントと 呼 ぶ

IPアドレスとポート 番 号 クライアントがサーバーに 接 続 要 求 を 出 す サーバーのIPアドレスと サーバー 側 の プログラムが 使 用 するポート 番 号 を 知 っ ている 必 要 がある IPアドレスの 例 :192.168.1.11 ポート 番 号 の 例 :5000 番

ServerSocketとSocket

サーバー 側 のプログラム 例 try { ServerSocket serversocket = new ServerSocket(5000); while(true) { Socket socket = serversocket.accept(); PrintWriter writer = new PrintWriter(socket.getOutputStream()); writer.println("こんにちは 私 はサーバです "); writer.close(); catch(ioexception e) { System.out.println(e);

クライアント 側 のプログラム 例 try { Socket socket = new Socket("127.0.0.1", 5000); BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); String message = reader.readline(); System.out.println("サーバーからの 文 字 列 :" + message); reader.close(); catch(ioexception e) { System.out.println(e);

第 18 章 一 歩 進 んだ Javaプログラミング

スタティックインポート パッケージ 名 とクラス 名 を 省 略 して ク ラス 変 数 やクラスメソッドを 直 接 記 述 で きる import static java.lang.math.pi; import static java.lang.math.abs; public class StaticImportExample { public static void main(string[] args) { System.out.println("PI=" + PI); System.out.println("abs(-2)=" + abs(-2));

System.out.printfメソッド 文 字 列 の 中 の 特 別 な 記 号 (%d, %fなど) を 引 数 で 指 定 した 変 数 の 値 に 置 き 換 え ることができる int x = 5; int y = 10; int z = 15; System.out.printf("x=%d%n", x); System.out.printf("(x,y)=(%d,%d)%n", x,y); System.out.printf("(x,y,z)=(%d,%d,%d)%n",x,y,z); %d 整 数 %f 小 数 を 含 む 値 %s 文 字 列 %n 改 行

enum 宣 言 特 定 の 定 数 の 値 だけを 取 れる 独 自 の 型 を 定 義 できる class Student { enum Gender { MALE, FEMALE ; String name; Gender gender; Student s = new Student(); s.name = " 山 田 太 郎 "; s.gender = Student.Gender.MALE;

== 演 算 子 とequalsメソッド == 演 算 子 を 使 って2つのオブジェクト 参 照 を 比 較 した 場 合 両 方 が 同 一 のインスタ ンスを 参 照 している 場 合 はtrue,そうで ない 場 合 はfalse equalsメソッドはobjectクラスに 備 わっているメソッド オーバーライドし て 自 分 で 定 義 できる コレクションクラスでは オブジェクト の 比 較 にequalsメソッドが 使 用 される

内 部 クラス クラスの 宣 言 を 別 のクラスの 内 部 で 行 え る class Outer { class Inner { 内 部 クラスは 外 部 クラスのプライベート 宣 言 された 変 数 にもアクセスできる

匿 名 クラス メソッドの 引 数 を 指 定 するカッコの 中 で クラスを 定 義 すること と そのイン スタンスを 生 成 すること の 両 方 を 行 え る クラスの 名 前 が 不 要 plusbutton.addactionlistener { new ActionListener() { public void actionperformed(actionevent ae) { // 処 理 ;