Java學習筆記

0, Java四大名著:html

Java編程語言(第三版)---Java四大名著----James Gosling(Java之父)java

 Java編程思想(第4版)----Java四大名著----------------Bruce Eckel編程

JAVA 2核心技術 卷I:基礎知識---Java四大名著-----Cay Horstmannapi

JAVA 2核心技術 卷II:高級特性---Java四大名著-----Cay Horstmann數組

Effective Java中文版------Java四大名著--------Joshua Blochoracle

 

1, 第一個Java項目容易遇到的問題排查:編程語言

一、你的文件名對嗎?
JAVA要求你的文件和你的類名嚴格對應的。
好比 public class HelloWorld{ .....
那麼文件名必定只能是HelloWorld.java,看仔細了!

二、你的程序中有main方法嗎?參數什麼的對嗎?
main方法的聲明應該是這樣子的:
public static void main(String[] args),注意String中的S必須是大寫的。
事實上若是你用開發工具來作的話,是不會錯的。若是你用UltraEdit之類的來寫程序的話,就一個字不要改的照抄吧!

三、記住,javac後面跟的參數是文件名,但java 後面跟的是類名!
這是我開始學JAVA是犯的錯,java HelloWorld.class,而後就報錯。後來才弄明白,應該是java HelloWorld。

四、設置了classpath了嗎?【jdk6以及之後的版本都不用再配CLASSPATH,並且也不建議去配】
不只是在安裝JDK時要設置的內容,通常來講最好還要本身設置一個目錄來存放本身的類文件的。好比d:\class目錄。
設置classpath=%classpath%;d:\class
那麼,如今將HelloWorld.class文件COPY到d:\class目錄下,再java HelloWorld應該就OK了。

五、結合第3點和第4點
若是你的類是屬於某一個包的,好比這樣一個類sony.test.HelloWorld,那麼按照我在第4點中說的目錄來講,就應該將HelloWorld.class文件存放到d:\class\sony\test\目錄下。
執行的時候應該參考第3點中說的,按類名執行:java sony.test.HelloWorld。工具

2,反編譯Java的class文件開發工具

1,使用 cfr  進行反編譯class文件。
編碼

2,  cfr其實就是一個jar包,以正常的java -jar就能運行,而後傳入指定的class文件。如:java -jar path/to/cfr_0_146.jar xxx.class

3, 其後能夠指定一些參數。java -jar path/to/cfr_0_146.jar xxx.class  --sugarenums false //這個參數是將enum類的語法糖解開,不加這個參數反編譯的enum的class文件和源文件差很少,依然是還有語法糖的,加了這個參數就能夠把enum的語法糖去掉。頗有用!

4, 可使用--help 查看各個參數的介紹。 java -jar path/to/cfr.jar --help

5,一個例子:

源文件:

enum RGB {
    RED, GREEN, BLUE;
}

反編譯後的代碼:

final class RGB
extends Enum<RGB> {
    public static final /* enum */ RGB RED = new RGB("RED", 0);
    public static final /* enum */ RGB GREEN = new RGB("GREEN", 1);
    public static final /* enum */ RGB BLUE = new RGB("BLUE", 2);
    private static final /* synthetic */ RGB[] $VALUES;

    public static RGB[] values() {
        return (RGB[])$VALUES.clone();
    }

    public static RGB valueOf(String string) {
        return Enum.valueOf(RGB.class, string);
    }

    private RGB(String string, int n) {
        super(string, n);
    }

    static {
        $VALUES = new RGB[]{RED, GREEN, BLUE};
    }
}

 

3,[Ljava.lang.Object    Java中的這個符號什麼意思?【參見此文章

[Ljava.lang.Object;是名稱Object[].classjava.lang.Class表示的類的陣列Object

命名方案記錄在Class.getName()

若是此類對象表示不是數組類型的引用類型,則返回類的二進制名稱,如Java語言規範(第13.1節)所指定。

若是此類對象表示基本類型或void,則返回的名稱是與基本類型對應的Java語言關鍵字void

若是此類對象表示一個數組類,則名稱的內部形式由元素類型的名稱組成,前面是一個或多個'['表示數組嵌套深度的字符。元素類型名稱的編碼以下:

Element Type        Encoding

boolean             Z

byte                B

char                C

double              D

float               F

int                 I

long                J

short               S 

class or interface  Lclassname;

 

[Ljava.lang.Object   是這個名單上的最後一個。這裏有些例子:

// xxxxx varies

System.out.println(new int[0][0][7]); // [[[I@xxxxx

System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx

System.out.println(new boolean[256]); // [Z@xxxxx


 

4,

5,

6,

7,

8,

9,

10,

相關文章
相關標籤/搜索