??xml version="1.0" encoding="utf-8" standalone="yes"?> implements, import, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while 异常的分c?br />1Q未查异?br />RuntimeException和Error及其子类?br />q类异常不需要显式捕捉,一旦发生,它自动会抛出来,然后E序l止Q当Ӟ你也可以q行捕捉Q这L序就可以l箋q行Q?br />2Q已查异?br />Exception及其子类 声明已检查异?br />例:public FileInputStream(String name) throws FileNotFoundException 抛出已检查异?br />例:throw new Exception("message"); 捕获异常 传递异?br />异怼递下去,q样才能不会被覆盖; finally子句 泛型的翻?br />译泛型表达?br />A a = new A(); // 译后: 不能使用泛型的情?br />不能使用泛型l承异常?br />例如Qpublic class Problem extends Exception {...}?br />不能在catch(...)中,使用catch(T t)?br />异常声明中可以用泛型?br />例如Qpublic static void doWork(T t) throws T {...}?/p>
不能用泛型数l?br />A[] arr = new A[5]; // 擦除后ؓQA[] arr = new A[5]; 不能泛型类型实例化?br />class A { cȝ静态字D不能用泛型; 当泛型类型擦除后Q创建条件不能出冲H?br />例如Qpublic boolean equals(T t) {...} cd限定 类型限?lt;? super Employee>Q可以写Q不能读Q刚好和上面相反?/p>
无限定通配W?lt;?>Q可以读Q不能写Q读的时候直接{型ؓObject?/p>
pȝ内默认的cd载器 //ClassLoader实现Q查扄Q从父加载器向上遍历Q找不到p用当前自定义的加载器Q?br />protected ClassLoader() { protected ClassLoader(ClassLoader parent) { protected synchronized Class<?> loadClass(String name, boolean resolve)
1Q编?java文本文gQ?br />2Q通过~译器编译ؓ.class二进制文Ӟ
3Q用JAVA虚拟机执?class文gQ不同^台对应不同虚拟机Q?br />System.exitQmainҎl束不等于整个程序的真正l束Q可能还有线E在q行着Q调用System.exit()才达到程序的真正l束?/p>
面向对象原理
单承,多接口实玎ͼ一般,l承主要用在一个系列的对象抽象Q接口主要针对功能的抽象Q?br />JAVA语言中,q所有的变量都是对象Q基本的数值类型(char,short,int,long,float,double,booleanQ除外,可能是ؓ了运行速度Q编译器没有这些类型编译ؓ对象Q?br />对象Object是所有对象的宗Q?br />对象Class保存一个对象的cd信息Q也可以是基本的数值类型;
数据cd
int
short
long
byte
float
double
char
boolean
前缀Q?br />0xQ十六进?(指数用pQ十q制用e)
0Q八q制
变量命名
字母(a-zA-Z)、下划线(_)开_后箋字母可以是字母、数字、下划线Q不能是关键字或者保留字?/p>
关键?/strong>
abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, final, finally, float, for, goto, if,
其中Qconst和goto是保留关键字?/p>
注释
//行注?/p>
q算W?br />术q算Q?????Q?+?-?=?=Q?br />关系q算Q?gt;?lt;?=?gt;=?lt;=?=??amp;&、||Q?br />位运:&、|、^、~?gt;>?gt;>>?lt;<?lt;<<Q?/p>
程控制
if ... else ...
(...) ? ... : ...;
switch
for each
while
do...while
参数传?br />基本数据cd按照g递,对象按照引用传递;String对象没有修改该对象的ҎQ如果要通过引用修改可以使用StringBuilder或StringBufferQ?/p>
面向对象
cd载:static字段、一般字Dc构造函数字D;Q注意:static成员是类加蝲器加载的Q是U程安全的;Q?br />l承Q?br />接口Q?br />内部cR匿名内部类用途:使用一个对象去做Q务处理,但是该对象以后也不需要用刎ͼq样在一个类A内部定义一个内部类BQ这LB可以讉KcA的数据,外界q不知道有类B的存在;
异常l承时候,父类与子cȝ异常声明可以不同Q但是子cȝ异常必须在父cȝ异常范围之内Q也是父类的异常必d以引用子cȝ异常Q?br />Ҏl承时候,如果需要覆盖,Ҏ名称、Ş参类型、返回类型必ȝ同;
讉K修饰W?/strong>
protected
默认
public
对象比较
使用==比较的是引用Q用equals默认比较的也是对象的引用Q但是,l过重蝲的equals可以按照我们需要去比较特点字段Q?br />Stringc重载了equals与hashCodeQ而StringBuilder与StringBuffer没有l过重蝲Q因此用equals比较StringBuilder与StringBuffer实际比较的是引用Q?br />注意Q重载equals必须同时重蝲hashCodeQ这两个Ҏ必须保持同步Q即equals与hashCode同真假;
对象序列?br />l承接口Serializable卛_以实现对象序列化Q默认是序列化与反序列化的结果是相同的(引用被序列化后再反序列化回来q是跟之前相同的Q;
一般序列化后,要定义字DserialVersionUIDQeclipse自动可以生成Q作用是保持序列化与反序列化时候的版本兼容Q如果不定义该字D,当出现反序列化时候内容不同时Q可能会报错Q?br />transient关键字可以该字D不q行序列化;
对象克隆
l承接口CloneableQ然后覆盖Objectcȝclone()Ҏq行克隆的声明;默认是浅拯Q若字段是引用类型,则需要手动在clone()Ҏ里面人工q行new一个对象;
数组默认支持克隆Q但是数l的数组Q二l数l以上)不支持直接用克隆;
异常
异常的结?br />Throwable
׃Exceptionz的子cdExceptioncd是已查异常,所以,ThrowablecM属于已检查异常;q类异常必须q行捕捉Q否则编译不能通过?/p>
如果不捕L话,E序׃l止。有些时候,出现了异常,但是Q我们不需要终止程序,那么需要捕获异常?br />try {
}
// catch语句是从上到下执行的Q具体的异常应该攑֜上面Q?/p>
try {
} catch(SQLException e) {
}
finally子句是一定会执行的,该子句主要用于回收一些资源?/p>
泛型Q属于底层代码,不常用)
JAVA虚拟Z没有泛型Q只有普通类与方法,使用泛型主要是ؓ了方便类型{换;q有泛型可以限定对象引用的用;所有,泛型了解使用卛_Q不需要深IӞ
泛型包含两种Q泛型类、泛型方法;泛型cM要用于对某个不确定类型的字段q行操作Q泛型方法是指staticҎ中用了泛型参数Q?/p>
a.setT("generic programming.");
String str = a.getT(); // 译为:String str = (String) a.getT();
译泛型Ҏ
public static T getMiddle(T[] a) // 译为:public static Object getMiddle(Object[] objects)
public static
// 默认是{化ؓ左边W一个类型,所有尽量将范围大的cd攑ֈ前面Q?br />复杂一点的桥方法:
class A {
}
class B extends A {
}
class A { // 父类译后肯定是Object
}
class B extends A {
}
// 调用Q?br />A a = new B();
a.setT("generic programming."); // 译为:b.setT((Object) "generic programming.");
}
子类型限?lt;? extends Employee>Q可以读Q不能写?br />Pair<? extends Employee> pair1 = null; // ?是Employee的子c,子类可能很多Q不定有几个?br />Pair<Manager> pair2 = new Pair<Manager>();
pair1 = pair2;
pair1.getFirst(); // 操作成功Q因为是“(? extends Employee) pair1.getFirst();”Q?br />
反射Q属于底层代码,不常用)
对象产生于类Q而在JAVA虚拟机里面还保存着对类的描qͼq个描述是一个Class的对象;cM息被加蝲到虚拟机Q就会生一个Class对象Q用以描q这个类的信息;
通过q个Class对象可以解析cȝl构Q这个Class对象可以从类信息来(例如QEmployee.classQ,也可以从对象来(例如Qemp.getClass()Q;
通过q个Class对象可以引用具体对象的字Dc方法、构造器Q可以完全操作一个对象;
.class: 应该是一个指向类的Class对象的指针?br />forName(): 会调用当前线E所在的ClassLoader来装载一个类的Class实例?br />注意Q基cd也可以这样?#8220;int.class”Q?/p>
cd载器Q属于底层代码,不常用)
java中的cL动态加载的Q即引用C才会被加载;
// 三种加蝲方式CZ
class A{}
class B{}
class C{}
public class Loader{
}
Bootstrap ClassLoader (加蝲rt.jar)
}
}
// 双亲委派加蝲的实?br />public Class<?> loadClass(String name) throws ClassNotFoundException {
}
}
=====
from
http://blog.sina.com.cn/s/blog_667ac0360102e8ii.html
]]>