黑马程序员__java高级总结1

---------------------- android培训java培训、期待与您交流! ----------------------

对于基本数据类型的整数,若-128—127之间,包装成Integer对象之后,便放在缓冲池中!

享元模式flyweight):当很多很小的对象,使用的频率较高,又有很多东西一样,则可以把他们变成一个对象,把外部属性作为方法的参数,称之为外部的状态!

枚举:枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方法在开发阶段无法实现这一目标。

定义枚举类的关键字:enum

对象方法.name(获取名字).ordinal(获取对象的位置)

静态方法.valueOf(将其封装成对象).values(将类中对象封装到数组里)

实现带有构造方法的枚举:1、元素列表必须放在最前面

2、构造函数必须private

3、在枚举元素的后面加上(),可以确定使用哪个构造函数

实现带有抽象方法的枚举:

例子:实现一个交通灯的枚举:

作用:可以获取到下一个灯,能够设定灯切换的时间;

publicenum TrafficLamp{

RED(30){

public TrafficLamp nextLamp(){

returnGREEN;

}

},

YELLOW(5){

public TrafficLamp nextLamp(){

returnRED;

}

},

GREEN(45){

public TrafficLamp nextLamp(){

returnYELLOW;

}

};

private TrafficLamp(){};

private TrafficLamp(int time){};

publicabstract TrafficLamp nextLamp();

}

枚举只有一个成员时,可以作为一种单例的实现方式~

反射java高新技术17开始—25):【ConstructorFieldMethodPackage

反射的基石(Class—java.Lang.Class

如何得到各个字节码对应的实例对象:

1、 类名.class,例如:System.class

2、 对象.getClass(),例如:new Date().getClass()

3、 Class.forName(“类名”),例如:Class.forName(“java.util.date”);

九个预定义Class实例对象:

参看Class.isPrimitive方法的帮助

int.class==Integer.TYPEtrue

数组类型的Class实例对象:Class.isArray()

总之,只要在源程序中出现的类型,都有各自的Class实例对象,例如:int[] ,void……

反射就是把java类中的各种成分映射成相应的java类。

得到某个类所有的构造方法:

例子:

Constructor【】constructors=Class.forName(“java.lang.String”).getConstructors;

得到某一个构造方法:

例子:Constructor constructor=

Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);//获得方法时要用到类型

创建实例对象:

通常方式:String str=new String(new StringBuffer(“abc”));

反射方式:String str=(String)constructor.newInstance(new StringBuffer(“abc”));//调用获得的方法时要用到上面相同类型额实例对象。

Class.newInstance()方法:

例子:String obj=(String)Class.forName(“java.lang.String”).newInstance();

该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象

该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。

Field

Field类代表某个类中的一个成员变量

fieldX代表的是x的定义,而不是具体的x变量;

例子:

定义类:

publicclass ReflectPoint {

privateintx;

publicinty;

public ReflectPoint(int x, int y) {

super();

this.x = x;

this.y = y;

}

}

使用反射:

ReflectPoint fp1=new ReflectPoint(3,5);

Field fieldY=fp1.getClass().getField("y");//访问公有成员变量

System.out.println(fieldY.get(fp1));

Field fieldX=fp1.getClass().getDeclaredField("x");

//访问私有成员变量

fieldX.setAccessible(true);//暴力反射使私有变量可访问!

System.out.println(fieldX.get(fp1));

成员变量反射的综合案例!

1publicclass ReflectPoint {

privateintx;

publicinty;

public String str1="ball";

public String str2="basketball";

public String str3="itcast";

public ReflectPoint(int x, int y) {

super();

this.x = x;

this.y = y;

}

public String toString(){

returnstr1+":"+str2+":"+str3;

}

}

2privatestaticvoid changStringValue(Object obj) throws IllegalArgumentException, IllegalAccessException {

// TODO Auto-generated method stub

Field[] fields=obj.getClass().getFields();

for(Field field:fields){

if(field.getType()==String.class){

String oldValue=(String)field.get(obj);

String newValue=oldValue.replace('b', 'a');

field.set(obj, newValue);

}

}

}

Method

Method类代表某个类中的一个成员方法:

例子:Method charAt=Class.forName(“java.lang.String”).getMothod(“charAt”,int.class);

调用方法:

通常方式:System.out.println(str.charAt(1));

反射方式:System.out.println(charAt.invoke(str,1));如果传递给Method对象的invoke()方法的第一个参数为null,说明该Method对象对应的是一个静态方法!

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

你可能感兴趣的:(黑马程序员__java高级总结1)