開発メモ/Java/初心者向けJava講座
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*Java初心者向け講座 [#jd148759]
間違ってたら指摘してくださいm(_ _)m
#contents
*序章 [#d59d8073]
**Javaって何さ [#oc9d3d8a]
Sun Microsystems(現Oracle)が開発した言語です。~
VM(仮想マシン)上で動かすことで、様々なプラットフォームで...
しかし、PC向け、モバイル向け等のSDKが出ているのですべての...
また、VMの違いによって、動作が異なる場合があります。~
ちなみに、JavaScriptという言語もあるが、「Java」とついて...
~
余談ですが、稀に書店などでJavaとJavaScriptの専門書が一緒...
**Javaの種類 [#pcc92416]
|種類|概要|h
|J2SE|一般的なSDKになります。Windows等でJavaアプリを開発...
|J2ME|モバイル向けのSDKです。フューチャーフォン向けとして...
|J2EE|J2SEに電商取引などのサーバー処理を行う為の機能を追...
**開発環境 [#a3e11b00]
最低でもJDKとコンソール、あとテキストエディタがあれば開発...
定番はEclipse。~
なので、Eclipseを使うことを前提に話を進めます。
**クラスと変数とメソッド [#sbbfa6aa]
クラスというのは、機能(メソッド)や情報(変数)を詰め込んだ...
たとえば、車にはハンドルやアクセルといった「機能するもの...
メソッドは、ハンドルやアクセルといった「機能するもの」の...
変数は速度やガソリンの量といった「情報」のようなものです。^
**パッケージ [#u2084af7]
パッケージはクラスをまとめる名前のようなものです。~
パッケージは階層化され管理します。~
*第一章 一番簡単なJavaプログラム [#e49eaee0]
**「Hello World!」 [#a9c8c7c8]
一番簡単なプログラムは「Hello World!」を表示するプログラ...
この言葉、プログラムを勉強するときにかなりの確率で遭遇す...
まぁ、それはいいとして、さっそくコードを書いてみましょう。
#codeprettify{{
package jaghama.sample01_1;
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
}}
まず、main()メソッドですが、これはJavaのプログラムが動い...
ただし、Web系やAndroidではmain()メソッドはありません。~
System.out.println("Hello World!");
これは、文字を出力する処理になります。~
実行するとコンソールに"Hello World!"が出力されます。
**変数を使った「Hello World!」 [#y6413230]
変数を使ってみます。
#codeprettify{{
package jaghama.sample01_2;
class HelloWorld{
public static void main(String[] args){
String helloWorld = "Hello World!";
System.out.println(helloWorld);
}
}
}}
実行してみると、同じようにコンソールに"Hello World!"が出...
Stringとはクラスで、文字列を扱うクラスです。~
Stringクラスは文字列を扱うための機能を持っています。~
その機能に関してはこのあと扱っていきます。
*第2章 数値の計算 [#sbfee3c6]
数字の計算を行うのも簡単にできます。
#codeprettify{{
package jaghama.sample02_1;
class Calculation{
public static void main(String[] args){
int a = 1;
int b = 2;
int sum = a + b;
System.out.println(a + "+" + b + "=" + sum);
}
}
}}
intは整数を扱う型です。~
変数aと変数bを足して、変数sumにその結果を格納しています。~
あとは、Hello World!の時のようにSystem.out.println()メソ...
Javaにかかわらず、プログラムでは計算に+,-,*,/を使います。~
これらを演算子といいます。~
|演算子|意味|h
|+|足し算|
|-|引き算|
|*|掛け算|
|/|割り算|
|%|余り|
また、int型以外にも数値を扱う型が有ります。
|型|意味|h
|boolean|真偽値を扱う型。true,falseを値として格納|
|byte|8ビット符号付き整数。扱える数は-2^7(-128)~2^7-1(12...
|char|16Bit Unicodeキャラクターデータ|
|short|16ビット符号付き整数。扱える数は-2^15(-32768)~2^1...
|int|32ビット符号付き整数。扱える数は-2^31(-2147483648)~...
|long|64ビット符号付き整数。扱える数は-2^63(-922337203685...
|float|32ビット符号付き浮動小数点数|
|double|64ビット符号付き浮動小数点数|
*第3章 文字列の扱い [#p7a93c3b]
**文字列を結合する [#e6bce67f]
文字列を結合する場合、以下のように記述できます。
#codeprettify{{
package jaghama.sample03_01;
public class StringFunc {
public static void main(String[] args) {
String a = "A";
String b = "B";
String ab = a + b;
System.out.println(ab);
}
}
}}
変数aと変数bに格納された文字を変数abに結合して格納します。~
実行すると、コンソールには"ab"と表示されます。~
ただし、この書き方は実はJavaでは推奨されません。~
文字列を結合する場合、StringBufferクラスやStringBuilderク...
StringBufferクラスとStringBuilderクラスは提供される機能は...
同期化はスレッドなどで並列で非同期に処理を行う場合に意識...
今回は、StringBufferクラスを使ってみます。~
#codeprettify{{
package jaghama.sample03_02;
public class StringFunc {
public static void main(String[] args) {
String a = "A";
String b = "B";
StringBuffer sb = new StringBuffer();
sb.append(a);
sb.append(b);
System.out.println(sb.toString());
}
}
}}
行数が増えてしまいましたが、実行すると、StringBufferクラ...
*第4章 new [#v96acf0c]
**オブジェクトとインスタンス [#qab73521]
本などを読むとオブジェクトやインスタンスという言葉を見か...
意味合い的には
-オブジェクト=型やクラス
-インスタンス=オブジェクトを利用可能な形にしたもの
というようになります。~
**newの使い方 [#wb87c54e]
第3章でStringBufferクラスの変数を宣言したときに、newとい...
newとは、新しいインスタンスを作りますという宣言です。~
変数を使う場合、クラスから変数を宣言する場合にはnewでイン...
Stringクラスの場合、代入することでインスタンスが自動的に...
プログラムで変数を扱う場合、変数を格納する領域をメモリ上...
newはその領域を確保する意味を持ちます。~
わかりやすく言うと、newしていない状態は、倉庫の建築予定地...
予定地に物を入れることができなければ、電話もないので連絡...
既に倉庫ができていれば、ものを入れられますし、電話があれ...
その為、newせずにメソッドにアクセスすると、エラーになりま...
(その前にビルドエラーになると思いますが・・・)~
試に以下のソースを入力して、ビルドしてみてください。~
エラーになります。~
#codeprettify{{
package jaghama.sample04_01;
public class NewClass {
public static void main(String[] args) {
Object obj1 = new Object();
Object obj2;
//↓これはエラーにならない
obj1.toString();
//↓これはエラーになる
obj2.toString();
}
}
}}
**インスタンスの解放 [#k756da49]
JavaではC/C++のようにnewしたものを解放しなくてもガベージ...
ただし、何らかのインスタンスで保持し続けたりすると、GCが...
Javaはメモリ管理を行わなくてもよいといわれることがありま...
GCはVMが自動的に行う為、メモリの解放タイミングを自分で制...
ただし、利用した変数にnullを設定することで、GCの対象とな...
強制的にGCを呼び出すこともできますが、推奨されませんので...
*第5章 ファイルアクセス [#q3f97666]
**Fileクラス [#b33a4df1]
Fileクラスはパスやファイルの権限等を扱うクラスです。~
ファイルの情報を参照してみましょう。~
#codeprettify{{
package jaghama.sample05_01;
import java.io.File;
public class FileRef {
public static void main(String[] args) {
File f = new File("test.txt");
System.out.println("Name : " + f.getName());
System.out.println("Length : " + f.length());
System.out.println("isDirectory : " + f.isDirecto...
System.out.println("isFile : " + f.isFile());
}
}
}}
実行すると、ファイルの名前、サイズ、ディレクトリかどうか...
このほかにも、ファイルを削除したり、ディレクトリを指定し...
**import [#v83b1e45]
importというキーワードがソース上に出てきましたが、これは...
利用したいクラス(java.langパッケージのクラスを除く)をimpo...
import java.io.*;とすると、java.ioパッケージのすべてのク...
ただし、こうすると、ビルドが遅くなることがあります。~
その為、importに書く場合は、必ずフルパッケージ名(パッケー...
**ファイルの読み込み [#vcc9d32e]
ファイルを読み込む場合は、Readerクラス、InputStreamクラス...
個人的にInputStreamクラスが好きなので、InputStreamクラス...
#codeprettify{{
package jaghama.sample05_02;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileRead {
public static void main(String[] args) {
File f = new File("test.txt");
// ファイルを読み込むストリーム
FileInputStream fis = null;
// byte配列を書き込むストリーム
ByteArrayOutputStream baos = new ByteArrayOutputS...
// 読み込んだ内容を保持する配列
byte[] buff = new byte[1024];
long len = 0;
try {
// FileInputStreamクラスのインスタンスを生成
fis = new FileInputStream(f);
do{
// ファイルから読み込む
len = fis.read(buff);
// ByteArrayOutputStreamに書き込む
baos.write(buff, 0, (int)len);
//読み込んだ長さが1024なら継続する
}while(len == 1024);
// byte配列から文字列を生成する
String str = new String(baos.toByteArray());
System.out.println(str);
} catch (FileNotFoundException e) {
// ファイルがない場合に発生するFileNotFoundEx...
e.printStackTrace();
} catch (IOException e) {
// そのほかのI/O系の例外をキャッチする
e.printStackTrace();
} finally {
// 例外が発生してもしなくても必ず最後に行う処理
if(fis != null){
try {
// ストリームを閉じる
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
fis = null;
}
}
}
}
}}
基本的な流れはFile()インスタンスを作って、作ったインスタ...
で、ファイルを読み込むわけですが、ファイルを一定サイズで...
これは、byte配列をストリームに書き込んでおいて、後でbyte...
ファイルサイズが小さいものはこんなことしなくてもいいんで...
これらの処理を囲うようにtry~catch~finallyがありますが、...
try~catch~finallyについては後程説明します。~
~
**try~catch~finally [#g5819c1b]
Javaに限らず、C++やC#なんかでも問題があったりすると、例外...
問題が発生した場合に対処する必要があり、その対処を行う為...
tryの{}の中が例外が発生する箇所、catch{}の中が例外を処理...
finallyは例外が発生してもしなくても行いたい処理を記述する...
この例の場合、例外が発生してもしなくてもBufferedInputStre...
catchの()の中には、キャッチしたい例外のクラスを記述します...
発生する例外ごとにcatchは記述することが大切です。~
catch(Exception e)と書けますが、この場合、すべての例外を...
便利ですが、どの例外に対して対処したいのかが不透明になり...
その為、catchは発生しうる例外ごとに記述するほうが望ましい...
**ファイルの書き込み [#jaad3834]
*参考 [#j04f5985]
-サイト
--[[J2SE 6 API 仕様>http://java.sun.com/javase/ja/6/docs/...
--[[Java言語規定(日本語訳)>http://www.y-adagio.com/public...
-書籍
--[[独習Java>http://www.amazon.co.jp/独習Java-第4版-ジョ...
終了行:
*Java初心者向け講座 [#jd148759]
間違ってたら指摘してくださいm(_ _)m
#contents
*序章 [#d59d8073]
**Javaって何さ [#oc9d3d8a]
Sun Microsystems(現Oracle)が開発した言語です。~
VM(仮想マシン)上で動かすことで、様々なプラットフォームで...
しかし、PC向け、モバイル向け等のSDKが出ているのですべての...
また、VMの違いによって、動作が異なる場合があります。~
ちなみに、JavaScriptという言語もあるが、「Java」とついて...
~
余談ですが、稀に書店などでJavaとJavaScriptの専門書が一緒...
**Javaの種類 [#pcc92416]
|種類|概要|h
|J2SE|一般的なSDKになります。Windows等でJavaアプリを開発...
|J2ME|モバイル向けのSDKです。フューチャーフォン向けとして...
|J2EE|J2SEに電商取引などのサーバー処理を行う為の機能を追...
**開発環境 [#a3e11b00]
最低でもJDKとコンソール、あとテキストエディタがあれば開発...
定番はEclipse。~
なので、Eclipseを使うことを前提に話を進めます。
**クラスと変数とメソッド [#sbbfa6aa]
クラスというのは、機能(メソッド)や情報(変数)を詰め込んだ...
たとえば、車にはハンドルやアクセルといった「機能するもの...
メソッドは、ハンドルやアクセルといった「機能するもの」の...
変数は速度やガソリンの量といった「情報」のようなものです。^
**パッケージ [#u2084af7]
パッケージはクラスをまとめる名前のようなものです。~
パッケージは階層化され管理します。~
*第一章 一番簡単なJavaプログラム [#e49eaee0]
**「Hello World!」 [#a9c8c7c8]
一番簡単なプログラムは「Hello World!」を表示するプログラ...
この言葉、プログラムを勉強するときにかなりの確率で遭遇す...
まぁ、それはいいとして、さっそくコードを書いてみましょう。
#codeprettify{{
package jaghama.sample01_1;
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
}}
まず、main()メソッドですが、これはJavaのプログラムが動い...
ただし、Web系やAndroidではmain()メソッドはありません。~
System.out.println("Hello World!");
これは、文字を出力する処理になります。~
実行するとコンソールに"Hello World!"が出力されます。
**変数を使った「Hello World!」 [#y6413230]
変数を使ってみます。
#codeprettify{{
package jaghama.sample01_2;
class HelloWorld{
public static void main(String[] args){
String helloWorld = "Hello World!";
System.out.println(helloWorld);
}
}
}}
実行してみると、同じようにコンソールに"Hello World!"が出...
Stringとはクラスで、文字列を扱うクラスです。~
Stringクラスは文字列を扱うための機能を持っています。~
その機能に関してはこのあと扱っていきます。
*第2章 数値の計算 [#sbfee3c6]
数字の計算を行うのも簡単にできます。
#codeprettify{{
package jaghama.sample02_1;
class Calculation{
public static void main(String[] args){
int a = 1;
int b = 2;
int sum = a + b;
System.out.println(a + "+" + b + "=" + sum);
}
}
}}
intは整数を扱う型です。~
変数aと変数bを足して、変数sumにその結果を格納しています。~
あとは、Hello World!の時のようにSystem.out.println()メソ...
Javaにかかわらず、プログラムでは計算に+,-,*,/を使います。~
これらを演算子といいます。~
|演算子|意味|h
|+|足し算|
|-|引き算|
|*|掛け算|
|/|割り算|
|%|余り|
また、int型以外にも数値を扱う型が有ります。
|型|意味|h
|boolean|真偽値を扱う型。true,falseを値として格納|
|byte|8ビット符号付き整数。扱える数は-2^7(-128)~2^7-1(12...
|char|16Bit Unicodeキャラクターデータ|
|short|16ビット符号付き整数。扱える数は-2^15(-32768)~2^1...
|int|32ビット符号付き整数。扱える数は-2^31(-2147483648)~...
|long|64ビット符号付き整数。扱える数は-2^63(-922337203685...
|float|32ビット符号付き浮動小数点数|
|double|64ビット符号付き浮動小数点数|
*第3章 文字列の扱い [#p7a93c3b]
**文字列を結合する [#e6bce67f]
文字列を結合する場合、以下のように記述できます。
#codeprettify{{
package jaghama.sample03_01;
public class StringFunc {
public static void main(String[] args) {
String a = "A";
String b = "B";
String ab = a + b;
System.out.println(ab);
}
}
}}
変数aと変数bに格納された文字を変数abに結合して格納します。~
実行すると、コンソールには"ab"と表示されます。~
ただし、この書き方は実はJavaでは推奨されません。~
文字列を結合する場合、StringBufferクラスやStringBuilderク...
StringBufferクラスとStringBuilderクラスは提供される機能は...
同期化はスレッドなどで並列で非同期に処理を行う場合に意識...
今回は、StringBufferクラスを使ってみます。~
#codeprettify{{
package jaghama.sample03_02;
public class StringFunc {
public static void main(String[] args) {
String a = "A";
String b = "B";
StringBuffer sb = new StringBuffer();
sb.append(a);
sb.append(b);
System.out.println(sb.toString());
}
}
}}
行数が増えてしまいましたが、実行すると、StringBufferクラ...
*第4章 new [#v96acf0c]
**オブジェクトとインスタンス [#qab73521]
本などを読むとオブジェクトやインスタンスという言葉を見か...
意味合い的には
-オブジェクト=型やクラス
-インスタンス=オブジェクトを利用可能な形にしたもの
というようになります。~
**newの使い方 [#wb87c54e]
第3章でStringBufferクラスの変数を宣言したときに、newとい...
newとは、新しいインスタンスを作りますという宣言です。~
変数を使う場合、クラスから変数を宣言する場合にはnewでイン...
Stringクラスの場合、代入することでインスタンスが自動的に...
プログラムで変数を扱う場合、変数を格納する領域をメモリ上...
newはその領域を確保する意味を持ちます。~
わかりやすく言うと、newしていない状態は、倉庫の建築予定地...
予定地に物を入れることができなければ、電話もないので連絡...
既に倉庫ができていれば、ものを入れられますし、電話があれ...
その為、newせずにメソッドにアクセスすると、エラーになりま...
(その前にビルドエラーになると思いますが・・・)~
試に以下のソースを入力して、ビルドしてみてください。~
エラーになります。~
#codeprettify{{
package jaghama.sample04_01;
public class NewClass {
public static void main(String[] args) {
Object obj1 = new Object();
Object obj2;
//↓これはエラーにならない
obj1.toString();
//↓これはエラーになる
obj2.toString();
}
}
}}
**インスタンスの解放 [#k756da49]
JavaではC/C++のようにnewしたものを解放しなくてもガベージ...
ただし、何らかのインスタンスで保持し続けたりすると、GCが...
Javaはメモリ管理を行わなくてもよいといわれることがありま...
GCはVMが自動的に行う為、メモリの解放タイミングを自分で制...
ただし、利用した変数にnullを設定することで、GCの対象とな...
強制的にGCを呼び出すこともできますが、推奨されませんので...
*第5章 ファイルアクセス [#q3f97666]
**Fileクラス [#b33a4df1]
Fileクラスはパスやファイルの権限等を扱うクラスです。~
ファイルの情報を参照してみましょう。~
#codeprettify{{
package jaghama.sample05_01;
import java.io.File;
public class FileRef {
public static void main(String[] args) {
File f = new File("test.txt");
System.out.println("Name : " + f.getName());
System.out.println("Length : " + f.length());
System.out.println("isDirectory : " + f.isDirecto...
System.out.println("isFile : " + f.isFile());
}
}
}}
実行すると、ファイルの名前、サイズ、ディレクトリかどうか...
このほかにも、ファイルを削除したり、ディレクトリを指定し...
**import [#v83b1e45]
importというキーワードがソース上に出てきましたが、これは...
利用したいクラス(java.langパッケージのクラスを除く)をimpo...
import java.io.*;とすると、java.ioパッケージのすべてのク...
ただし、こうすると、ビルドが遅くなることがあります。~
その為、importに書く場合は、必ずフルパッケージ名(パッケー...
**ファイルの読み込み [#vcc9d32e]
ファイルを読み込む場合は、Readerクラス、InputStreamクラス...
個人的にInputStreamクラスが好きなので、InputStreamクラス...
#codeprettify{{
package jaghama.sample05_02;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileRead {
public static void main(String[] args) {
File f = new File("test.txt");
// ファイルを読み込むストリーム
FileInputStream fis = null;
// byte配列を書き込むストリーム
ByteArrayOutputStream baos = new ByteArrayOutputS...
// 読み込んだ内容を保持する配列
byte[] buff = new byte[1024];
long len = 0;
try {
// FileInputStreamクラスのインスタンスを生成
fis = new FileInputStream(f);
do{
// ファイルから読み込む
len = fis.read(buff);
// ByteArrayOutputStreamに書き込む
baos.write(buff, 0, (int)len);
//読み込んだ長さが1024なら継続する
}while(len == 1024);
// byte配列から文字列を生成する
String str = new String(baos.toByteArray());
System.out.println(str);
} catch (FileNotFoundException e) {
// ファイルがない場合に発生するFileNotFoundEx...
e.printStackTrace();
} catch (IOException e) {
// そのほかのI/O系の例外をキャッチする
e.printStackTrace();
} finally {
// 例外が発生してもしなくても必ず最後に行う処理
if(fis != null){
try {
// ストリームを閉じる
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
fis = null;
}
}
}
}
}}
基本的な流れはFile()インスタンスを作って、作ったインスタ...
で、ファイルを読み込むわけですが、ファイルを一定サイズで...
これは、byte配列をストリームに書き込んでおいて、後でbyte...
ファイルサイズが小さいものはこんなことしなくてもいいんで...
これらの処理を囲うようにtry~catch~finallyがありますが、...
try~catch~finallyについては後程説明します。~
~
**try~catch~finally [#g5819c1b]
Javaに限らず、C++やC#なんかでも問題があったりすると、例外...
問題が発生した場合に対処する必要があり、その対処を行う為...
tryの{}の中が例外が発生する箇所、catch{}の中が例外を処理...
finallyは例外が発生してもしなくても行いたい処理を記述する...
この例の場合、例外が発生してもしなくてもBufferedInputStre...
catchの()の中には、キャッチしたい例外のクラスを記述します...
発生する例外ごとにcatchは記述することが大切です。~
catch(Exception e)と書けますが、この場合、すべての例外を...
便利ですが、どの例外に対して対処したいのかが不透明になり...
その為、catchは発生しうる例外ごとに記述するほうが望ましい...
**ファイルの書き込み [#jaad3834]
*参考 [#j04f5985]
-サイト
--[[J2SE 6 API 仕様>http://java.sun.com/javase/ja/6/docs/...
--[[Java言語規定(日本語訳)>http://www.y-adagio.com/public...
-書籍
--[[独習Java>http://www.amazon.co.jp/独習Java-第4版-ジョ...
ページ名: