JAVA核心API(上)
第四章 JAVA异常处理
第一节:异常的概念
第二节:捕获和处理异常 try...cacth...finally
第三节:throws和 throw关键字
throws表示当前方法不处理异常,而是交给方法的调用出去处理;
throw表示直接抛出一个异常;
http://blog.java1234.com/blog/articles/201.html
第四节:Exception 和 RuntimeException 区别
Exception是检查型异常,在程序中必须使用try...catch进行处理;
RuntimeException是非检查型异常,例如NumberFormatException,可以不使用try...catch进行处理,但是如果产生异常,则异常将由JVM进行处理;
http://blog.java1234.com/blog/articles/202.html
第五节:自定义异常类
第五章 JAVA常用类
第一节:Java日期处理类
http://blog.java1234.com/blog/articles/204.html
第二节:String VS StringBuffer
String:对String类型的对象操作,等同于重新生成一个新对象,然后讲引用指向它;
StringBuffer:对StringBuffer类型的对象操作,操作的始终是同一个对象;
总结下:假如定义的字符串内容基本不变或者很少变化,用String效率高;假如定义的字符串内容经常变动,要用StringBuffer;
第三节:Math类
第四节:Arrays类
1,toString()方法 返回指定数组内容的字符串表示形式;
2,sort()方法 对指定的类型数组按数字升序进行排序;
3,binarySearch()方法 使用二分搜索法来搜索指定类型数组,以获取指定值;
4,fill()方法,将指定类型值分配给指定类型数组的每个元素;
第六章 JAVA泛型
第一节:泛型的引入
定义:使用泛型可以指代任意对象类型;
比如有很多类似的类,如果创建一堆类的话太麻烦了,这样就想使用多态,所有的类都继承Object, 可以用Object 定义类的属性,但是调用该类的方法时需要向下转型(创建 对象的时候向上转型),比较麻烦。所以引入泛型<T>,在创建对象的时候就可以指定T的类型。
http://blog.java1234.com/blog/articles/212.html

/** * 定义泛型类 * @author caofeng * * @param <T> */ public class CC<T>{ private T ob; public CC(T ob) { super(); this.ob = ob; } public T getOb() { return ob; } public void setOb(T ob) { this.ob = ob; } /** * 打印T的类型 */ public void print(){ System.out.println("T的实际类型是:"+ob.getClass().getName()); } }
第二节:限制泛型类型
前面我们讲的泛型,可以是任意类型,但是我们有时候,需要限制类型,这样更加安全。这里假如我们放其他类型:直接编译报错,说类型不对;
http://blog.java1234.com/blog/articles/215.html

public class Demo <T extends Animal>{ private T ob; public T getOb() { return ob; } public void setOb(T ob) { this.ob = ob; } public Demo(T ob) { super(); this.ob = ob; } public void print(){ System.out.println("T的类型是:"+ob.getClass().getName()); } }
第三节:通配符泛型
通配符泛型在使用泛型 特殊的场景下用到,比如把泛型对象作为方法参数传入方法的时候,就用到通配符泛型;

package com.java1234.chap06.sec03; import com.java1234.chap06.sec02.Animal; import com.java1234.chap06.sec02.Cat; import com.java1234.chap06.sec02.Demo; import com.java1234.chap06.sec02.Dog; public class Test { /** * 通配符泛型 * @param a */ private static void take(Demo<?> a){ a.print(); } public static void main(String[] args) { Demo<Dog> dog=new Demo<Dog>(new Dog()); take(dog); Demo<Cat> cat=new Demo<Cat>(new Cat()); take(cat); Demo<Animal> animal=new Demo<Animal>(new Animal()); take(animal); } }
第四节:泛型方法
泛型方法指返回值和参数都用泛型表示的方法;

package com.java1234.chap06.sec04; public class Test { /** * 泛型方法 * @param t */ public static <T> void f(T t){ System.out.println("T的类型是:"+t.getClass().getName()); } public static void main(String[] args) { f(""); f(1); f(1.0f); f(new Object()); } }
第七章 JAVA反射
第一节:反射的基本概念
一般情况下,我们知道一个类,那可定可以通过这个类创建对象;
但是如果要求通过一个对象找到一个类,这时候反射就派上用场了。
java反射实现的核心就是Class类 java.lang包下的。
第二节:java Class 基本使用
对象.getClass() 调用的是Object类的getClass() 得到Class对象 然后再调用Class里的getName()方法,获取到完整包路径类;
Student student=
new
Student();
student.getClass().getName(); //com.java1234.chap07.sec02.Student
通过完整包路径类型来实例化Class对象,
Class<?> c=
Class.forName(
"com.java1234.chap07.sec02.Student"
);
通过Class对象获取Student类实例
第三节:通过反射获取类的基本结构
通过Class对象得到Student类的完整结构;
Class<?> c=
Class.forName(
"com.java1234.chap07.sec02.Student"
);
1,通过getConstructors()方法获取所有构造方法
Constructor<?> cons[]=c.getConstructors();
2,通过getMethods()方法获取所有方法
Method mds[]=c.getMethods();
3,通过getDeclaredFields()方法获取所有属性
Field fs[]=c.getDeclaredFields();
第四节:通过反射调用方法和操作属性
http://blog.java1234.com/blog/articles/221.html
1,通过反射调用方法,主要通过invoke方法
Object obj=c.newInstance();
Method m2=obj.getClass().getMethod(
"setName"
, String.
class
);
m2.invoke(obj,
"小锋"
);

package com.java1234.chap07.sec04; import java.lang.reflect.Field; public class Test2 { public static void main(String[] args) { Class<?> c=null; try { c=Class.forName("com.java1234.chap07.sec04.Student"); System.out.println(c.getName()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Object obj=c.newInstance(); Field nameField=c.getDeclaredField("name"); nameField.setAccessible(true); // 设置可以访问 包括私有属性 nameField.set(obj, "小锋"); System.out.println("name:"+nameField.get(obj)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }