Java輪講
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
] [
Japanese
/
English
]
研究について
研究の概要
論文発表
メディア
メンバー
教員
大学院生
学部生
OB
リンク
リンク集
授業
コンピュータプログラミング基礎II
機械知能システム工学特別講義I
機械システム工学特論(MORE SENSE特論)
内部用
物品管理(registries)
外部ソフトウェア
PC環境設定
買い物
プリンタ設定
定例研究会(weekly)
研究発表会(monthly)
閲覧回数順
開始行:
[[研究会/輪講]]
#contents
*各種リンク [#y7810411]
-Javaの道 http://www.javaroad.jp/
-JDK (Java Development Kit; 開発環境) http://www.oracle.c...
-Java tutorial http://download.oracle.com/javase/tutorial...
*進め方 [#l8f52ac7]
-各項目について担当者が解説とサンプル演習を用意する。
-必要に応じてsvnで管理。
cd ~/prog
svn co svn+ssh://mizuuchi.lab.tuat.ac.jp/home/svn/prog/j...
|項目|担当|日時|資料|備考|更新日|h
|思想・オブジェクト指向|水内|2010/11/26|[[Java輪講#ab4910...
|オブジェクトの生成・コンストラクタ|水内|2010/12/01|[[Jav...
|継承・親クラス・子クラス|三塩|2010/12/06|[[Java輪講#c6d2...
|オーバーロード|宮澤|2010/12/07|[[参考>http://www.javaroa...
|オーバーライド|山邊|2010/12/08|[[参考>http://www.javaroa...
|[[アクセス修飾子・クラス変数とインスタンス変数>Java輪講#...
|[[クラス修飾子>Java輪講#class-modifier]]|本堂|2010/12/10...
|[[インタフェース>Java輪講#interface]]|三塩|2010/12/13|[[...
|[[例外>Java輪講#error]]|宮澤|2010/12/15|[[参考>http://ww...
|スレッド|山邊||[[参考>http://www.javaroad.jp/java_thread...
|データ型・配列・文字列・比較(オブジェクトの同等性)|川村|...
|入出力|本堂|2010/12/20|[[参考ページ>http://ash.jp/java/s...
|[[コレクション>Java輪講#collection]]|三塩||[[参考>http:/...
|CLASSPATH・パッケージ・import|宮澤||||2010-12-02|
|jar|山邊||||2010-12-02|
|アプレット(特にアプレットViewer)|川村||||2010-12-20|
|JNI,ソケット|本堂||||2010-12-02|
*水内の昔の講義資料 [#oa5988d9]
-&ref(soft3-20081006-2.pdf); オブジェクト指向プログラミング
-&ref(soft3-20081201.pdf); Javaに触れる
-&ref(soft3-20081208.pdf); オブジェクト指向プログラミング...
-&ref(soft3-20081222.pdf); Javaアプレット, 迷路課題
-Javaサンプル &ref(200811-Java-sample.zip);
-Java, JNI, eusサンプル &ref(20081208-sample.zip);
-Javaアプレットサンプル &ref(20081222-sample.zip);
**2010/11/26 [#ab49105b]
-``Write Once, Run Anywhere'' 「一度書けばどこでも走る」
-仮想計算機(java virtual machine)上で実行
-java環境のインストール
--ubuntuなら sudo aptitude install ~
--~の部分はコマンドラインで``java''と打った時に出てくる...
--Mac OS Xなら標準でインストールされているはず.
--Cygwinの場合は...
-サンプルプログラム``HelloWorld.java''
--ファイル名はクラス名と同じ.
--クラス名の最初の文字は大文字で,単語の区切りごとに各単...
--変数名は,最初の文字は小文字で,単語の区切りごとに各単...
--コンパイル
javac HelloWorld.java
--実行
java HelloWorld
--public class HelloWorld : クラス名.これがファイル名と...
--public static void main( String argv[] )以下 : HelloWor...
--javadoc HelloWorld.java とするとドキュメントのhtmlファ...
-オブジェクト指向
--全てのものを「オブジェクト」として扱う.
--キーワード:「カローラ(カテゴリ)」「持つべき情報」「...
--Personは「カローラ(カテゴリ)」,nameはPersonが「持つ...
--「ご飯を食べる」「寝る」などはPersonの「メソッド」
-Norimonoクラス(Norimonoカローラ(カテゴリ))を作る
public class Norimono {
boolean haveWing; //翼があるかどうか.booleanは...
double weight; //重量
Person jouin[]; //乗員リストを格納する配列.他に...
int nJouin = 0; //乗員数.0で初期化.
Norimono( ) {
jouin = new Person[100]; //これで配列が...
}
int noseru( Person p ){ //乗員を「乗せる」メソッド
jouin[nJouin] = p; //乗員リストにPerson...
nJouin++; //乗員数を増やす
return nJouin;
}
void printNJouin() { //現在の乗員数を表示するメ...
System.out.println( nJouin );
}
}
**2010/12/01 [#z68a4b50]
-newによるインスタンス(オブジェクト)の生成。
-Listクラス・ArrayListクラス
-コンストラクタ
-&ref(20101201.zip);
**2010/12/06 [#c6d22fa7]
-継承とは,親クラス(SuperClass)の性質を子クラス(SubClass)...
-同じ処理を二度書かなくても済むようになるようなメリットが...
-多重継承について
--多重継承とは複数のクラスを親にしたり,子クラスを親クラ...
-方法
class SubClass extends SuperClass{}
これでSubClassにSuperClassが継承される.
-以下例としてBattleShipクラスにNorimonoクラスを継承.Trave...
--BattleShip.java
import java.util. *;
public class BattleShip extends Norimono{
double velocity = 0;
int nScrew = 0;
void InPort(){
velocity = 0;
}
void CruiseSpeed(){
velocity = 16;
}
void CombatSpeed(){
velocity = 27.6;
}
void printVelocity(){
System.out.println(velocity);
}
}
--Travel.java
public class Travel{
public static void main (String[] args){
BattleShip Yamato;
Person Kodai;
Person Mori;
Yamato = new BattleShip();
Kodai = new Person("古代進");
Mori = new Person("森雪");
Yamato.CruiseSpeed();
Yamato.printVelocity();
Yamato.noseru(Kodai);//NorimonoクラスのメンバメソッドNo...
Yamato.noseru(Mori);
Yamato.printJouin();
}
}
**2010/12/07 [#i2eb3fdf]
-オーバーロードとは、同一クラス内で、メソッド名が同一で「...
-同じ機能を持つメソッド名は同じにして、プログラムを綺麗に...
-注意:以下を変えても異なったメソッドとは認識しない。
--「戻り型」、「アクセスレベル」、「引数名」、「throws節」
-Overload.javaで同一クラス内に同じ名のメソッドを作る
**2010/12/08 [#h259bd9a]
-オーバーライドとは、継承クラス内で、親クラス内のメソッド...
-継承クラス内のメソッド(オーバーライドする側)の処理内容は...
-まとめると、メソッドを上書きするということになる。
-ポリモーフィズムの項目で重要になる。
-ポリモーフィズムとはメソッド名は同じだけど内部の処理は各...
-練習課題:以下のような物理シミュレーションのプログラムを...
--宇宙空間における物体を表現するクラスBody。位置と速度と...
--Bodyを継承し、推力(thrust)を追加で保持するクラスRocket。
--Bodyクラスのメソッド
---コンストラクタ:Body(); Body(double[] pos); Body(doubl...
---void step(double second); //second秒後の位置・姿勢に更...
---void status(); //現在の状態を表示する。
--Rocketクラスのメソッド
---Rocket(double[] pos); Rocket(double[] pos, double[] ve...
---void step(double second); //オーバーライド
---void thrust(double x, double y, double z); //推力を設...
---void thrust(); //現在の推力を表示(オーバーロード)
--Univクラス
---メンバ変数:static List<Body> bodies;(宇宙に存在する物...
---メソッド update_world(); print_status();
---public static void main (String[] args); メイン
---static boolean crash (Body a, Body b); //衝突している...
&aname(access-modifier);
**2010/12/09 [#dee6f21e]
-アクセス修飾子
--アクセス修飾子とはメンバ変数やメソッドにどこからアクセ...
--アクセス権を指定することで、想定外の操作等によるデータ...
--修飾子の種類
---public:どっからでもアクセスできる
---protected:異なるパッケージのクラスからだけのアクセスを...
---なし:同じパッケージならどこからでもおk
---private:同じクラス内でしかアクセスできない
---&ref(アクセス.png,,width=300);
---↑自ファイル==>同Package 他ファイル==>他Package
--例
AccessTest1.jave↓=======================
public class AccessTest1 {
// public, protected, 無し, privateな値の定義
public int publicValue;
protected int protectedValue;
/* 無し */ int normalValue;
private int privateValue;
public static void main(String[] args) {
}
// 自ファイル・自クラスからのアクセステスト
public AccessTest1() {
this.publicValue = 1;
this.protectedValue = 2;
this.normalValue = 3;
this.privateValue = 4;
}
}
class AccessTest2 extends AccessTest1 {
// 自ファイル・サブクラスからのアクセステスト
void AccessTest2() {
this.publicValue = 1;
this.protectedValue = 2;
this.normalValue = 3;
// this.privateValue = 4; ← アクセスできない
}
}
class AccessTest3 {
// 自ファイル・他クラスからのアクセステスト
void AccessTest3() {
AccessTest1 o = new AccessTest1();
o.publicValue = 1;
o.protectedValue = 2;
o.normalValue = 3;
// o.privateValue = 4; ← アクセスできない
}
}
AccessTest4.jave↓=======================
public class AccessTest4 extends AccessTest1 {
public static void main(String[] args) {
}
// 他ファイル・サブクラスからのアクセステスト
AccessTest4() {
this.publicValue = 1;
this.protectedValue = 2;
// this.normalValue = 3; ← アクセスできない
// this.privateValue = 4; ← アクセスできない
}
}
class AccessTest5 {
// 他ファイル・他クラスからのアクセステスト
AccessTest5() {
AccessTest1 o = new AccessTest1();
o.publicValue = 1;
// o.protectedValue = 2; ← アクセスできない
// o.normalValue = 3; ← アクセスできない
// o.privateValue = 4; ← アクセスできない
}
}
-クラス変数とインスタンス変数
--変数を定義できる場所は?
import java.util. *;
public class BattleShip extends Norimono{
double velocity = 0;
int nScrew = 0; <==メソッドの外側
void InPort(){
int i; <==メソッドの内側
velocity = 0;
}
・
・
}
--メソッドの内側か外側の2択
---メソッドの内側:ローカル変数
---メソッドの外側:クラス変数orインスタンス変数
--クラス変数
---staticをつけて宣言した変数
--インスタンス変数
---staticがついてないで宣言した変数のこと.インスタンスさ...
--例
DefVariable.java↓=======================
public class DefVariable {
int i = 0;
static int clsi = 0;
public void incre(){
i++;
clsi++;
}
public void dispi(){
System.out.println(i);
}
public void dispClsi(){
System.out.println(clsi);
}
}
ChkVariable.java↓=======================
public class ChkVariable {
public static void main(String[] args) {
DefVariable cls1,cls2;
int i;
cls1 = new DefVariable();
cls2 = new DefVariable();
for(i=0;i<5;i++){
cls1.incre();
}
System.out.print("cls1のインスタンス変数\t i: \t");
cls1.dispi();
System.out.print("cls1のクラス変数\t clsi: \t");
cls1.dispClsi();
for(i=0;i<10;i++){
cls2.incre();
}
System.out.print("cls2のインスタンス変数\t i: \t");
cls2.dispi();
System.out.print("cls2のクラス変数\t clsi: \t");
cls2.dispClsi();
}
}
結果↓=============================
cls1のインスタンス変数 i: 5
cls1のクラス変数 clsi: 5
cls2のインスタンス変数 i: 10
cls2のクラス変数 clsi: 15
--解説
---インスタンス変数は,&color(red,){インスタンスに所属す...
-課題
--第3回のときのNorimono.java,BattleShip.java,Travel.java...
--やること
---%%Norimono.javaのメンバ変数velocityをNorimonoクラス内...
---%%現在,インスタンス変数のvelocityをクラス変数に変更す...
---Norimonoクラスに何台の乗り物を作ったのかを表すnumberを...
---numberは何個もいらない,ひとつだけでいい=not インスタ...
---どこからでもアクセス出来るようにする
---numberをprintするメソッドを作る
---Travel.javaでNorimono.javaで定義したnumberを表示するメ...
&aname(class-modifier);
**2010/12/10 [#g3888a5a]
-クラス修飾子
-キーワード:パッケージ,抽象クラス,抽象メソッド,public...
--public: どこからでも参照できるクラス
--abstract: 抽象クラス([[参考リンク参照>http://www2.ocn....
--final: 他のクラスが継承できないクラス
--何もつけない: 同じパッケージ([[参考リンク参照>http://w...
-サンプルプログラム
--ClassModifier.java:ディレクトリ"rinko2010"内にあるファ...
--livingthingsパッケージ
---Animal.java:動物クラス
---Plant.java:植物クラス=>publicな抽象クラス
---Alien.java:エイリアンクラス=>抽象クラス
---Cat.java:猫クラス=>動物クラスを継承
---ExtendsCat.java:猫クラスを継承したいクラス.だけど...
---Kaseijin.java:火星人クラス=>エイリアンクラスを継承...
-livingthingsパッケージ内のファイルのコンパイル,実行方法
--ディレクトリ"rinko2010"内で
$javac livingthings/Cat.java #Cat.javaをコンパイル
$java livingthings.Cat #Catクラスのmainメソッドを実行
-手順
--livingthings/Cat.javaをコンパイル=>実行
--livingthings/ExtendsCat.javaをコンパイル=>あれ,通ら...
--livingthings/Kaseijin.javaをコンパイル=>あれ,通らな...
--ClassModifier.javaをコンパイル=>あれ,通らないな~お...
-課題
--ExtendsCatクラスがCatクラスを継承出来るようにする.
--Kaseijin.javaのコンパイルが通るようにする.
--植物クラスを継承した「Asagao」クラスを,livingthingsパ...
---livingthingsパッケージの一部であることを表すには,ファ...
---メンバ変数には最低限「花びらが開いているか否か」を示す...
---植物クラスの抽象メソッド"growth"は,その植物の成長の仕...
---引数で時刻(0時から24時)を渡すと,朝の限られた時間だ...
---植物クラスのメソッド"status"をオーバーライドし,花びら...
---ディレクトリ"rinko2010"内のClassModifier.javaのmainメ...
---頑張って朝顔を100mくらいまで成長させよう!そして最後に...
&aname(interface);
**2010/12/13 [#e5ae14e4]
-インタフェース
--抽象メソッドのみを持つクラスのような物
--修飾子はpublicのみ
--メンバ変数は定数でなければならない.
--インタフェース内で宣言されたメンバ変数には,暗黙的に修飾...
--クラスは"継承"するが,インタフェースは"実装"する.
--多重に実装することが可能.
-インタフェースの宣言
interface InterfaceName{}
--修飾子publicを付けると全クラスからアクセス可能.ないと同...
-インタフェースの実装
class className class ClassName1 implements InterfaceNam...
--インタフェースは多重実装可能.
-課題
--成績を判定するJudGradeメソッドをインタフェースから実装...
--科目は天文学(Astronomy)と暗号学(Cryptography)
--天文学は出席とテスト,暗号学は2回のテストで成績を判定する.
--成績は判定に使用する要素を100点満点に換算し,S~Dで判定...
--換算比率および,判定基準は各自で指定.
--サンプルがrinko2010/exInterfacesにある.
--パッケージにしてあるのでコンパイル時注意
--JudGrade.java インタフェース
--Astronomy.java 天文学の成績判定
--Cryptography.java 暗号学の成績判定
&aname(error);
**2010/12/15 [#o743b333]
-例外とはプログラム動作における予期せぬ事象(エラー)のこと
-Javaでは例外が発生した時、あらかじめ用意されているエラー...
-Javaではデフォルトの例外処理以外にエラーメールの送信、エ...
-例外をスローする
--Javaではエラーが発生した際、例外オブジェクトというエラ...
-例外ハンドラ
--エラーメールを送信する、エラーログを生成するなどの例外...
-例外をキャッチする
--Java実行システムが例外ハンドラを見つけることを 「例外を...
-try・catch・finally
--try { 例外をスローする可能性のある処理 }
---try節で囲まれた処理の中で例外が発生した場合、Java実行...
--catch (例外クラス型 引数名) { 例外処理(例外ハンドラ) }
---catch節ではスローされた例外に対する処理を行う例外ハン...
---スローされた例外オブジェクトとcatch節に記載された例外...
--finally { 最後に必ず実行される処理 }
---finally節は例外が発生するしないにかかわらず必ず実行し...
-throws
--javaでは例外が発生したメソッド内で例外ハンドラを発見で...
--オーバーライドでは注意点があり
---スーパークラスのメソッドで指定される例外クラス型以外の...
---スーパークラスのメソッドで指定される例外クラス型より範...
-throw
--任意の場所で例外を発生させることが可能
メソッド名 (引数型 引数名) throws 例外クラス型,・・・
-アサーション
--プログラム中に特定の条件を付したアサーションを追加し,...
--バグの早期発見に役立つ機能
assert 式1 :"コメント(なくても良い)";
-通常はアサーションは無効であり,有効にする必要あり
javac -source 1.4 xxx.java
java -ea xxx
-課題
--麻雀の得点計算機を作ってみよう
--麻雀の得点計算には役数(翻)(1以上)と符(20,30,40,50・...
--翻は倍にするという意味がある
--得点=符×2^(役数)×4×4(子)
--例えば,30符・1役では,960点となる.実際は切り上げて100...
--入力値が上記の範囲ではない時や数字でもない時にエラーを...
--svnにサンプル「Majan.java」がある
**2010/12/16 [#w2675b63]
-スレッド
--スレッドは複数の処理を同時に行なうことである。(実際は1...
-スレッドクラス
--Threadクラスというものがあり、このクラスにはstart()とru...
-スレッドを作りかた
--Threadクラスを継承したクラスを作る
--継承したクラスにrun()という名前のメソッドをつくり(オー...
--mainメソッドでThreadクラスを継承したクラスをインスタン...
--スレッドの実行は、オブジェクト名.start() で行う
--オブジェクト名.start()はそのオブジェクト内のrun()という...
スレッドの生成例
public class Test extends Thread{ //Threadクラスの継承
public void run(){ //run()のオー...
System.out.println("aiueo");
}
public void main(){
Test thread = new Test(); //Threadクラスを継承したクラス...
thread.start(); //スレッドの実行
}}
-スレッドの優先順位について
--スレッドが複数ある場合どのスレッドを優先させるかはOSが...
--プログラマーが意図的に決めるためには、wait() sleep() no...
sleep():このメソッドを実行したスレッドは指定した[ms]時間...
wait() :このメソッドを実行したスレッドは、他のスレッドで...
notify() :このメソッドを実行すると、他のスレッドの1つが...
notifyAll():このメソッドを実行すると他のスレッドすべてが...
-スレッドの作成方法2
--runnableインターフェースを実装してスレッドを作成する方法
-runnableインターフェース
--メソッドとしてrun()を持っているインターフェイス
--start()メソッドは持っていない
--Threadクラスではないクラスを継承したいため、Threadクラ...
-スレッドクラスには、Thread(obj)というコンストラクタが定...
-これを利用してThread thread1 = new Thread(obj) とするこ...
スレッドの作成例2
class Hikoki extends Norimono implements Runnable{ //T...
public void run(){ //Runna...
………
}
void main (){
Hikoki hikoki = new Hikoki;
Thread thread1 = new Thread(hikoki); //Thread オブジェ...
thread1.start()
}
-synchoronizedの使い方
--あるオブジェクトに対してスレッドによるアクセスを同時に...
--例えば、1つのグローバル変数に対する変更を同時に複数のス...
--一つのスレッドの処理が完全に終わってからもう一つのスレ...
--synchronizedブロック([[とほほのJava入門の参考ページ>ht...
class Global {
static Object lock = new Object();
}
としておいて、「処理内容」をひとつのスレッドしか一時に実...
synchronized(Global.lock){
処理内容
}
--synchronizedメソッド
public synchronized void hoge(){
処理内容
}
のようにすると、hoge()の実行は、同時に複数のスレッドが実...
ただし、別のインスタンスだと効かない。
-課題
--パソコン上で四則演算と動画をダウンロードを同時に行うプ...
ヒント
計算クラス、動画クラス、を作りそれぞれのクラスにスレッド...
動画クラスには、動画のサイズを示すクラス変数を定義する。
動画クラスのスレッドの処理内容には回線速度(定数)に応じて...
--結果例
---&ref(thread.JPG,,width=200);
&aname(data);
**2010/12/17 [#f5adbee6]
-データ型
--javaのデータ型は大きく分けて基本型(プリミティブ型)と...
char a = 'A'; int i=100; <==基本型
String a = new String("A"); Norimono m=new Norimono(); <...
--2つともAと表示されるが,この2つには大きな違いがある.
--それは何だ? &color(white,){基本型はメソッドを持たない...
--プリミティブ型は値を扱うためだけの型であり,以下のよう...
--&ref(データ型.png,,width=600);
--[[参考>http://msugai.fc2web.com/java/primitive.html]]
-配列
--はじめに
---配列とは,同じ型のデータを複数もつことができるオブジェ...
---int,doubleなどの基本型だけじゃなく,Stringなどのオブジ...
---一度サイズが決められると変更できない.
--使い方
---方法①:宣言をして,その後生成する.
int[] intArray;
intArray = new int[10];
double [] doubleArray = new double[10];
---方法②:配列生成時に直接データを代入して配列を生成する.
double [] doubleArray = {1.05d, 1.06d, 1.07d};
String [] stringArray = {"Sunday", "Monday", "Tuesday"};
---オブジェクト型配列の生成の注意点
× 配列を生成するだけじゃ,オブジェクトまでは生成されない.
◯ 配列生成後,配列の各要素のオブジェクトを生成する必要が...
例↓
---&ref(配列.png,,width=400);
--配列への代入・参照
---Cと同じ.インデックス番号は0から配列長さ-1まで.
intArray[5] = 50;
--配列の長さ(length属性)
---配列には,配列サイズを返すlength属性が備わっている.
× length() ← これはStringオブジェクトやStringBufferオブ...
◯ length ← 配列のlength属性
例:for(int i = 0; i < intArray.length; i++) { //こん...
--配列のコピー
---方法①:forループを使用した場合
for (int i = 0; i < charArray1.length; i++) {
charArray2[i] = charArray1[i];
}
---方法②:cloneメソッドを使用した場合
char[] charArray1 = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char[] charArray2 = (char[])charArray1.clone();
---方法③:arraycopyメソッドを使用した場合.arraycopyメソ...
int[] FromInt = {1, 2, 3, 4, 5, 6, 7}; //(1)
int[] ToInt = new int[10]; //(2)
System.arraycopy(FromInt, 1, ToInt, 3, 5);
FromInt配列のインデックス番号1から5インデックス分をToInt...
---&ref(copy.png,,width=300);
---[[オブジェクト配列をコピーする際の注意>http://www.java...
シャローコピーとディープコピー
・シャローコピーとは,コピー先のオブジェクトに対し、その...
つまりコピー元、コピー先とも同じオブジェクトを参照し...
・ディープコピーとはコピー先のオブジェクトに対し、参照情...
シャローコピーを行った場合は、コピー先のオブジェクト...
--[[2次元配列>http://www.javaroad.jp/java_array3.htm]]
---Javaでは2次元配列は配列の配列という形をとっています。...
---&ref(2d2.png,,width=300);
---もう一つの配列のサイズがそれぞれ同じである必要ではない,
---&ref(2d1.png,,width=300);
---宣言,生成方法
int[][] int2Array = new int[10][5];
String[][] string2Array = { {"Sunday", "Monday"},
{"Monday", "Tuesday"...
double[][] double2Array = new double[5][];
//double型の2次元配列double2Arrayを宣言し、上位配列のみ...
double2Array[0] = new double[10];
double2Array[1] = new double[8];
double2Array[2] = new double[9];
double2Array[3] = new double[8];
double2Array[4] = new double[9];
//下位配列のみを生成。
--練習問題1
---配列を宣言,代入して,コピーして,コピー元とコピー後を...
---1.配列を宣言し,生成する.
int[] hairetu = {1,2,3,4,5};
---3.上のどれかを使ってコピーする
---4.コピー元は普通に表示して,コピー後は逆から表示
-文字列
--種類:Characterクラス,Stringクラス,StringBufferクラス
--Characterクラス:1文字しか保持できない.一度代入後,&c...
Character aaa = new Character('A');
--Stringクラス:複数の文字を保持できる.&color(red,){変更...
String aaa = new String("ABC");
--StringBuffer:複数の文字を保持できる.&color(red,){変更...
StringBuffer aaa = new StringBuffer("hello");
aaa.append("hihihi"); <===hellohihihiとなる
-オブジェクトの比較
Integer i1 = new Integer(1);
Integer i2 = i1;
Integer i3 = new Integer(1);
① i1 == i2 ?? True or False
② i1 == i3 ?? True or False
&color(white,){①正解はTrue};&color(white,){②正解はFalse};
---解説:&color(white,){オブジェクトは参照型であるため,...
--練習問題2
---上のプログラムを実行して確認してみよう.
--equal()メソッド&color(white,){<==保持している値を比較し...
i1.equal(i2);
i1.equal(i3);
-課題
--配列を使った課題
---目的:ここはとある島の学校で,あなたは小学校の先生です...
---1.生徒数, 点数,名前はターミナルから入力する
---2.例として,作る配列は,教科[], 名前[], 点数[][]
---??
---??
number = Integer.parseInt(d.readLine());
&aname(io);
**2010/12/20 [#t4368d9a]
-入出力(ストリーム)
--javaでは入出力をストリーム(=流れ)を通じて行う.
--入力元,出力先がなんであれ,同じようにプログラムが書け...
--出力先の例:ターミナル,ファイル,ネットワーク
--バイトストリーム:バイナリデータを扱う(画像など).
--文字ストリーム:テキストデータを扱う.
--バイトストリームと文字ストリームでは使うクラスが異なる.
-全体像
--ファイル入出力
---文字ストリーム入力:FileReaderクラス
---文字ストリーム出力:FileWriterクラス
---バイトストリーム入力:FileInputStreamクラス
---バイトストリーム出力:FileOutputStreamクラス
--パイプ入出力
---文字ストリーム入力:PipedReaderクラス
---文字ストリーム出力:PipedWriterクラス
---バイトストリーム入力:PipedInputStreamクラス
---バイトストリーム出力:PipedOutputStreamクラス
--キーボードからの入力
---InputStreamReaderクラス
--全体に共通して使えるクラス(ラップして使う)
---BufferedWriterクラス
---BufferedReaderクラス
---PrintWriterクラス
-入出力の方法(主に文字ストリーム)
--javaにおける入出力:[[java.ioパッケージ>http://java.sun...
--try catchで例外処理をしないとコンパイルできない(IOExce...
--(1) ファイル入出力
---使用する主なクラス:FileReaderクラス,FileWriterクラス...
---FileReader,FileWriterは必須,Fileは任意
---FileReader,FileWriterはそれぞれReader,Writerを継承
---ファイルから読み込む
---1.ファイルを開く
FileReader fr = new FileReader( File or FileDescriptor o...
ファイル名を指定してファイルを開く例
FileReader fr = new FileReader( "filename.txt" );
---2.データの読み込み
c = (char)fr.read(); //1文字読み込み
---readメソッドは[[Readerクラス>http://java.sun.com/javas...
---3.ファイルを閉じる
fr.close();
---ファイルへ書き出す
---1.ファイルを開く
FileWriter fw = new FileWriter( "filename.txt" );
---2.データの書き出し
fw.write( "hoge" ); //文字列の書き出し.String
---writeメソッドは[[Writerクラス>http://java.sun.com/java...
---3.ファイルを閉じる
fw.close();
---サンプルプログラム:PrintTest.java,ReadTest.java
---ReadTest=>PrintTest=>ReadTestの順に実行
--BufferedReaderクラス,BufferedWriterクラスの利用
---一文字ずつ読み込むのは効率が悪い=>ある程度まとめてデ...
FileReader fr = new FileReader( "filename" );
BufferedReader br = new BufferedReader( fr );
---ファイルから一行分読み込む
s = br.readLine();
sはStringクラスのインスタンス
---ファイルを閉じる
br.close();
BufferedReaderクラスのcloseメソッドを実行すれば,FileRea...
---ReadTest.javaをtest.txtの中身が全部(一行分)読み込め...
---大量のデータを書き込むのに便利なのが[[BufferedWriter>h...
--(2) キーボードからの入力,端末への出力
---InputStreamReaderクラスを利用
---キーボードからの入力
---1.入力ストリームを開く
InputStreamReader inputstr = new InputStreamReader( Syst...
---2.入力ストリームからデータを読み込む
c = (char)inputstr.read(); //これも一文字読み込む
---ファイル入出力と同様BufferedReaderクラスを使えば,一行...
---PrintTest.javaに端末からの入力を受け付ける機能を追加し...
---端末への出力([[Systemクラス>http://java.sun.com/j2se/...
System.out.println( "hoge" ); //hogeの後改行
System.out.print( "hoge" ); //改行なし
--(3)パイプ入出力
---パイプとは?=>処理結果を標準入出力を通して他の処理へ...
---PipedReaderクラス,PipedWriterクラスを利用
---1.入力パイプと出力パイプをつなぐ
PipedReader pr = new PipedReader();
PipedWriter pw = new PipedWriter( pr );
BufferedReader bpr = new BufferedReader( pr );
---2.pwを[[PrintWriterクラス>http://java.sun.com/j2se/1.5...
PrintWriter out = new PrintWriter( pw );
---3-1.書き込み側:データを書き込む
out.println( "hoge" );
---3-2.読み込み側:データを読み込む
s = bpr.readLine();
---4.ストリームを閉じる
bpr.close();
out.close();
---サンプルファイル:PipeEx.java
--(4)[[フィルタ入出力>http://www.javaroad.jp/java_io5.htm]]
--(5)オブジェクトのシリアライズ(バイトストリーム)
---オブジェクトの入出力の際に必要.
---ストリームにオブジェクトを流して,別PC上のプログラムに...
---ObjectInputStreamクラス,ObjectOutputStreamクラス,Ser...
---Serializableインターフェース:そのオブジェクトがシリア...
---transient修飾子,static修飾子がついている変数やメソッ...
---読み込まれる側:Serializableインターフェースを実装(サ...
import java.io.*
public class ClassName implements Serializable{
...
}
---読み込む側: サンプルファイル SerialTest.java
---[[FileOutputStream>http://java.sun.com/j2se/1.5.0/ja/d...
---[[FileInputStream>http://java.sun.com/j2se/1.5.0/ja/do...
-課題
--時系列データファイルtheta.txtから角度データを読み込み,...
--Data.javaを使用
--各メソッドからmainメソッドへのデータ移動は基本的にパイ...
--Data.openPipe();でパイプオープンし,Data.closePipe();で...
--Data.readData( String )の返り値はデータ数.
--Data.bpreaderからデータを取り出すことができる(bpreader...
--Data.bpreaderを再利用する場合は,必ずData.closePipe()し...
--extractDataは文字列データを半角スペース前後で分けるメソ...
--theta.txtの書式
時刻 角度
...
--例えば,Data.extractData( Data.readDataで読み込んだデー...
--文字列からdouble型への変換は,double Double.parseDouble...
--差分計算
omega[i-1] = ( theta[i] - theta[i-1] )/( t[i] - t[i-1] );
t[i-1] = ( t[i-1] + t[i] )/2.0;
みたいな雰囲気.
--ファイルの書き出しができたらグラフ化してみよう!(omega...
&aname(collection);
**2010/12/ [#i4266e84]
-コレクションとは
--要素の集合体。大きくリスト,セット,マップの三種類がある。
--容量が決まっておらず,必要に応じて容量を拡張する。
---負荷係数:コレクションの容量がこの値まで埋まったら容量...
--javaの道は宣言の仕方が古いので,以下の宣言の仕方に読み替...
-List
--重複要素が許可され, 要素において順番を持ったインタフェ...
--宣言方法
List name1<型名> = new ArrayList<型名>();
List name2<型名> = new LinkedList<型名>();
-Set
--重複要素が許可されていないインタフェース.HashSet、TreeS...
--宣言方法
Set name3<型名> = new HashSet<型名>();
Set name4<型名> = new TreeSet<型名>();
Set name5<型名> = new LinkedSet<型名>();
-Map
--キーと値が対になった要素を持つインタフェース.キーは重複...
--宣言方法
Map name6<型名,型名> = new HashMap<型名,型名>();
Map name7<型名,型名> = new TreeMap<型名,型名>();
Map name8<型名,型名> = new LinkedHashMap<型名,型名>();
-Generics
--J2SE5.0以降に実装された言語仕様.
--コレクションの宣言方法が変更された.[[参考サイト>http://...
-Iterator
--コレクション内の要素に順番にアクセスする手段を提供する...
-課題
--あなたはある新規会員制店舗の会員登録用プログラムの作成...
--仕様書
---会員のデータ保持にMapを使う.(会員番号と会員名を紐つける)
---イテレータを使用してtextファイルに会員番号順にsortされ...
---会員番号を打ち込むと会員名が表示されるようにしたい.
---端末上でいままでに入力したデータを会員番号順で確認した...
--Tips
---TreeMapは要素を自動的にソートする.
終了行:
[[研究会/輪講]]
#contents
*各種リンク [#y7810411]
-Javaの道 http://www.javaroad.jp/
-JDK (Java Development Kit; 開発環境) http://www.oracle.c...
-Java tutorial http://download.oracle.com/javase/tutorial...
*進め方 [#l8f52ac7]
-各項目について担当者が解説とサンプル演習を用意する。
-必要に応じてsvnで管理。
cd ~/prog
svn co svn+ssh://mizuuchi.lab.tuat.ac.jp/home/svn/prog/j...
|項目|担当|日時|資料|備考|更新日|h
|思想・オブジェクト指向|水内|2010/11/26|[[Java輪講#ab4910...
|オブジェクトの生成・コンストラクタ|水内|2010/12/01|[[Jav...
|継承・親クラス・子クラス|三塩|2010/12/06|[[Java輪講#c6d2...
|オーバーロード|宮澤|2010/12/07|[[参考>http://www.javaroa...
|オーバーライド|山邊|2010/12/08|[[参考>http://www.javaroa...
|[[アクセス修飾子・クラス変数とインスタンス変数>Java輪講#...
|[[クラス修飾子>Java輪講#class-modifier]]|本堂|2010/12/10...
|[[インタフェース>Java輪講#interface]]|三塩|2010/12/13|[[...
|[[例外>Java輪講#error]]|宮澤|2010/12/15|[[参考>http://ww...
|スレッド|山邊||[[参考>http://www.javaroad.jp/java_thread...
|データ型・配列・文字列・比較(オブジェクトの同等性)|川村|...
|入出力|本堂|2010/12/20|[[参考ページ>http://ash.jp/java/s...
|[[コレクション>Java輪講#collection]]|三塩||[[参考>http:/...
|CLASSPATH・パッケージ・import|宮澤||||2010-12-02|
|jar|山邊||||2010-12-02|
|アプレット(特にアプレットViewer)|川村||||2010-12-20|
|JNI,ソケット|本堂||||2010-12-02|
*水内の昔の講義資料 [#oa5988d9]
-&ref(soft3-20081006-2.pdf); オブジェクト指向プログラミング
-&ref(soft3-20081201.pdf); Javaに触れる
-&ref(soft3-20081208.pdf); オブジェクト指向プログラミング...
-&ref(soft3-20081222.pdf); Javaアプレット, 迷路課題
-Javaサンプル &ref(200811-Java-sample.zip);
-Java, JNI, eusサンプル &ref(20081208-sample.zip);
-Javaアプレットサンプル &ref(20081222-sample.zip);
**2010/11/26 [#ab49105b]
-``Write Once, Run Anywhere'' 「一度書けばどこでも走る」
-仮想計算機(java virtual machine)上で実行
-java環境のインストール
--ubuntuなら sudo aptitude install ~
--~の部分はコマンドラインで``java''と打った時に出てくる...
--Mac OS Xなら標準でインストールされているはず.
--Cygwinの場合は...
-サンプルプログラム``HelloWorld.java''
--ファイル名はクラス名と同じ.
--クラス名の最初の文字は大文字で,単語の区切りごとに各単...
--変数名は,最初の文字は小文字で,単語の区切りごとに各単...
--コンパイル
javac HelloWorld.java
--実行
java HelloWorld
--public class HelloWorld : クラス名.これがファイル名と...
--public static void main( String argv[] )以下 : HelloWor...
--javadoc HelloWorld.java とするとドキュメントのhtmlファ...
-オブジェクト指向
--全てのものを「オブジェクト」として扱う.
--キーワード:「カローラ(カテゴリ)」「持つべき情報」「...
--Personは「カローラ(カテゴリ)」,nameはPersonが「持つ...
--「ご飯を食べる」「寝る」などはPersonの「メソッド」
-Norimonoクラス(Norimonoカローラ(カテゴリ))を作る
public class Norimono {
boolean haveWing; //翼があるかどうか.booleanは...
double weight; //重量
Person jouin[]; //乗員リストを格納する配列.他に...
int nJouin = 0; //乗員数.0で初期化.
Norimono( ) {
jouin = new Person[100]; //これで配列が...
}
int noseru( Person p ){ //乗員を「乗せる」メソッド
jouin[nJouin] = p; //乗員リストにPerson...
nJouin++; //乗員数を増やす
return nJouin;
}
void printNJouin() { //現在の乗員数を表示するメ...
System.out.println( nJouin );
}
}
**2010/12/01 [#z68a4b50]
-newによるインスタンス(オブジェクト)の生成。
-Listクラス・ArrayListクラス
-コンストラクタ
-&ref(20101201.zip);
**2010/12/06 [#c6d22fa7]
-継承とは,親クラス(SuperClass)の性質を子クラス(SubClass)...
-同じ処理を二度書かなくても済むようになるようなメリットが...
-多重継承について
--多重継承とは複数のクラスを親にしたり,子クラスを親クラ...
-方法
class SubClass extends SuperClass{}
これでSubClassにSuperClassが継承される.
-以下例としてBattleShipクラスにNorimonoクラスを継承.Trave...
--BattleShip.java
import java.util. *;
public class BattleShip extends Norimono{
double velocity = 0;
int nScrew = 0;
void InPort(){
velocity = 0;
}
void CruiseSpeed(){
velocity = 16;
}
void CombatSpeed(){
velocity = 27.6;
}
void printVelocity(){
System.out.println(velocity);
}
}
--Travel.java
public class Travel{
public static void main (String[] args){
BattleShip Yamato;
Person Kodai;
Person Mori;
Yamato = new BattleShip();
Kodai = new Person("古代進");
Mori = new Person("森雪");
Yamato.CruiseSpeed();
Yamato.printVelocity();
Yamato.noseru(Kodai);//NorimonoクラスのメンバメソッドNo...
Yamato.noseru(Mori);
Yamato.printJouin();
}
}
**2010/12/07 [#i2eb3fdf]
-オーバーロードとは、同一クラス内で、メソッド名が同一で「...
-同じ機能を持つメソッド名は同じにして、プログラムを綺麗に...
-注意:以下を変えても異なったメソッドとは認識しない。
--「戻り型」、「アクセスレベル」、「引数名」、「throws節」
-Overload.javaで同一クラス内に同じ名のメソッドを作る
**2010/12/08 [#h259bd9a]
-オーバーライドとは、継承クラス内で、親クラス内のメソッド...
-継承クラス内のメソッド(オーバーライドする側)の処理内容は...
-まとめると、メソッドを上書きするということになる。
-ポリモーフィズムの項目で重要になる。
-ポリモーフィズムとはメソッド名は同じだけど内部の処理は各...
-練習課題:以下のような物理シミュレーションのプログラムを...
--宇宙空間における物体を表現するクラスBody。位置と速度と...
--Bodyを継承し、推力(thrust)を追加で保持するクラスRocket。
--Bodyクラスのメソッド
---コンストラクタ:Body(); Body(double[] pos); Body(doubl...
---void step(double second); //second秒後の位置・姿勢に更...
---void status(); //現在の状態を表示する。
--Rocketクラスのメソッド
---Rocket(double[] pos); Rocket(double[] pos, double[] ve...
---void step(double second); //オーバーライド
---void thrust(double x, double y, double z); //推力を設...
---void thrust(); //現在の推力を表示(オーバーロード)
--Univクラス
---メンバ変数:static List<Body> bodies;(宇宙に存在する物...
---メソッド update_world(); print_status();
---public static void main (String[] args); メイン
---static boolean crash (Body a, Body b); //衝突している...
&aname(access-modifier);
**2010/12/09 [#dee6f21e]
-アクセス修飾子
--アクセス修飾子とはメンバ変数やメソッドにどこからアクセ...
--アクセス権を指定することで、想定外の操作等によるデータ...
--修飾子の種類
---public:どっからでもアクセスできる
---protected:異なるパッケージのクラスからだけのアクセスを...
---なし:同じパッケージならどこからでもおk
---private:同じクラス内でしかアクセスできない
---&ref(アクセス.png,,width=300);
---↑自ファイル==>同Package 他ファイル==>他Package
--例
AccessTest1.jave↓=======================
public class AccessTest1 {
// public, protected, 無し, privateな値の定義
public int publicValue;
protected int protectedValue;
/* 無し */ int normalValue;
private int privateValue;
public static void main(String[] args) {
}
// 自ファイル・自クラスからのアクセステスト
public AccessTest1() {
this.publicValue = 1;
this.protectedValue = 2;
this.normalValue = 3;
this.privateValue = 4;
}
}
class AccessTest2 extends AccessTest1 {
// 自ファイル・サブクラスからのアクセステスト
void AccessTest2() {
this.publicValue = 1;
this.protectedValue = 2;
this.normalValue = 3;
// this.privateValue = 4; ← アクセスできない
}
}
class AccessTest3 {
// 自ファイル・他クラスからのアクセステスト
void AccessTest3() {
AccessTest1 o = new AccessTest1();
o.publicValue = 1;
o.protectedValue = 2;
o.normalValue = 3;
// o.privateValue = 4; ← アクセスできない
}
}
AccessTest4.jave↓=======================
public class AccessTest4 extends AccessTest1 {
public static void main(String[] args) {
}
// 他ファイル・サブクラスからのアクセステスト
AccessTest4() {
this.publicValue = 1;
this.protectedValue = 2;
// this.normalValue = 3; ← アクセスできない
// this.privateValue = 4; ← アクセスできない
}
}
class AccessTest5 {
// 他ファイル・他クラスからのアクセステスト
AccessTest5() {
AccessTest1 o = new AccessTest1();
o.publicValue = 1;
// o.protectedValue = 2; ← アクセスできない
// o.normalValue = 3; ← アクセスできない
// o.privateValue = 4; ← アクセスできない
}
}
-クラス変数とインスタンス変数
--変数を定義できる場所は?
import java.util. *;
public class BattleShip extends Norimono{
double velocity = 0;
int nScrew = 0; <==メソッドの外側
void InPort(){
int i; <==メソッドの内側
velocity = 0;
}
・
・
}
--メソッドの内側か外側の2択
---メソッドの内側:ローカル変数
---メソッドの外側:クラス変数orインスタンス変数
--クラス変数
---staticをつけて宣言した変数
--インスタンス変数
---staticがついてないで宣言した変数のこと.インスタンスさ...
--例
DefVariable.java↓=======================
public class DefVariable {
int i = 0;
static int clsi = 0;
public void incre(){
i++;
clsi++;
}
public void dispi(){
System.out.println(i);
}
public void dispClsi(){
System.out.println(clsi);
}
}
ChkVariable.java↓=======================
public class ChkVariable {
public static void main(String[] args) {
DefVariable cls1,cls2;
int i;
cls1 = new DefVariable();
cls2 = new DefVariable();
for(i=0;i<5;i++){
cls1.incre();
}
System.out.print("cls1のインスタンス変数\t i: \t");
cls1.dispi();
System.out.print("cls1のクラス変数\t clsi: \t");
cls1.dispClsi();
for(i=0;i<10;i++){
cls2.incre();
}
System.out.print("cls2のインスタンス変数\t i: \t");
cls2.dispi();
System.out.print("cls2のクラス変数\t clsi: \t");
cls2.dispClsi();
}
}
結果↓=============================
cls1のインスタンス変数 i: 5
cls1のクラス変数 clsi: 5
cls2のインスタンス変数 i: 10
cls2のクラス変数 clsi: 15
--解説
---インスタンス変数は,&color(red,){インスタンスに所属す...
-課題
--第3回のときのNorimono.java,BattleShip.java,Travel.java...
--やること
---%%Norimono.javaのメンバ変数velocityをNorimonoクラス内...
---%%現在,インスタンス変数のvelocityをクラス変数に変更す...
---Norimonoクラスに何台の乗り物を作ったのかを表すnumberを...
---numberは何個もいらない,ひとつだけでいい=not インスタ...
---どこからでもアクセス出来るようにする
---numberをprintするメソッドを作る
---Travel.javaでNorimono.javaで定義したnumberを表示するメ...
&aname(class-modifier);
**2010/12/10 [#g3888a5a]
-クラス修飾子
-キーワード:パッケージ,抽象クラス,抽象メソッド,public...
--public: どこからでも参照できるクラス
--abstract: 抽象クラス([[参考リンク参照>http://www2.ocn....
--final: 他のクラスが継承できないクラス
--何もつけない: 同じパッケージ([[参考リンク参照>http://w...
-サンプルプログラム
--ClassModifier.java:ディレクトリ"rinko2010"内にあるファ...
--livingthingsパッケージ
---Animal.java:動物クラス
---Plant.java:植物クラス=>publicな抽象クラス
---Alien.java:エイリアンクラス=>抽象クラス
---Cat.java:猫クラス=>動物クラスを継承
---ExtendsCat.java:猫クラスを継承したいクラス.だけど...
---Kaseijin.java:火星人クラス=>エイリアンクラスを継承...
-livingthingsパッケージ内のファイルのコンパイル,実行方法
--ディレクトリ"rinko2010"内で
$javac livingthings/Cat.java #Cat.javaをコンパイル
$java livingthings.Cat #Catクラスのmainメソッドを実行
-手順
--livingthings/Cat.javaをコンパイル=>実行
--livingthings/ExtendsCat.javaをコンパイル=>あれ,通ら...
--livingthings/Kaseijin.javaをコンパイル=>あれ,通らな...
--ClassModifier.javaをコンパイル=>あれ,通らないな~お...
-課題
--ExtendsCatクラスがCatクラスを継承出来るようにする.
--Kaseijin.javaのコンパイルが通るようにする.
--植物クラスを継承した「Asagao」クラスを,livingthingsパ...
---livingthingsパッケージの一部であることを表すには,ファ...
---メンバ変数には最低限「花びらが開いているか否か」を示す...
---植物クラスの抽象メソッド"growth"は,その植物の成長の仕...
---引数で時刻(0時から24時)を渡すと,朝の限られた時間だ...
---植物クラスのメソッド"status"をオーバーライドし,花びら...
---ディレクトリ"rinko2010"内のClassModifier.javaのmainメ...
---頑張って朝顔を100mくらいまで成長させよう!そして最後に...
&aname(interface);
**2010/12/13 [#e5ae14e4]
-インタフェース
--抽象メソッドのみを持つクラスのような物
--修飾子はpublicのみ
--メンバ変数は定数でなければならない.
--インタフェース内で宣言されたメンバ変数には,暗黙的に修飾...
--クラスは"継承"するが,インタフェースは"実装"する.
--多重に実装することが可能.
-インタフェースの宣言
interface InterfaceName{}
--修飾子publicを付けると全クラスからアクセス可能.ないと同...
-インタフェースの実装
class className class ClassName1 implements InterfaceNam...
--インタフェースは多重実装可能.
-課題
--成績を判定するJudGradeメソッドをインタフェースから実装...
--科目は天文学(Astronomy)と暗号学(Cryptography)
--天文学は出席とテスト,暗号学は2回のテストで成績を判定する.
--成績は判定に使用する要素を100点満点に換算し,S~Dで判定...
--換算比率および,判定基準は各自で指定.
--サンプルがrinko2010/exInterfacesにある.
--パッケージにしてあるのでコンパイル時注意
--JudGrade.java インタフェース
--Astronomy.java 天文学の成績判定
--Cryptography.java 暗号学の成績判定
&aname(error);
**2010/12/15 [#o743b333]
-例外とはプログラム動作における予期せぬ事象(エラー)のこと
-Javaでは例外が発生した時、あらかじめ用意されているエラー...
-Javaではデフォルトの例外処理以外にエラーメールの送信、エ...
-例外をスローする
--Javaではエラーが発生した際、例外オブジェクトというエラ...
-例外ハンドラ
--エラーメールを送信する、エラーログを生成するなどの例外...
-例外をキャッチする
--Java実行システムが例外ハンドラを見つけることを 「例外を...
-try・catch・finally
--try { 例外をスローする可能性のある処理 }
---try節で囲まれた処理の中で例外が発生した場合、Java実行...
--catch (例外クラス型 引数名) { 例外処理(例外ハンドラ) }
---catch節ではスローされた例外に対する処理を行う例外ハン...
---スローされた例外オブジェクトとcatch節に記載された例外...
--finally { 最後に必ず実行される処理 }
---finally節は例外が発生するしないにかかわらず必ず実行し...
-throws
--javaでは例外が発生したメソッド内で例外ハンドラを発見で...
--オーバーライドでは注意点があり
---スーパークラスのメソッドで指定される例外クラス型以外の...
---スーパークラスのメソッドで指定される例外クラス型より範...
-throw
--任意の場所で例外を発生させることが可能
メソッド名 (引数型 引数名) throws 例外クラス型,・・・
-アサーション
--プログラム中に特定の条件を付したアサーションを追加し,...
--バグの早期発見に役立つ機能
assert 式1 :"コメント(なくても良い)";
-通常はアサーションは無効であり,有効にする必要あり
javac -source 1.4 xxx.java
java -ea xxx
-課題
--麻雀の得点計算機を作ってみよう
--麻雀の得点計算には役数(翻)(1以上)と符(20,30,40,50・...
--翻は倍にするという意味がある
--得点=符×2^(役数)×4×4(子)
--例えば,30符・1役では,960点となる.実際は切り上げて100...
--入力値が上記の範囲ではない時や数字でもない時にエラーを...
--svnにサンプル「Majan.java」がある
**2010/12/16 [#w2675b63]
-スレッド
--スレッドは複数の処理を同時に行なうことである。(実際は1...
-スレッドクラス
--Threadクラスというものがあり、このクラスにはstart()とru...
-スレッドを作りかた
--Threadクラスを継承したクラスを作る
--継承したクラスにrun()という名前のメソッドをつくり(オー...
--mainメソッドでThreadクラスを継承したクラスをインスタン...
--スレッドの実行は、オブジェクト名.start() で行う
--オブジェクト名.start()はそのオブジェクト内のrun()という...
スレッドの生成例
public class Test extends Thread{ //Threadクラスの継承
public void run(){ //run()のオー...
System.out.println("aiueo");
}
public void main(){
Test thread = new Test(); //Threadクラスを継承したクラス...
thread.start(); //スレッドの実行
}}
-スレッドの優先順位について
--スレッドが複数ある場合どのスレッドを優先させるかはOSが...
--プログラマーが意図的に決めるためには、wait() sleep() no...
sleep():このメソッドを実行したスレッドは指定した[ms]時間...
wait() :このメソッドを実行したスレッドは、他のスレッドで...
notify() :このメソッドを実行すると、他のスレッドの1つが...
notifyAll():このメソッドを実行すると他のスレッドすべてが...
-スレッドの作成方法2
--runnableインターフェースを実装してスレッドを作成する方法
-runnableインターフェース
--メソッドとしてrun()を持っているインターフェイス
--start()メソッドは持っていない
--Threadクラスではないクラスを継承したいため、Threadクラ...
-スレッドクラスには、Thread(obj)というコンストラクタが定...
-これを利用してThread thread1 = new Thread(obj) とするこ...
スレッドの作成例2
class Hikoki extends Norimono implements Runnable{ //T...
public void run(){ //Runna...
………
}
void main (){
Hikoki hikoki = new Hikoki;
Thread thread1 = new Thread(hikoki); //Thread オブジェ...
thread1.start()
}
-synchoronizedの使い方
--あるオブジェクトに対してスレッドによるアクセスを同時に...
--例えば、1つのグローバル変数に対する変更を同時に複数のス...
--一つのスレッドの処理が完全に終わってからもう一つのスレ...
--synchronizedブロック([[とほほのJava入門の参考ページ>ht...
class Global {
static Object lock = new Object();
}
としておいて、「処理内容」をひとつのスレッドしか一時に実...
synchronized(Global.lock){
処理内容
}
--synchronizedメソッド
public synchronized void hoge(){
処理内容
}
のようにすると、hoge()の実行は、同時に複数のスレッドが実...
ただし、別のインスタンスだと効かない。
-課題
--パソコン上で四則演算と動画をダウンロードを同時に行うプ...
ヒント
計算クラス、動画クラス、を作りそれぞれのクラスにスレッド...
動画クラスには、動画のサイズを示すクラス変数を定義する。
動画クラスのスレッドの処理内容には回線速度(定数)に応じて...
--結果例
---&ref(thread.JPG,,width=200);
&aname(data);
**2010/12/17 [#f5adbee6]
-データ型
--javaのデータ型は大きく分けて基本型(プリミティブ型)と...
char a = 'A'; int i=100; <==基本型
String a = new String("A"); Norimono m=new Norimono(); <...
--2つともAと表示されるが,この2つには大きな違いがある.
--それは何だ? &color(white,){基本型はメソッドを持たない...
--プリミティブ型は値を扱うためだけの型であり,以下のよう...
--&ref(データ型.png,,width=600);
--[[参考>http://msugai.fc2web.com/java/primitive.html]]
-配列
--はじめに
---配列とは,同じ型のデータを複数もつことができるオブジェ...
---int,doubleなどの基本型だけじゃなく,Stringなどのオブジ...
---一度サイズが決められると変更できない.
--使い方
---方法①:宣言をして,その後生成する.
int[] intArray;
intArray = new int[10];
double [] doubleArray = new double[10];
---方法②:配列生成時に直接データを代入して配列を生成する.
double [] doubleArray = {1.05d, 1.06d, 1.07d};
String [] stringArray = {"Sunday", "Monday", "Tuesday"};
---オブジェクト型配列の生成の注意点
× 配列を生成するだけじゃ,オブジェクトまでは生成されない.
◯ 配列生成後,配列の各要素のオブジェクトを生成する必要が...
例↓
---&ref(配列.png,,width=400);
--配列への代入・参照
---Cと同じ.インデックス番号は0から配列長さ-1まで.
intArray[5] = 50;
--配列の長さ(length属性)
---配列には,配列サイズを返すlength属性が備わっている.
× length() ← これはStringオブジェクトやStringBufferオブ...
◯ length ← 配列のlength属性
例:for(int i = 0; i < intArray.length; i++) { //こん...
--配列のコピー
---方法①:forループを使用した場合
for (int i = 0; i < charArray1.length; i++) {
charArray2[i] = charArray1[i];
}
---方法②:cloneメソッドを使用した場合
char[] charArray1 = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char[] charArray2 = (char[])charArray1.clone();
---方法③:arraycopyメソッドを使用した場合.arraycopyメソ...
int[] FromInt = {1, 2, 3, 4, 5, 6, 7}; //(1)
int[] ToInt = new int[10]; //(2)
System.arraycopy(FromInt, 1, ToInt, 3, 5);
FromInt配列のインデックス番号1から5インデックス分をToInt...
---&ref(copy.png,,width=300);
---[[オブジェクト配列をコピーする際の注意>http://www.java...
シャローコピーとディープコピー
・シャローコピーとは,コピー先のオブジェクトに対し、その...
つまりコピー元、コピー先とも同じオブジェクトを参照し...
・ディープコピーとはコピー先のオブジェクトに対し、参照情...
シャローコピーを行った場合は、コピー先のオブジェクト...
--[[2次元配列>http://www.javaroad.jp/java_array3.htm]]
---Javaでは2次元配列は配列の配列という形をとっています。...
---&ref(2d2.png,,width=300);
---もう一つの配列のサイズがそれぞれ同じである必要ではない,
---&ref(2d1.png,,width=300);
---宣言,生成方法
int[][] int2Array = new int[10][5];
String[][] string2Array = { {"Sunday", "Monday"},
{"Monday", "Tuesday"...
double[][] double2Array = new double[5][];
//double型の2次元配列double2Arrayを宣言し、上位配列のみ...
double2Array[0] = new double[10];
double2Array[1] = new double[8];
double2Array[2] = new double[9];
double2Array[3] = new double[8];
double2Array[4] = new double[9];
//下位配列のみを生成。
--練習問題1
---配列を宣言,代入して,コピーして,コピー元とコピー後を...
---1.配列を宣言し,生成する.
int[] hairetu = {1,2,3,4,5};
---3.上のどれかを使ってコピーする
---4.コピー元は普通に表示して,コピー後は逆から表示
-文字列
--種類:Characterクラス,Stringクラス,StringBufferクラス
--Characterクラス:1文字しか保持できない.一度代入後,&c...
Character aaa = new Character('A');
--Stringクラス:複数の文字を保持できる.&color(red,){変更...
String aaa = new String("ABC");
--StringBuffer:複数の文字を保持できる.&color(red,){変更...
StringBuffer aaa = new StringBuffer("hello");
aaa.append("hihihi"); <===hellohihihiとなる
-オブジェクトの比較
Integer i1 = new Integer(1);
Integer i2 = i1;
Integer i3 = new Integer(1);
① i1 == i2 ?? True or False
② i1 == i3 ?? True or False
&color(white,){①正解はTrue};&color(white,){②正解はFalse};
---解説:&color(white,){オブジェクトは参照型であるため,...
--練習問題2
---上のプログラムを実行して確認してみよう.
--equal()メソッド&color(white,){<==保持している値を比較し...
i1.equal(i2);
i1.equal(i3);
-課題
--配列を使った課題
---目的:ここはとある島の学校で,あなたは小学校の先生です...
---1.生徒数, 点数,名前はターミナルから入力する
---2.例として,作る配列は,教科[], 名前[], 点数[][]
---??
---??
number = Integer.parseInt(d.readLine());
&aname(io);
**2010/12/20 [#t4368d9a]
-入出力(ストリーム)
--javaでは入出力をストリーム(=流れ)を通じて行う.
--入力元,出力先がなんであれ,同じようにプログラムが書け...
--出力先の例:ターミナル,ファイル,ネットワーク
--バイトストリーム:バイナリデータを扱う(画像など).
--文字ストリーム:テキストデータを扱う.
--バイトストリームと文字ストリームでは使うクラスが異なる.
-全体像
--ファイル入出力
---文字ストリーム入力:FileReaderクラス
---文字ストリーム出力:FileWriterクラス
---バイトストリーム入力:FileInputStreamクラス
---バイトストリーム出力:FileOutputStreamクラス
--パイプ入出力
---文字ストリーム入力:PipedReaderクラス
---文字ストリーム出力:PipedWriterクラス
---バイトストリーム入力:PipedInputStreamクラス
---バイトストリーム出力:PipedOutputStreamクラス
--キーボードからの入力
---InputStreamReaderクラス
--全体に共通して使えるクラス(ラップして使う)
---BufferedWriterクラス
---BufferedReaderクラス
---PrintWriterクラス
-入出力の方法(主に文字ストリーム)
--javaにおける入出力:[[java.ioパッケージ>http://java.sun...
--try catchで例外処理をしないとコンパイルできない(IOExce...
--(1) ファイル入出力
---使用する主なクラス:FileReaderクラス,FileWriterクラス...
---FileReader,FileWriterは必須,Fileは任意
---FileReader,FileWriterはそれぞれReader,Writerを継承
---ファイルから読み込む
---1.ファイルを開く
FileReader fr = new FileReader( File or FileDescriptor o...
ファイル名を指定してファイルを開く例
FileReader fr = new FileReader( "filename.txt" );
---2.データの読み込み
c = (char)fr.read(); //1文字読み込み
---readメソッドは[[Readerクラス>http://java.sun.com/javas...
---3.ファイルを閉じる
fr.close();
---ファイルへ書き出す
---1.ファイルを開く
FileWriter fw = new FileWriter( "filename.txt" );
---2.データの書き出し
fw.write( "hoge" ); //文字列の書き出し.String
---writeメソッドは[[Writerクラス>http://java.sun.com/java...
---3.ファイルを閉じる
fw.close();
---サンプルプログラム:PrintTest.java,ReadTest.java
---ReadTest=>PrintTest=>ReadTestの順に実行
--BufferedReaderクラス,BufferedWriterクラスの利用
---一文字ずつ読み込むのは効率が悪い=>ある程度まとめてデ...
FileReader fr = new FileReader( "filename" );
BufferedReader br = new BufferedReader( fr );
---ファイルから一行分読み込む
s = br.readLine();
sはStringクラスのインスタンス
---ファイルを閉じる
br.close();
BufferedReaderクラスのcloseメソッドを実行すれば,FileRea...
---ReadTest.javaをtest.txtの中身が全部(一行分)読み込め...
---大量のデータを書き込むのに便利なのが[[BufferedWriter>h...
--(2) キーボードからの入力,端末への出力
---InputStreamReaderクラスを利用
---キーボードからの入力
---1.入力ストリームを開く
InputStreamReader inputstr = new InputStreamReader( Syst...
---2.入力ストリームからデータを読み込む
c = (char)inputstr.read(); //これも一文字読み込む
---ファイル入出力と同様BufferedReaderクラスを使えば,一行...
---PrintTest.javaに端末からの入力を受け付ける機能を追加し...
---端末への出力([[Systemクラス>http://java.sun.com/j2se/...
System.out.println( "hoge" ); //hogeの後改行
System.out.print( "hoge" ); //改行なし
--(3)パイプ入出力
---パイプとは?=>処理結果を標準入出力を通して他の処理へ...
---PipedReaderクラス,PipedWriterクラスを利用
---1.入力パイプと出力パイプをつなぐ
PipedReader pr = new PipedReader();
PipedWriter pw = new PipedWriter( pr );
BufferedReader bpr = new BufferedReader( pr );
---2.pwを[[PrintWriterクラス>http://java.sun.com/j2se/1.5...
PrintWriter out = new PrintWriter( pw );
---3-1.書き込み側:データを書き込む
out.println( "hoge" );
---3-2.読み込み側:データを読み込む
s = bpr.readLine();
---4.ストリームを閉じる
bpr.close();
out.close();
---サンプルファイル:PipeEx.java
--(4)[[フィルタ入出力>http://www.javaroad.jp/java_io5.htm]]
--(5)オブジェクトのシリアライズ(バイトストリーム)
---オブジェクトの入出力の際に必要.
---ストリームにオブジェクトを流して,別PC上のプログラムに...
---ObjectInputStreamクラス,ObjectOutputStreamクラス,Ser...
---Serializableインターフェース:そのオブジェクトがシリア...
---transient修飾子,static修飾子がついている変数やメソッ...
---読み込まれる側:Serializableインターフェースを実装(サ...
import java.io.*
public class ClassName implements Serializable{
...
}
---読み込む側: サンプルファイル SerialTest.java
---[[FileOutputStream>http://java.sun.com/j2se/1.5.0/ja/d...
---[[FileInputStream>http://java.sun.com/j2se/1.5.0/ja/do...
-課題
--時系列データファイルtheta.txtから角度データを読み込み,...
--Data.javaを使用
--各メソッドからmainメソッドへのデータ移動は基本的にパイ...
--Data.openPipe();でパイプオープンし,Data.closePipe();で...
--Data.readData( String )の返り値はデータ数.
--Data.bpreaderからデータを取り出すことができる(bpreader...
--Data.bpreaderを再利用する場合は,必ずData.closePipe()し...
--extractDataは文字列データを半角スペース前後で分けるメソ...
--theta.txtの書式
時刻 角度
...
--例えば,Data.extractData( Data.readDataで読み込んだデー...
--文字列からdouble型への変換は,double Double.parseDouble...
--差分計算
omega[i-1] = ( theta[i] - theta[i-1] )/( t[i] - t[i-1] );
t[i-1] = ( t[i-1] + t[i] )/2.0;
みたいな雰囲気.
--ファイルの書き出しができたらグラフ化してみよう!(omega...
&aname(collection);
**2010/12/ [#i4266e84]
-コレクションとは
--要素の集合体。大きくリスト,セット,マップの三種類がある。
--容量が決まっておらず,必要に応じて容量を拡張する。
---負荷係数:コレクションの容量がこの値まで埋まったら容量...
--javaの道は宣言の仕方が古いので,以下の宣言の仕方に読み替...
-List
--重複要素が許可され, 要素において順番を持ったインタフェ...
--宣言方法
List name1<型名> = new ArrayList<型名>();
List name2<型名> = new LinkedList<型名>();
-Set
--重複要素が許可されていないインタフェース.HashSet、TreeS...
--宣言方法
Set name3<型名> = new HashSet<型名>();
Set name4<型名> = new TreeSet<型名>();
Set name5<型名> = new LinkedSet<型名>();
-Map
--キーと値が対になった要素を持つインタフェース.キーは重複...
--宣言方法
Map name6<型名,型名> = new HashMap<型名,型名>();
Map name7<型名,型名> = new TreeMap<型名,型名>();
Map name8<型名,型名> = new LinkedHashMap<型名,型名>();
-Generics
--J2SE5.0以降に実装された言語仕様.
--コレクションの宣言方法が変更された.[[参考サイト>http://...
-Iterator
--コレクション内の要素に順番にアクセスする手段を提供する...
-課題
--あなたはある新規会員制店舗の会員登録用プログラムの作成...
--仕様書
---会員のデータ保持にMapを使う.(会員番号と会員名を紐つける)
---イテレータを使用してtextファイルに会員番号順にsortされ...
---会員番号を打ち込むと会員名が表示されるようにしたい.
---端末上でいままでに入力したデータを会員番号順で確認した...
--Tips
---TreeMapは要素を自動的にソートする.
ページ名: