Myeclipse于eclipse的差別:
eclipse是開發java的一款專業ide,它本身就是由java程式所開發,myeclipse本身是eclipse的插件(用于開發javaee的平台),後來myeclipse把eclipse內建進去了,是以本人自己了解Myeclipse是一個加強版的Eclipse。
java(JDK1.5新特性:靜态導入)
好處:靜态導入後,可以在不寫類名的情況下,直接調用自己所導入類裡面已經定義好了的類方法。提高的代碼編寫的效率,
代碼示範:
//非靜态導入的代碼:
public class TestStatic{
public static void main(String[] args){
System.out.println(Integer.toHexString(42));
}
}
//靜态導入之後的代碼:
import static java.lang.System.out;
public class TestStaticImport {
public static void main(String[] args){
out.println(Integer.toHexString(42));
}
}
java (JDK1.5新特性:可變參數和增強for循環)
适用于參數個數不确定,類型确定的情況。
調用可變參數的方法時,編譯器為該可變參數隐含建立一個數組。
注意:可變參數必須寫在參數清單的最後面。
可變參數結合增強for代碼示範:
public class VarableParameter
{
public static void main(String[] args)
{
System.out.println(add(1,2,3,5,6,8,9,10));
<span style="white-space:pre"> </span>System.out.println(add(4,5,8,10));
}
<span style="white-space:pre"> </span>//當參數類表的最後,變量類型和和變量名出現了...這個就是一個可變參數,
<span style="white-space:pre"> </span>//它能接收不确定個數的參數,但是确定變量類型
public static int add(int x,int...args)
{
int sum = x;
//調用可變參數的方法時,編譯器為該可變參數隐含建立一個數組,
//在方法體中以數組的形式通路可變參數,那麼我們就用到了周遊數組來進行操作。
//是以就用到了增強for
for(int arg : args)
{
sum+= arg;
}
return sum;
}
}
Java(JDK1.5新特性:基本資料自動拆裝箱及享元設計模式)
例如:
Integer iObj = 3;//這個在1.5之前是非法操作,編譯不通過的,
然而1.5開始:基本類和基本資料類型可以無需轉換直接參與計算
那麼在程式中,兩個Integer對象的值都為3,但是它們比較的結果為true,但是數值一旦超過-128~127這個範圍時,比較結果為false。
這時就涉及到了java的享元設計模式了(flyweight)
因為小的數字重複使用的頻率比大的資料高,如果一出現就封裝成對象,那麼最後對象越來越多,占用的記憶體會顯得很臃腫,而把這些重複屬性的對象(數值在一個位元組之内-128~127之間時)進行封裝成一個對象,它就在記憶體中隻占用一個對象的空間,而把它們不同的屬性變成方法的參數傳遞進來進行操作,實作共享。
代碼示範:
public classAutoBox
{
public static void main(String[] args)
{
//自動裝箱
IntegeriObj = 3;
//自動拆箱
System.out.println(iObj + 12);
Integeri1 = 13;
Integeri2 = 13;
System.out.println(i1 == i2);
//兩個對象對比的結果是true
//如果超出數值在一個位元組之内-128~127之間時就會為false
}
}
java(JDK1.5新特性:枚舉)
作用: 枚舉就是要讓某個類型的變量的取值隻能為若幹個固定值中的一個,否則,編譯器就會報錯。
枚舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變量的方式在開發階段無法實作這一目标
Java中的枚舉并不是簡單常量的集合,而是一個對象,其本質依然是類,是以Java中的枚舉除了提供一系列相關值以外,還提供了一些額外功能,甚至還可以根據需要自行添加一些功能
代碼示範:
public classEnumTest {
public static void main(String[] args){
//WeekDay1 weekDay = WeekDay1.MON;
//System.out.println(weekDay.nextDay());
WeekDayweekDay2 = WeekDay.FRI;
System.out.println(weekDay2);//預設就是擷取對象的名稱
System.out.println(weekDay2.name());//也可以指定用name方法,擷取對象的名稱
System.out.println(weekDay2.ordinal());//這個變量對應引用類型的排序位置,從0開始排的
System.out.println(WeekDay.valueOf("SAT"));//根據字元串封裝為對象
System.out.println(WeekDay.values().length);//得到枚舉類中的所有的枚舉元素長度,并用增強for循環周遊
}
//enum可以了解成為是特殊的class,
//它也可以有自己的變量,可以定義自己的方法,可以實作一個或者多個接口。
public enum WeekDay{
//元素清單必須位于枚舉類的最前面
SUN,MON,TUE,WED,THI,FRI,SAT;
//枚舉的構造方法必須是私有private的
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("sencond");}
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLampnextLamp();
private int time;
private TrafficLamp(int time){this.time=time;}
}
}
反射的基石-àClass類(此特性從JDK1.2就開始出現了。)
java程式中的各個java類屬于同一類事物,那麼這類事物就稱之為Class類。
詳細的的說Class類就是描述記憶體中的位元組碼檔案的,該類的對象就是記憶體中加載的位元組碼檔案。
擷取Class類常見的幾種方式
ClassforName(“String”); //通過字元串的形式擷取Class對象。
類名.class; //直接通過類名擷取Class對象。
new Object().getClass(); //通過對象調用getClass方法擷取Class對象。
反射的作用是把類中的各種成分,映射到相應的類,
擷取Constructor類對象(代表某一個類中的構造函數)
代碼示範:
//擷取這個類的所有構造方法。
Constructor[] constructors = Class.forName(“java.lang.String”).getConstructors();
//擷取某一個構造方法:
Constructor constructor = String.class.getConstructor(StringBuffer.class);
擷取Field類對象(代表擷取一個類中的某一個成員變量)
代碼示範:
//假設有一個ReflectPoint類,裡面有x和y變量類型為int類型,而且都具備了get
//方法,擷取其中一個變量并列印
ReflectPoint point = new ReflectPoint(4,9);
Field fieldX = point.getClass().getField(“x”);
System.out.println(fieldX.get(point));
擷取Method類對象(代表擷取一個類中的某個成員方法)
代碼示範
//擷取這個類的一個成員方法
//定義一個字元串變量,并且設值。
String x = “abc”;
Method methodCharAt =String.class.getMethod(“charAt”,int.class);
System.out.println(methodCharAt.invoke(a,1));
數組的反射
數組的Class對象:具有相同的元素類型和相同的次元代表是相同的Class執行個體對象。
數組的Class對象調用getSuperClass可以傳回一個父類對應的Class類型對象。
基本類型的一維數組可以被當做Object類型使用,不能當做Object[]類型使用,非基本類型的一維數組,既可以當做Object類型使用,又可以當做Object[]類型使用。
反射的價值
Java中工具類是被使用者所調用,而架構是調用使用者提供的類。要實作架構這種功能,就必須要解決:無法知道使用者類的名稱,不能建立使用者類的對象這些問題,那麼就需要通過反射的方式來解決。