ArrayList集合與HashSet的區別
Arraylist : add方法直接把所以元素加進來
不會判斷是否存在
HashSet:在調用add方法之前會先判斷該元素是否存在
HashCode()方法
用於判斷兩個元素是否相等
在元素相應的類中定義
相應的hashcode值是由元素中相關成員變量算出 來的
同時還會覆蓋equals()方法
框架
在某些東西還沒寫出來之前
就能對他們進行調用
相當於一個基本架構
利用的是反射的原理
如
class
forName(
配置信息
)
newInstance() 這樣我們只要在配置文件裡面將要引用的類名寫進去就行了
同時可以隨時更改
用類加載器的方式管理資源和配置文件
當程序給普通用戶時
加載配置文件回事一個問題
因為它的路徑不好找
此時有兩種方法解決
getRealPath()方法
通過運算獲得配置文件的路徑
不是硬編碼
(普通方法)
類加載器
類名
class
getClassLoader()
getResourceAsStream(
com/baidu/exam/configure
properties
)
也可以簡化為
類名
class
getResourceAsStream(
configure
properties
)
配置文件與java類放在同一個包中
javabean與內省
是一種類
他裡面有get()
set()方法用於外界訪問本類的私有變量
屬性
去掉get
set之後的東西即為屬性
但不一定和成員變量名相同
他們是看不到的
內省
用於處理javabean類的Api
String propertyname =
x
;
PropertyDescriptor pd = new PropertyDescriptor(propertyname
p
getClass())
Method methodx = pd
getReadMethod()
Object retval = methodx
invoke(p)
eclipse小技巧
方法的重構
將某段很長的代碼放入一個函數中
但只需要將他們選擇出來再右鍵選擇重構
Inspector
BeanInfo用於處理屬性的類
BeanUtils工具包
注解
注解相當於一種標記
在程序中加了注解就等於為程序打上了某種標記
沒加
則等於沒有某種標記
以後
javac編譯器
開發工具和其他程序可以用反射來了解你的類及各種元素上有無何種標記
看你有什麼標記
就去干相應的事
標記可以加在包
類
字段
方法
方法的參數以及局部變量上
為注解增加屬性
什麼是注解的屬性
注解是一種標識
注解的屬性是注解標識的內容
加了屬性的標記效果為
@MyAnnotation(color=
red
)
定義基本類型的屬性和應用屬性
在注解類中增加String color()
@MyAnnotation(color=
red
)
用反射方式獲得注解對應的實例對象後
再通過該對象調用屬性對應的方法
MyAnnotation a = (MyAnnotation)AnnotationTest
class
getAnnotation(MyAnnotation
class)
System
out
println(lor())
可以認為上面這個@MyAnnotation是MyAnnotaion類的一個實例對象
為屬性指定缺省值
String color() default
yellow
;
value屬性
String value() default
zxx
;
如果注解中有一個名稱為value的屬性
且你只想設置value屬性(即其他屬性都采用默認值或者你只有一個value屬性)
那麼可以省略value=部分
例如
@MyAnnotation(
lhm
)
注意 :枚舉和注解都是特殊的類
不能用new 創建它們的實例對象
創建枚舉的實例對象就是在其中增加元素
在程序中如何創建出一個注解的實例對象啊?用@注解名
@Retention(RetentionPolicy
RUNTIME)
@Target({ElementType
METHOD
ElementType
TYPE})
public @interface ItcastAnnotation {
String color() default
blue
;
String value()
int[] arrayAttr() default {
};
EnumTest
TrafficLamp lamp() default EnumTest
TrafficLamp
RED;
MetaAnnotation annotationAttr() default @MetaAnnotation(
lhm
)
}
[nextpage]
泛型
泛型是提供給javac編譯器使用的
可以限定集合中的輸入類型
讓編譯器擋住源程序中的非法輸入
編譯器編譯帶類型說明的集合時會去除掉
類型
信息
使程序運行效率不受影響
對於參數化的泛型類型
getClass()方法的返回值和原始類型完全一樣
由於編譯生成的字節碼會去掉泛型的類型信息
只要能跳過編譯器
就可以往某個泛型集合中加入其它類型的數據
例如
用反射得到集合
再調用其add方法即可
參數化類型與原始類型的兼容
參數化類型不考慮類型參數的繼承關系
泛型通配符
使用?通配符可以引用其他各種參數化的類型
?通配符定義的變量主要用作引用
可以調用與參數化無關的方法
不能調用與參數化有關的方法
限定通配符的上邊界
正確
Vector<? extends Number> x = new Vector<Integer>()
錯誤
Vector<? extends Number> x = new Vector<String>()
定通配符的下邊界
正確
Vector<? super Integer> x = new Vector<Number>()
錯誤
Vector<? super Integer> x = new Vector<Byte>()
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27158.html