ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

Java に対するおぼえがき

久しぶりに昔途中でやめたJavaを勉強し出しているので、忘れたくないことまとめ。

環境変数 JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8

javacがSJISのせいで文字化けする - ハトネコエ Web がくしゅうちょう

以前の記事でも書いたけど。

(クラス名).java を作る

TestJava.java

public class TestJava{

    public static void main(String[] args){
	int testNum = 1 ;
	System.out.println("test" + testNum + ", Hello!") ;
	//	methodTest() ;

    }

    public static void methodTest(){
	System.out.println("メソッドが呼び出されました") ;
    }
    
}

みたいな構文がJavaの基本。

short int とは書かない。

short と宣言する。(2Byte, -32768~32767)

byte と言うものもあるらしい。(1Byte, -128~127)
小さい値と決まってる定数の宣言ならいいかも。
画像処理や文字列処理にbyte配列を使うようだ。なるほど。

javac Test.javaコンパイル後に java Test で実行

決して java Test.class ではない。ひっかかりやすいところ。

ちなみにjarファイルを作るには、
jarファイルの作り方(ytp.ne.jp)

& と && の違い

通常は(Cと同じ挙動を求めるなら)&&でいい。
&& や || はショートサーキット演算子と呼ばれ、
左の条件で結果が見えていれば、右の条件は計算しない。

じゃあ & や | はどう使うのかと言うと、
右の条件でインクリメントをしていて、それを必ず実行させたい場合などだ。

例:
trueThing == true | ++plusNum == 5

これが trueThing == true || ++plusNum == 5 だったら、左の条件が正なので
全体が正であることは明らかであるため、右の条件式の計算を行わない。よってインクリメントも無視されるのだ。

printf か format で書式指定子

int num = 23 ;
System.out.printf("%04d \n", num) ;
System.out.format("%04d \n", num) ;

いずれも出力結果は「0023」となる。
どっちを使えばいいのだろうか……。

時間を計測する

参考:処理時間の計測

long timeStart = System.currentTimeMillis() ; // 計測開始

// 処理を記述

long timeEnd = System.currentTimeMillis() ;  // 計測終了

System.out.format("%.2f 秒 \n", (double)(timeEnd - timeStart) / 1000 ) ;

参考記事のコメントにもあるように、
パソコンの処理時間など、厳密なデータが欲しいときは nanoTime を用いるそう。

long timeStart = System.nanoTime() ;

// 処理を記述

long timeEnd = System.nanoTime() ;

System.out.format("%.3f ミリ秒 \n", (timeEnd - timeStart) / 1000000f ) ;

ただし時間のかかるものは、簡単に long int の範囲を超えてしまうから、
nanoTime が使える場合はある程度限定されることだろう。