Java
Java のダウンロード
Java Runtime Environment (JRE)
実行環境のみ
ブラウザ上でJava環境を整える
http://www.java.com/ja/download/Java SE Development Kit (JDK)
JAVA開発環境 (JRE含む)
http://java.sun.com/javase/downloads/index.jsp JREのダウンロード http://java.sun.com/j2se/1.4.2/ja/download.htmlJavaコードを書く
新規テキストファイルをHello.javaのようなファイル名に変更する。
テキストエディタで以下のように記述
//Hello.java import java.io.*; class Hello{ public static void main(String[] args){ System.out.println("Hello"); } }
コンパイラ
Hello.classを生成する
javac Hello.java
実行
.classを実行する
java Hello
逆コンパイラ
バイナリの.javaをテキストの.classに変換する
2009年の資料なし
eclipseで実行可能なファイル(.jarおよび.exe)を作成する方法
JAR(ジャー)ファイルの作成
→eclipse
→ファイル
→エクスポート
→Java
→JARファイル
→エクスポートするプロジェクトにチェック
→エクスポート先を選択 ファイル名(test.jar等)
→次へ →次へ(終了は押さない)
→マニフェスト・ファイルにチェックが入っていることを確認
→メイン・クラスに最初に実行したいjavaファイルを選択(Main等)
→終了
→OK
※イメージ画像等は作成するJARファイルと同じ階層へ
EXE(エグゼ)ファイルの作成
→ウェブ上(こちら等)からexewrap.exeをダウンロードしてくる
→コマンドプロンプトを起動
→jarファイルのある階層へ移動(cd ../やcd User等コマンド実行)
→exewrap.exeもその階層へ移動しておく
→コマンド『exewrap.exe -g test.jar』(test.jarにはexeにしたいjarを入力)
→実行ファイル完成
※Windows only
自己実行型JARファイル
.exeと同じように単体で機能するjarファイルを生成する
(手動でマニフェストファイルを作成する場合)
MANIFEST.MF をテキストファイルで作成する
Manifest-Version: 1.0 Main-Class: Hello
jar cvfm Hello.jar MANIFEST.MF *.java *.class
ただし.jar型ではJavaがインストールされているPCでしか動作しない。
完全に独立したexeにラップしたい場合はJSmoothやexewrapを利用する。
http://sourceforge.net/projects/jsmooth/ http://www.ne.jp/asahi/web/ryo/exewrap/exewrapを使ってjarをexeに変換
解凍したexewrap.exeを%JAVA_HOME%\binにコピー。
コマンドプロンプトを起動し、以下のコマンドを実行。
-gオプションをつけることでコマンドコンソール窓を非表示にできる
exewrap -g sample.jar
コード
型
boolean b = true // or false byte by = 127; short s = 32767; int i = 2147483647; float f = 2147.483647; String str = "aaaaa";
標準出力
class StringTest{ public static void main(String args[]){ System.out.println("Hello"); } }
制御構文
繰り返しと条件分岐
for (int i=0; i<9; i++){ if(i == 1){ System.out.println("start"); } else if (i < 5){ System.out.println(i); } else { break; } }
文字列と配列
StringTest.java
class StringTest{ static String str = "あいうえお"; static String list[] = { "1", "two", "three", }; public static void main(String args[]){ System.out.println("Hello"); System.out.println(str); System.out.println(list[2]); } }
出力結果
あいうえお Hello three
キャスト
型やクラスの変換
int n = 1234; long m = (long)n;
クラスの作成
Rectangle.java
class Rectangle{ double x;//位置x double y;//位置y double w;//幅x double h;//高さy public Rectangle(){ System.out.println("Rectangle create default"); } public Rectangle(double m_x, double m_y , double m_w , double m_h ){ System.out.println("Rectangle create custom"); x = m_x; y = m_y; w = m_w; h = m_h; } public double calcArea(){ return w * h; } }
Test.java
import java.io.*; class Test{ public static void main(String[] args){ Rectangle my_rec = new Rectangle(50, 20, 40, 60); System.out.println("x: " + my_rec.x); System.out.println("面積: " + my_rec.calcArea()); } }
クラスの継承
- スーパークラスは1つしか持てない
- 継承の階層はいくつでも持てる
- メンバ変数, メソッドは継承される
- コンストラクタは継承されない
class AnimalDemo{ public static void main(String args[]){ AnimalDog dog = new AnimalDog(); AnimalCat cat = new AnimalCat(); dog.walk(); dog.cry(); cat.walk(); cat.cry(); } }親クラス Animal
class Animal{ String footstep = new String ("テケテケ"); void walk(){ System.out.println(footstep); } }子クラスが親のスーパークラスAnimalをextendsで継承
class AnimalDog extends Animal{ String call = new String ("ワン"); void cry(){ System.out.println(call); } }
class AnimalCat extends Animal{ String call = new String ("ニャン"); void cry(){ System.out.println(call); } }出力
テケテケ ワン テケテケ ニャン
オーバーロード
異なる引数を持つ同名のメソッドを定義する
public void print(int i){ System.out.println(i); } public void print(String str){ System.out.println(str); } public void print(String str, int i){ for(int j=0; L>I; j++){ System.out.println(str); } }
オーバーライド
継承されたクラスでメソッドの定義を上書きする
親クラス Animalclass Animal{ String footstep = new String ("テケテケ"); public void walk(){ System.out.println(footstep); } }メソッドwalk()を別の処理として上書きしている
class AnimalDog extends Animal{ String call = new String ("ワン"); public void walk(){ System.out.println("タタタタ"); } }
インタフェース
必ず実装すべきメソッドや型を定義する。
インターフェイス内のメソッドはabstract 宣言と public 宣言が自動的に付けられる。
インターフェイスが実装されたクラスは、インターフェイス名で指定された抽象メソッドを実装することが義務付けられる。
//InterfaceTest.java interface InterfaceSample { public abstract void methodA(String msg); public abstract void methodB(int x); } class InterfaceTest implements InterfaceSample { public static void main(String[] args) { InterfaceTest o = new InterfaceTest(); o.methodA("ABC"); o.methodB(123); } public void methodA(String msg) { System.out.println(msg); } public void methodB(int x) { System.out.println(x); } }
String 文字列操作
class StringTest{ public static void main(String args[]){ String str1 = new String("Hello World"); String str2 = new String("いろはにほへと"); String str3 = new String("れいむ,まりさ,さくや"); System.out.println(str1 + " 文字長:" + str1.length()); System.out.println(str1 + " 部分文字列:" + str1.substring(2,5)); System.out.println(str1 + " 大文字変換:" + str1.toUpperCase()); //文字列を分割 String[] array = str3.split(","); System.out.println( " 配列要素:" + array[1]); //最初に該当した文字列を置換 System.out.println(str1.replaceFirst("l", "r")); //該当した全ての文字列を置換 System.out.println(str1.replaceAll("l", "r")); } }
Math 数学関数
class MathTest{ public static void main(String args[]){ int x = -8; int y = 4; double d = 1.024; float f = 2560000; System.out.println("x:" + x + " y:" + y); System.out.println("足し算 x+y:" + (x+y)); System.out.println("引き算 x-y:" + (x-y)); System.out.println("掛け算 x*y:" + (x*y)); System.out.println("割り算 x/y:" + (x/y)); System.out.println(x); System.out.println("絶対値:" + Math.abs(x)); System.out.println("数値比較 大取得:" + Math.max(x, y)); System.out.println("数値比較 小取得:" + Math.min(x, y)); System.out.println("累乗: " + x + "^" + y + "=" + Math.pow(x, y)); System.out.println("平行根: " + Math.sqrt(y)); System.out.println("立方根: " + Math.cbrt(x)); System.out.println("切り上げ: " + Math.ceil(d)); System.out.println("切捨て: " + Math.floor(d)); System.out.println("四捨五入: " + Math.round(d)); } }
Calendar 日付関数
import java.util.Calendar; class CalendarTest{ public static void main(String args[]){ String[] week_name = {"日", "月", "火", "水", "木", "金", "土"}; Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DATE); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; int day_of_year = calendar.get(Calendar.DAY_OF_YEAR); System.out.println("現在の日時は"); System.out.println(year + "年" + month + "月" + day + "日"); System.out.println("(" + week_name[week] + ")"); System.out.println(hour + "時" + minute + "分" + second + "秒"); System.out.println("今日は今年の" + day_of_year + "日目"); } }
ファイルの入力
import java.io.File; File file = new File("test.txt");
ゲッター・セッター
クラスの持つ変数をプライベート宣言した場合、クラス内部の変数を取得、代入するために専用のメソッドをクラス内に用意する。
class Peason{ private int age; private String name; public Peason(int age_, String name_){ age = age_; name = name_; } public void setAge(int age_){ age = age_; } public void setString(String name_){ name = name_; } public int getAge(){ return age; } public String getString(){ return name; } }
スレッド
平行して処理を行う
class ThreadTest extends Thread{ public void run() { for(int i = 1; i <= 5; i++) { System.out.println(getName() + ":" + i); try { sleep(1); } catch (InterruptedException e) { } } } public static void main(String[] args){ ExThread1 thread1 = new ExThread1(); ExThread1 thread2 = new ExThread1(); thread1.start(); thread2.start(); } }
Thread-0:1 Thread-1:1 Thread-0:2 Thread-1:2 Thread-0:3 Thread-1:3 Thread-0:4 Thread-1:4 Thread-0:5 Thread-1:5
アサーション
仕様を明示する。チェックして条件を満たしているか、
例: この時点では絶対値になっているはず、と確認する。このソース上では絶対値に変換する命令がコメントアウトされているため、アサーションチェックモードでエラーが起きる。
class Main{ public static void main(String[] args){ int i = -9; //i = Math.abs(i); assert isAbs(i); System.out.println(i); } public static boolean isAbs(int i){ if(i > 0){ return true; } return false; } }
javac Main.java java -ea Main (アサーションを有効にするオプションをつけて実行する) Exception in thread "main" java.lang.AssertionError at Main.main(Main.java:4)
Swing GUIプログラミング
Eclipce
JAVAの総合開発環境
http://eclipsewiki.net/eclipse/netBeans
JAVAの総合開発環境
http://ja.netbeans.org/