1
プログラミング言語 3
第 07 回( 2007 年 11 月 12 日)
2/50
今日の配布物
片面の用紙 1 枚
今日の課題が書かれています。
本日の出欠を兼ねています
3/50
今日やること
http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/
にアクセスすると、教材があります。
2007
年11
月12
日分と書いてある部分が、本日の教材です。
本日の内容
前回の課題の解答
インスタンス
パッケージとは
標準のメソッド その 1
4/50
前回の課題の解答
5/50
前回の課題
その1:
次のような仕様を満たすプログラムSample06h.java を
書きなさい。指定されていない部分は自由に書いて良い。アブストラクトクラス Test06a がある。
このクラス中には、アブストラクトメソッド test06a_method がある。このメ ソッドは、整数型の引数を1つ貰い、整数型の戻り値を 1つ返す。
クラス Test06b がある。
このクラスはサブクラスであり、アブストラクトメソッド Test06a をスーパー クラスにもつ。
メソッド test06a_method は、貰った整数型の値を10倍した値を返す。
クラス main の中では、
Test06b をクラスとするインスタンス dt06 を生成しなさい。
System.out.println(dt06.test06a_method(10)); を実行しなさい。
6/50
プログラム
abstract class Test06a{
abstract int test06a_method(int data);
}
class Test06b extends Test06a{
int test06a_method(int data){
return 10*data;
} }
public class Sample06h{
public static void main(String[] args){
Test06b dt06 = new Test06b();
System.out.println(dt06.test06a_method(10));
} }
abstract class Test06a{
abstract int test06a_method(int data);
}
class Test06b extends Test06a{
int test06a_method(int data){
return 10*data;
} }
public class Sample06h{
public static void main(String[] args){
Test06b dt06 = new Test06b();
System.out.println(dt06.test06a_method(10));
} }
7/50
プログラム
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract abstract abstract
abstract int int int test06a_method( int test06a_method( test06a_method( test06a_method(int int int int data); data); data); data);
}}}}
class Test06b extends Test06a{
int test06a_method(int data){
return 10*data;
} }
public class Sample06h{
public static void main(String[] args){
Test06b dt06 = new Test06b();
System.out.println(dt06.test06a_method(10));
} }
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract abstract abstract
abstract int int int int test06a_method( test06a_method( test06a_method(int test06a_method( int int data); int data); data); data);
}}}}
class Test06b extends Test06a{
int test06a_method(int data){
return 10*data;
} }
public class Sample06h{
public static void main(String[] args){
Test06b dt06 = new Test06b();
System.out.println(dt06.test06a_method(10));
} }
アブストラクトクラス
Test06a
がある。アブストラクトクラス Test06a がある。
このクラス中には、アブストラクトメ
ソッド test06a_method がある。
このメソッドは、整数型の引数を1つ
貰い、整数型の戻り値を 1つ返す。
アブストラクトメソッド
test06a_method
がある。整数型の引数を
1
つ貰う。整数型の戻り値を 返す。
8/50
プログラム
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract abstract abstract
abstract int int int test06a_method( int test06a_method( test06a_method( test06a_method(int int int int data); data); data); data);
}}}}
class Test06b extends Test06a{
class Test06b extends Test06a{
class Test06b extends Test06a{
class Test06b extends Test06a{
int int int
int test06a_method( test06a_method( test06a_method(int test06a_method( int int data){ int data){ data){ data){
return 10*data;
return 10*data; return 10*data;
return 10*data;
}}}} }}}}
public class Sample06h{
public static void main(String[] args){
Test06b dt06 = new Test06b();
System.out.println(dt06.test06a_method(10));
} }
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract class Test06a{
abstract abstract abstract
abstract int int int int test06a_method( test06a_method( test06a_method(int test06a_method( int int data); int data); data); data);
}}}}
class Test06b extends Test06a{
class Test06b extends Test06a{
class Test06b extends Test06a{
class Test06b extends Test06a{
int int int
int test06a_method( test06a_method( test06a_method( test06a_method(int int int int data){ data){ data){ data){
return 10*data;
return 10*data;
return 10*data;
return 10*data;
}}}} }}}}
public class Sample06h{
public static void main(String[] args){
Test06b dt06 = new Test06b();
System.out.println(dt06.test06a_method(10));
} }
クラス Test06b がある。
このクラスはサブクラスであり、アブスト
ラクトメソッド Test06a をスーパークラ スにもつ。
メソッド test06a_method は、貰った 整数型の値を10倍した値を返す。
Test06a
を スーパークラス にもつ、サブクラス
Test06b
メソッド
test06a_method(int data)
は、引数の
10
倍の値を返すtest06a_method(int data)
は、アブストラクトメソッドなので、
サブクラスでは必ずオーバーライドしないと いけないことに注意!
9/50
プログラム
abstract class Test06a{
abstract int test06a_method(int data);
}
class Test06b extends Test06a{
int test06a_method(int data){
return 10*data;
} }
public class Sample06h{
public class Sample06h{
public class Sample06h{
public class Sample06h{
public static void main(String[]
public static void main(String[]
public static void main(String[]
public static void main(String[] args args args args){ ){ ){ ){
Test06b Test06b Test06b
Test06b dt dt dt dt06 = new Test06b(); 06 = new Test06b(); 06 = new Test06b(); 06 = new Test06b();
System.out.
System.out. System.out.
System.out.println println println println((((dt dt dt dt06.test06a_method(10)); 06.test06a_method(10)); 06.test06a_method(10)); 06.test06a_method(10));
}}}} }}}}
abstract class Test06a{
abstract int test06a_method(int data);
}
class Test06b extends Test06a{
int test06a_method(int data){
return 10*data;
} }
public class Sample06h{
public class Sample06h{
public class Sample06h{
public class Sample06h{
public static void main(String[]
public static void main(String[]
public static void main(String[]
public static void main(String[] args args args){ args ){ ){ ){
Test06b Test06b Test06b
Test06b dt dt dt dt06 = new Test06b(); 06 = new Test06b(); 06 = new Test06b(); 06 = new Test06b();
System.out.
System.out.
System.out.
System.out.println println println((((dt println dt dt06.test06a_method(10)); dt 06.test06a_method(10)); 06.test06a_method(10)); 06.test06a_method(10));
}}}} }}}}
クラス main の中では、
Test06b をクラスとするインスタンス dt06 を生成しなさい。
System.out.println(dt06.test06 a_method(10)); を実行しなさい。
インスタンス
dt06
を生成実行すると、引数の値の
10
倍、つまり
100
が出力される10/50
前回の課題
その2:
Sample06c.java の
System.out.println("Test¥t1" + data07 + "Test 2");
の次の行から、 data01~data06までを画面に出
力する部分を書き加えなさい。その際、1つのデータ
を画面に出力するたびに、改行を行うこと。
11/50
Sample06e.java に書く加えた後
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.
System.out. System.out.
System.out.println println println println(data01); (data01); (data01); (data01);
System.out.
System.out. System.out.
System.out.println println println println(data02); (data02); (data02); (data02);
System.out.
System.out. System.out.
System.out.println println println println(data03); (data03); (data03); (data03);
System.out.
System.out. System.out.
System.out.println println println println(data04); (data04); (data04); (data04);
System.out.
System.out. System.out.
System.out.println println println println(data05); (data05); (data05); (data05);
System.out.
System.out. System.out.
System.out.println println println println(data06); (data06); (data06); (data06);
} }
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.
System.out.
System.out.
System.out.println println println(data01); println (data01); (data01); (data01);
System.out.
System.out.
System.out.
System.out.println println println(data02); println (data02); (data02); (data02);
System.out.
System.out.
System.out.
System.out.println println println(data03); println (data03); (data03); (data03);
System.out.
System.out.
System.out.
System.out.println println println(data04); println (data04); (data04); (data04);
System.out.
System.out.
System.out.
System.out.println println println(data05); println (data05); (data05); (data05);
System.out.
System.out.
System.out.
System.out.println println println(data06); println (data06); (data06); (data06);
} }
12/50
"Test¥t1" + data07 + "Test 2"
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07=' char data07=' char data07=' char data07='¥¥¥¥n'; n'; n'; n';
System.out.
System.out. System.out.
System.out.println println println println("Test ("Test ("Test ("Test¥¥¥¥t1" + data07 + "Test 2"); t1" + data07 + "Test 2"); t1" + data07 + "Test 2"); t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07=' char data07=' char data07=' char data07='¥¥¥¥n'; n'; n'; n';
System.out.
System.out.
System.out.
System.out.println println println("Test println ("Test ("Test¥¥¥¥t1" + data07 + "Test 2"); ("Test t1" + data07 + "Test 2"); t1" + data07 + "Test 2"); t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
コンソールに
と表示される。
Test 1 Test 2
data07
には¥n
が 代入されている。つまり、改行。
そのまま 表示される。
¥tはタブを意味している Test
の部分は、そのまま 表示される。
13/50
System.out.println(data01)
public class Sample06c {
public static void main(String[] args) { int int int
int data01=100; data01=100; data01=100; data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.
System.out. System.out.
System.out.println println println println(data01); (data01); (data01); (data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
public class Sample06c {
public static void main(String[] args) {
int
int int
int data01=100; data01=100; data01=100; data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.
System.out.
System.out.
System.out.println println println(data01); println (data01); (data01); (data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
コンソールに と表示される。
100
整数型の変数data01
に、100
を代入。コンソールに、
100
が 表示される。14/50
System.out.println(data02)
public class Sample06c {
public static void main(String[] args) { int data01=100;
int int int
int data02=0100; data02=0100; data02=0100; data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.
System.out. System.out.
System.out.println println println println(data02); (data02); (data02); (data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
public class Sample06c {
public static void main(String[] args) { int data01=100;
int int int
int data02=0100; data02=0100; data02=0100; data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.
System.out.
System.out.
System.out.println println println(data02); println (data02); (data02); (data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
コンソールに と表示される。
0100
と、頭に0
が64
ついているので、8
進数表記の100
。8
進数表記の100
は、10
進数表記だと64
。コンソールに、
64
が 表示される。15/50
System.out.println(data03)
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int int int
int data03=0x100; data03=0x100; data03=0x100; data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.
System.out. System.out.
System.out.println println println println(data03); (data03); (data03); (data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int int
int int data03=0x100; data03=0x100; data03=0x100; data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.
System.out.
System.out.
System.out.println println println(data03); println (data03); (data03); (data03);
System.out.println(data04);
System.out.println(data05);
System.out.println(data06);
} }
コンソールに と表示される。
0x100
と、頭に0x
が256
ついているので、16
進数表記の100
。16
進数表記の100
は、10
進数表記だと256
。コンソールに、
256
が 表示される。16/50
System.out.println(data04)
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data04=0.5; double data04=0.5;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.
System.out. System.out.
System.out.println println println println(data04); (data04); (data04); (data04);
System.out.println(data05);
System.out.println(data06);
} }
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data04=0.5;
double data04=0.5;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.
System.out.
System.out.
System.out.println println println(data04); println (data04); (data04); (data04);
System.out.println(data05);
System.out.println(data06);
} }
コンソールに と表示される。
double
型の変数0.5 data01
に、0.5
を代入。コンソールに、
0.5
が 表示される。17/50
System.out.println(data05)
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
double data05=0.5e2; double data05=0.5e2;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.
System.out. System.out.
System.out.println println println println(data05); (data05); (data05); (data05);
System.out.println(data06);
} }
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
double data05=0.5e2;
double data05=0.5e2;
double data05=0.5e2;
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.
System.out.
System.out.
System.out.println println println(data05); println (data05); (data05); (data05);
System.out.println(data06);
} }
コンソールに と表示される。
50.0 0.5e2
は指数表現。0.5
×10
2の意味。つまり、
50
。コンソールに、
50
が 表示される。18/50
System.out.println(data06)
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data06='a'; char data06='a';
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.
System.out. System.out.
System.out.println println println println(data06); (data06); (data06); (data06);
} }
public class Sample06c {
public static void main(String[] args) { int data01=100;
int data02=0100;
int data03=0x100;
double data04=0.5;
double data05=0.5e2;
char data06='a';
char data06='a';
char data06='a';
char data06='a';
char data07='¥n';
System.out.println("Test¥t1" + data07 + "Test 2");
System.out.println(data01);
System.out.println(data02);
System.out.println(data03);
System.out.println(data04);
System.out.println(data05);
System.out.
System.out.
System.out.
System.out.println println println(data06); println (data06); (data06); (data06);
} }
コンソールに と表示される。
a
文字型の変数
data06
に、文字定数
'a'
を代入。コンソールに、
a
が 表示される。19/50
前回の課題
その3:
Sample06e.java ~ Sample06g.java をコンパイ ルしようとし、その後、実行しようとしなさい。
この課題は、なぜ、そのような結果になったかを答 えなさい。
20/50
Sample06e.java について
public class Sample06e {
public static void main(String[] args){
int idt=100;
double ddt=50.2;
ddt=idt;
System.out.println(ddt);
} }
public class Sample06e {
public static void main(String[] args){
int idt=100;
double ddt=50.2;
ddt=idt;
System.out.println(ddt);
} }
コンソールに
と表示される。
100.0
整数型の変数
idt
に蓄えられた 整数値100
を、double
型の変数ddt
に代入しようとしている 情報の欠落はないので、自動的に型変換が行われ、
ddt
に100
が代入される 変数ddt
に蓄えられた値100.0
が表示される21/50
Sample06f.java について
public class Sample06e {
public static void main(String[] args){
int idt=100;
double ddt=50.2;
idt=ddt;
System.out.println(idt);
} }
public class Sample06e {
public static void main(String[] args){
int idt=100;
double ddt=50.2;
idt=ddt;
System.out.println(idt);
} }
コンパイルしよう とすると
エラーが出る
double
型の変数ddt
に蓄えられた 値50.2
を、整数型の変数idt
に代 入しようとしているこのまま代入すると、
情報の欠落が生じるので、
Java
ではコンパイル時にエラーがでる。自動型変換はされない
C
言語と違う
22/50
Sample06g.java について
public class Sample06e {
public static void main(String[] args){
int idt=100;
double ddt=50.2;
idt=(int)ddt;
System.out.println(idt);
} }
public class Sample06e {
public static void main(String[] args){
int idt=100;
double ddt=50.2;
idt=(int)ddt;
System.out.println(idt);
} }
コンソールに
と表示される。
50
初めに、
(int)ddt
が行われ、double
型の値が整数型に型変換される。情報の欠落が生じるが、明示的 に書かれた場合は、実行される。
結果、
50
という整数値になる。idt
に、整数値50
が代入される。変数
idt
に蓄えられた値
50
が 表示される23/50
インターフェース
24/50
インターフェースとは
アブストラクトメソッドだけを宣言するための機能。
インターフェース内には、定数とアブストラクトメソッド のみを記述できる。
インターフェースに基づいたクラスを書くことができる。
このことをインターフェース インターフェース インターフェース インターフェースを を を を実装 実装 実装 実装する する するという。 する
データのやり取りの方法を強制するので、インター フェースと呼ばれる。
クラスと異なり、 2 つのインターフェースを、 1 つのクラ
スに同時に実装できる。
25/50
インターフェースの書き方
書式:
interface interface interface
interface
interface名{ 文字定数の宣言 アブストラクトメソッド }interface interface interface
interface
interface名{ 文字定数の宣言 アブストラクトメソッド}
interface の中では、文字定数の宣言とアブストラクト
メソッドしか書くことができません。
26/50
インターフェースの書き方 その 2
書式:
interface interface interface
interface
interface名{ 文字定数の宣言 アブストラクトメソッド }interface interface interface
interface
interface名{ 文字定数の宣言 アブストラクトメソッド}
文字定数の宣言は
public static final 型名 文字定数名 = 初期値 ; として書きますが、インターフェース内では、
型名 文字定数名 = 初期値 ;
と省略して書くことができます。
27/50
インターフェースの書き方 その 3
書式:
interface interface interface
interface
interface名{ 文字定数の宣言 アブストラクトメソッド }interface interface interface
interface
interface名{ 文字定数の宣言 アブストラクトメソッド}
アブストラクトメソッドは
abstruct public 型名 メソッド名 ( 引数 );
として書きますが、インターフェース内では、
型名 メソッド名 ( 引数 );
と省略して書くことができます。
28/50
クラスの書き方 その 1
このインターフェースに基づいたクラスを書くことを、
インターフェースを実装すると言います。
インターフェースを実装するには、次のように書きます。
書式:
class クラス名
implements interface implements interface implements interface implements interface名 名 名 名{
省略}
class クラス名
implements interface implements interface implements interface implements interface名 名 名 名{
省略}
アブストラクトメソッドは、クラス内でオーバーライドする
必要があります。
29/50
クラスの書き方 その 2
2 つ以上のインターフェースを同時に実装できます。
書式:
class クラス名
implements interface implements interface implements interface implements interface名 名 名 名, , ,interface , interface interface名 interface 名 名{ 名
省略}
class クラス名
implements interface implements interface implements interface implements interface名 名 名 名, , , ,interface interface interface interface名 名 名 名{
省略}
, で区切って、インターフェース名を実装したいだけ繋げ ます。
30/50
クラスの書き方 その 3
クラスを継承し、さらにインターフェース実装できます。
書式:
class クラス名 extends クラス名
implements interface implements interface implements interface implements interface名 名 名 名{
省略}
class クラス名 extends クラス名
implements interface implements interface implements interface implements interface名 名 名 名{
省略}
31/50
クラスの拡張とインターフェース
クラスを拡張するとき、スーパークラスとして利用できる のは、ただ 1 つだけ。
インターフェースは、複数を同時に利用できる。
クラス その
1
クラス その2
インターフェース その
1
インターフェース その2
クラス
クラス クラス クラス クラス
普通の拡張
インターフェースは
2
つ同時でもOK
インターフェースと スーパークラスは同時 にもてる2
つのスーパークラス は持てない32/50
インターフェースの例
interface InterTest01{
double root_2 = 1.41421356;
void test01(double ddt);
}
class Test02 implements InterTest01{
public void test01(double ddt){
System.out.println(ddt*root_2);
} }
public class Sample07a{
public static void main(String[] args){
Test02 dt01 = new Test02();
dt01.test01(100.0);
} }
インターフェース インターフェース インターフェース インターフェース
インターフェースを 実装したクラス
インスタンスを生成。
メソッドを実行。
33/50
アブストラクトクラス と
インターフェース
34/50
どういうときに使うのか
クラスを作成する際に、同じメソッドを持っていて欲しい 場合等に使います。
アブストラクトクラスやインターフェースを使うことによって、
サブクラスを作る際の、メソッドの書き忘れの防止
入出力関係の統一
などが行いやすくなります。
一方、通常のクラスを拡張した場合、メソッドの書き忘れ
や、入出力関係の非統一が起きても、エラーを出してく
れないので、ミスをしやすくなります。
35/50
パッケージ
36/50
パッケージとは
パッケージとは、複数のクラスをまとめたものです。
同じ機能をもつクラスを一纏めにすることが多い。
多くのパッケージが、デフォルトで提供されている。
クラス
A
メソッド変数クラス
B
メソッド変数 パッケージA
37/50
パッケージの利用の仕方 その 1
パッケージに属するクラスを指定する場合、
のようにする。
たとえば、パッケージ Test_pkg に クラス TestClass があ り、そのクラスに基づいたインスタンス dt を生成するなら、
のように書く。
パッケージ名.クラス名 パッケージ名.クラス名
Test_pkg.TestClass dt = new Test_pkg.TestClass;
Test_pkg.TestClass dt = new Test_pkg.TestClass;
38/50
あるパッケージに属するクラスを利用したい場合、
プログラムの先頭部分に
のように書くと、それ以後、パッケージ名を省略できる。
たとえば、プログラムの先頭に
と書いておくと、パッケージ Test_pkg の クラス TestClass に基づいたインスタンス dt を生成するとき、
とだけ書けば良くなる。
パッケージの利用の仕方 その 2
import Test_pkg.TestClass;
import Test_pkg.TestClass;
TestClass dt = new TestClass;
TestClass dt = new TestClass;
import パッケージ名.クラス名;
import パッケージ名.クラス名;
39/50
あるパッケージに属する複数のクラスを利用したい場合、
まとめて import することができる。その場合は、
のように書くと、それ以後、パッケージ名を省略できる。
プログラムに何も書かなくても、デフォルトで、 java.lang というパッケージが import される。
java.lang には、 Math や System 等々のクラスが含ま れている。
パッケージの利用の仕方 その 3
import パッケージ名.*;
import パッケージ名.*;
System.out.println()
のSystem
は、これ。つまり、パッケージから全部きちんと書くと、
java.lang.System.out.println()
になる。40/50
標準のメソッド
Java には、便利なパッケージ(とメソッド)が、最初から準 備されています。
それらのものは、クラスメソッドになっているものが多い です。つまり、インスタンスを生成することなく、
パッケージ名 . クラス名 . メソッド名 ( 引数 )
として利用できます。
41/50
標準のメソッド その 1 数学処理メソッド
42/50
Math クラス
数式処理を行うメソッドと、数学で出てくる定数を含んだ クラスです。
このクラスは、パッケージ java.lang に含まれています。
前に書いたとおり、 java.lang は、使用する際に、 import する必要はありません。
ほとんどのメソッドは、
戻り値は double 型
引数は double 型
です。
43/50
Math クラスの定数
ddt=Math.PI 円周率πに近いdouble型の値
PI
ddt=Math.E 自然対数の底eに近いdouble型の値
E
例 意味
記法
今回の表の中では、パッケージ名とクラス名は省略し、
メンバ名のみを表記しています。使用するときは、
Math.E
クラス名 メンバ名 のようにします。
44/50
Math クラスのメソッド その 1
static double static double static double static double static double static double 戻り値
引数の角度のタンジェントを返す tan(double a)
引数の角度のサインを返す sin(double a)
引数の角度のコサインを返す cos(double a)
引数の角度のアークサインを、
-π/2~π/2の間で返す asin(double a)
引数の角度のアークコサインを、
0~πの間で返す acos(double a)
引数の角度のアークタンジェントを、
-π/2~π/2の間で返す atan(double a)
意味 記法
45/50
Math クラスのメソッド その 2
引数の小数点以下を切り捨てした 値を返す
floor(double a) static double
static int static float static double static double 戻り値
引数のint 値の絶対値を返す abs(int a)
引数のfloat 値の絶対値を返す abs(float a)
引数のdouble 値の絶対値を返す abs(double a)
引数の小数点以下を切り上げした 値を返す
ceil(double a)
意味 記法
46/50
Math クラスのメソッド その 3
引数の10を底とした 対数の値を返す log10(double a)
static double
引数の自然対数の値を返す log(double a)
static double
static double static double static double static double static double static double 戻り値
自然対数の値を返す log(doublea)
オイラー数eのa乗を返す exp(double a)
1つめの引数を2つめの引数 で累乗した値を返す
pow(double a, double b)
引数の平方恨の値を返す sqrt(double a)
自然対数の値を返す log(double a)
自然対数の値を返す log(double a)
意味 記法
47/50
Math クラスのメソッド その 4
min(inta, int b) static int
max(inta, int b) static int
static long static float static double static long static float static double 戻り値
2つの引数のうち、
小さい方を返す。
min(double a, double b) max(long a, long b) max(float a, float b)
2つの引数のうち、
大きい方を返す max(double a, double b)
min(long a, long b) min(float a, float b)
意味 記法
48/50
Math クラスのメソッド その 5
引数に最も近いint型の値を 返します
round(float a) static int
引数に最も近いlong型の値 を返します
round(double a) static long
0.0以上で1.0より小さい double型の値を返します random()
static double
引数を四捨五入した値を返 します
rint(double a) static double
戻り値 記法 意味
49/50
Math クラスのメソッド
より詳細な内容は、 Sun の web サイト を参照すると良いでしょう。
Sun の web サイト
には、他の多くのクラスの説明も書かれています。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Math.html
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/
50/50
サンプルプログラム
public class Sample07c {
public static void main(String[] args) { System.out.println(Math.E);
System.out.println(Math.sqrt(20.5));
System.out.println(Math.pow(5,3));
System.out.println(Math.log(5));
System.out.println(Math.cos(Math.PI/4));
System.out.println(Math.ceil(20.6));
System.out.println(Math.max(10.2,20.5));
} }
public class Sample07c {
public static void main(String[] args) { System.out.println(Math.E);
System.out.println(Math.sqrt(20.5));
System.out.println(Math.pow(5,3));
System.out.println(Math.log(5));
System.out.println(Math.cos(Math.PI/4));
System.out.println(Math.ceil(20.6));
System.out.println(Math.max(10.2,20.5));
} }