1991 SunMicrosystems 18ヶ月掛けて作成された。Oakと呼ばれた。
1995 Javaに改名。すぐに広まったのだ。
Java2ではJVMにJIT(JusInTime)コンパイラが組み込まれた。
Windows型のアプリケーションもある。(javaw.exe で実行する)
AWT(Java Abstruct Windowing Toolkit)
CLASSPATH変数→byteコードファイルの位置をJavaに伝えるための変数
また コンパイルスイッチの -classpath で代用する事も出来る。
ただし -classpath はCLASSPATH変数を上書きする。
unixの場合は、/usr/local/jdk1.3/jre/lib と . も加える。(-classpathもかなー?)
イベント代行モデル(Java1.1,1.2)とイベントモデル(Java1.0)
Javaネイティブメソッドインターフェイス
Java2(JDK1.3)で推奨されなくなった機能 → c:\jdk1.3\docs\api\deprecated-list.html
publicキーワードでclassを作成した場合、ファイル名はそのクラスと同じでなければならない。
よって.javaファイルにはpublicなクラスはひとつしか含める事が出来ない。
javaはファイル名でクラスを検索する。
javaアプリケーションにのみmainメソッドがある。;-)
staticを付けるとオブジェクトメソッドではなくクラスメソッドになる。
java.lang は標準装備である。
フィールド→クラスのメンバー
$> javac -d temp apptest.java
でtempディレクトリにapptest.classが作成される。
オプションいろいろ:
-deprecation 推奨されない情報を表示する。
-g すべてのデバッグ情報を生成する。
-g:none デバッグ情報をいっさい生成しない。
-nowarn すべての警告メッセージを表示しない。
javaw があるのはwindowsだけである。DOSがばかだから。:-)
Javaのlongは8byteである。
整数リテラルとは定数値の事である。
javaはunicodeである。
コンパイラはJavaコードの文字列リテラルをStringオブジェクトに変換する。
一般にJavaコンパイラは式の中でbyte値とshort値をint型に昇格する。
────────────────────────────────────────
データ型 サイズ 保持できる値の範囲
────────────────────────────────────────
byte 8ビット -127 〜 127
short 16ビット -3,2768 〜 3,2767
int 32ビット -21,4748,3648 〜 21,4748,3647
long 64ビット -922,3372,0368,5477,5808 〜 922,3372,0368,5477,5807
────────────────────────────────────────
float 32ビット -3.4E38 〜 3.4E38 (有効桁数 6〜 7桁)
double 64ビット -1.7E308 〜 1.7E308 (有効桁数 15〜16桁)
────────────────────────────────────────
char 16ビット 1文字
────────────────────────────────────────
boolean 32ビット true(真)もしくはfalse(偽)
────────────────────────────────────────
Javaでは大文字小文字を区別します。
//-----------------------------------------------------------------------------
//お約束のプログラム(java application) :ファイル名は app.java
import java.util.Date;
import printer; //自作のクラスです
public class app{//←ファイル名と合わせる
public static void main(String[] args){ //mainはpublicでなければならない。
String value="wahaha";
System.out.println(value);
System.out.println("Hello Java world!");
System.out.println("Today = " + new Date());
func();
(new printer()).print(); //ここわかる?
int i[]=new int[256]; //なんかやだね でも全部0に初期化される。
int j[][]=new int[128][256]; //多次元配列でございます。
//int i[256];って出来ないみたい
int fdsa[]={1,2,3,4};//これはできる...
int fdsa[][]={{1,2,3,4},{2,4,6,8}};//多次元配列の初期化
//long lvalue=123456789L; you know.
int hexvalue=0xff; //16進数として代入する
int octvalue=020; // 8進数として代入する
//↓fを付けないとこれはエラーとなる。浮動小数点リテラルのデフォルトはdouble型であるため。
float fvalue=1.5f;
boolean bvalue=true;
System.out.println( bvalue ); //きちんとtrueって出る。C++だと1って出る。
char char3='C';
char char4=67; //unicodeです
System.out.println("\'C\' →" + char3); //なんと表示されるか
//char を printlnで評価させると,unicodeのコードとして文字が表示される。
System.out.println(char3 +1); //なんと表示されるか
System.out.println(++char3); //なんと表示されるか
int int1=1;int int2=2;
int int3=int1*int2; //動的初期化
System.out.println( int3 );
//配列から配列へのコピー
int fdsa[] = new int[3];
int fdsa2[] = new int[3];
fdsa[0]=1; fdsa[1]=2; fdsa[2]=3;
fdsa2=fdsa;//c++では出来ないですね
}
public static void func(){ //メソッド
System.out.println("Hello Java world! from func()");
}
}
//-----------------------------------------------------------------------------
//自作のクラス :ファイル名は printer.java
public class printer{
public void print(){
System.out.println("Hello from printer.class");
}
}
//-----------------------------------------------------------------------------
//Window型アプリケーション appwintest.java
import java.awt.*;
import java.awt.event.*;
class AppFrame extends Frame{
public void paint(Graphics g){
g.drawString("Hello from Java",60,100);
}
}
public class appwintest
{
public static void main(String[] args){
AppFrame f=new AppFrame();
f.setSize(200,200);
f.addWindowListener( // ぬわんだ!? この関数は?
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
f.show();
}
}
//-----------------------------------------------------------------------------
//お約束のアプレットプログラム:ファイル名は applet.java
import java.applet.Applet;
import java.awt.*;
public class applet extends Applet{
public void paint(Graphics g){
g.drawString("Hello world!",60,100);
}
}
//-----------------------------------------------------------------------------
コンパイルと実行
$> javac apptest.java
$> java apptest ←.classは省略できる