概要

JDKのインストール、Java Swingのデバッグ方法、環境変数で実行するjava.exeを切り替えるバッチファイルなどのメモの一覧です。

Ubuntu に、oracle-java7 をインストール

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
sudo update-alternatives --config javac
  • tar.gzをダウンロードしてインストール
sudo tar zxvf jdk-7u11-linux-i586.tar.gz -C /usr/lib/jvm
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_11
export PATH=$PATH:$JAVA_HOME/bin

Swing debug agent

Javadoc 翻訳

Javadocに移動

JRuby

JRubyに移動

Java その他

Java メモ

環境変数

  • http://cr.openjdk.java.net/~gbenson/zero-08/raw_files/new/hotspot/src/share/vm/utilities/vmError.cpp
    // List of environment variables that should be reported in error log file.
    const char *env_list[] = {
      // All platforms
      "JAVA_HOME", "JRE_HOME", "JAVA_TOOL_OPTIONS", "_JAVA_OPTIONS", "CLASSPATH",
      "JAVA_COMPILER", "PATH", "USERNAME",
    
      // Env variables that are defined on Solaris/Linux
      "LD_LIBRARY_PATH", "LD_PRELOAD", "SHELL", "DISPLAY",
      "HOSTTYPE", "OSTYPE", "ARCH", "MACHTYPE",
    
      // defined on Linux
      "LD_ASSUME_KERNEL", "_JAVA_SR_SIGNUM",
    
      // defined on Windows
      "OS", "PROCESSOR_IDENTIFIER", "_ALT_JAVA_HOME_DIR",
    
      (const char *)0
    };
    

コマンドプロンプトからデフォルトのロケールを変更

> javac -J-Duser.language=en Test.java
> java -Duser.language=en Test
  • Java 国際化 FAQ
    アプリケーションの外部からデフォルトのロケールを設定できますか。
    
    使用している Java プラットフォームの実装によって異なります。通常、初期のデフォルトロケールは、ホストオペレーティングシステムのロケールによって決まります。Sun の JRE のバージョン 1.4 以降では、コマンド行から user.language、user.country、および user.variant の各システムプロパティを設定することで、初期のデフォルトロケールを変更できます。たとえば、初期のデフォルトロケールとして Locale("th", "TH", "TH") を選択するには、次のコマンドを使用します。
    java -Duser.language=th -Duser.country=TH -Duser.variant=TH MainClass
    
    この機能を使用できない実行環境もあるため、この機能はテスト目的だけに使用してください。

コード整形

個人的に、Javaのソースコードのインデントは、エディタでは4spaceWebサイトにソースコードを表示する場合は2spaceにしているので、xyzzyfilter-buffer(C-x #)でastyleを呼び出して以下のように整形。

astyle --style=java --mode=java --indent=spaces=2

コマンドラインなどから、ファイルを指定する場合も同様。

> astyle --style=java --mode=java --indent=spaces=4 MainPanel.java

Markdown形式のStack Overflowなどにソースコードを貼り付ける場合は、以下のようにして、行頭にタブ(またはスペース4つ)を追加。

astyle --style=java --mode=java --indent=spaces=2 < Hoge.java | sed -e "s/^\(.*\)$/\t\1/" > /dev/clipboard
astyle --style=java --mode=java --indent=spaces=2 | sed -e "s/^\(.*\)$/\t\1/"
astyle --style=java --mode=java --indent=spaces=2 | sed -e "s/\A\(.*\)\z/    \1/"

Checkstyle(sun_checks.xml)

astyle --style=java --mode=java --indent=spaces=4 --pad-oper --pad-header --unpad-paren

キャストの後にスペースを入れる方法は?

int h = (int)(.5 + baseline / height);
//(int)の後に空白を入れたい...
int h = (int) (.5 + baseline / height);

asyle 2.04

$ astyle --version
Artistic Style Version 2.04
  • 以下の様なソースコード(最後の}の直後にEOF)をastyleで変換すると、余計な}が追加される?
class Hoge
{
    public static void main(String[] args)
    {
        System.out.println("aaaaaaa");
    }
}

ブラウザで表示されているソースコードのコピー

JavaScriptでpreタグで囲まれたソースコードをtextareaにコピーするに移動

PMD: GodClass

  • Ruleset: Design
    /**
      * Very high threshold for WMC (Weighted Method Count). See: Lanza.
      * Object-Oriented Metrics in Practice. Page 16.
      */
    private static final int WMC_VERY_HIGH = 47;
    
    /**
     * Few means between 2 and 5. See: Lanza. Object-Oriented Metrics in
     * Practice. Page 18.
     */
    private static final int FEW_THRESHOLD = 5;
    
    /**
     * One third is a low value. See: Lanza. Object-Oriented Metrics in
     * Practice. Page 17.
     */
    private static final double ONE_THIRD_THRESHOLD = 1.0 / 3.0; //0.33333
    
    if (wmcCounter >= WMC_VERY_HIGH && atfdCounter > FEW_THRESHOLD && tcc < ONE_THIRD_THRESHOLD) {/**
      * Very high threshold for WMC (Weighted Method Count). See: Lanza.
      * Object-Oriented Metrics in Practice. Page 16.
      */
    private static final int WMC_VERY_HIGH = 47;
    
    /**
     * Few means between 2 and 5. See: Lanza. Object-Oriented Metrics in
     * Practice. Page 18.
     */
    private static final int FEW_THRESHOLD = 5;
    
    /**
     * One third is a low value. See: Lanza. Object-Oriented Metrics in
     * Practice. Page 17.
     */
    private static final double ONE_THIRD_THRESHOLD = 1.0 / 3.0; //0.33333
    
    if (wmcCounter >= WMC_VERY_HIGH && atfdCounter > FEW_THRESHOLD && tcc < ONE_THIRD_THRESHOLD) {
    

PMD: SimplifiedTernary

  • PMD Java – Basic
    public class SimplifiedTernaryTest {
      public static void main(String... args) {
        //boolean condition = true;
        boolean b1 = condition ? true  : something(); // can be as simple as condition || something();
        boolean b2 = condition ? false : something(); // can be as simple as !condition && something();
        boolean b3 = condition ? something() : true;  // can be as simple as !condition || something();
        boolean b4 = condition ? something() : false; // can be as simple as condition && something();
      }
      private static boolean something() {
        return true;
      }
    }
    
  • 例:
    model2 = new BasicDirectoryModel(getFileChooser()) {
      @Override public boolean renameFile(File oldFile, File newFile) {
        //return oldFile.canWrite() ? super.renameFile(oldFile, newFile) : false;
        return oldFile.canWrite() && super.renameFile(oldFile, newFile);
      }
    };
    

偶数・奇数の判断

public class EvenOddTest {
  public static void main(String... args) {
    for (int i = 0; i < 5; i++) {
      if (i % 2 == 0) {
        System.out.format("%d is even%n", i);
      } else {
        System.out.format("%d is odd%n", i);
      }
      if ((i & 1) == 0) { // ビット演算子の & は、== より優先順位が低いので(i & 1)と囲む必要がある
        System.out.format("%d is even%n", i);
      } else {
        System.out.format("%d is odd%n", i);
      }
    }
  }
}

コメント