黑马程序员_基础加强01

来源:互联网 发布:linux snmp 无法启动 编辑:程序博客网 时间:2024/05/23 21:26


----------------------Android培训、Java培训、java学习型技术博客、期待与您交流! ----------------------


枚举:就是要让某一个类型的变量的取值只能为若干的固定值中的一个,
 否则,编译失败。
特点:
1、构造方法是私有的。
2、每个元素分别用一个公有的静态成员变量表示。
3、可以有若干公有方法或抽象方法。

Enum<E extends Enum<E>>类:
String name()
          返回此枚举常量的名称,在其枚举声明中对其进行声明。
int ordinal()
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString()
          返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
          返回带指定名称的指定枚举类型的枚举常量。

注:枚举是一种特殊的类,其中每个元素都是该类的一个实例对象。

public class EnumerationDemo{public static void main(String[] args) {WeekDay day1 = WeekDay.MON;WeekDay day0 = WeekDay.SUN;//简单方法演示sop(day1);//MONsop(day1.name());//MONsop(day1.ordinal());// 1sop(WeekDay.valueOf("SUN").toString());//SUNsop(WeekDay.values().length);// 7}public enum WeekDay{//定义元素,并指定构造方法SUN(0),MON,TUE,WEN,THI,FRI,SAT;//私有的构造方法private WeekDay(){sop("first WeekDay");}private WeekDay(int day){sop("second WeekDay");}}public static void sop(Object obj){System.out.println(obj);}}

反射:就是把Java类中的各种成分映射成相应的java类。
作用:实现框架功能。
java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class。
Class类:没有构造函数。其实例对象对应的是类在内存中的字节码。
方法:
String getName()
          以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
Package getPackage()
          获取此类的包。
Constructor<T> getConstructor(Class<?>... parameterTypes)
          返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor<?>[] getConstructors()
          返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法
Field getField(String name)
          返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field[] getFields()
          返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
Method getMethod(String name, Class<?>... parameterTypes)
          返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method[] getMethods()
          返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口
    (包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
boolean isPrimitive()
          判定指定的 Class 对象是否表示一个基本类型。
Constractor类:
T newInstance(Object... initargs)
          使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
Method类:
Object invoke(Object obj, Object... args)
          对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
Field类:
Object get(Object obj)
          返回指定对象上此 Field 表示的字段的值。
void set(Object obj, Object value)
          将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
Array类:
注:具有相同维数和元素类型的数组属于同一种类型,即具有相同的Class实例对象

import java.lang.reflect.*;class ReflectionDemo{public static void main(String[] args) throws Exception{String str1 = "abc";/*String str2 = new String("abc");sop(str1==str2);//flase//获取String类的字节码Class cls1 = str1.getClass();Class cls2 = str2.getClass();Class cls3 = String.class;Class cls4 = Class.forName("java.lang.String");sop(cls1==cls2);//truesop(cls1==cls3);//truesop(cls1==cls4);//truesop(cls1.isPrimitive());//flasesop(int.class.isPrimitive());//truesop(int.class==Integer.class);//flasesop(int.class==Integer.TYPE);//truesop(int[].class.isPrimitive());//flasesop(int[].class.isArray());//true*///使用String类的字节码,通过getConstructor()方法,来获取String类中对应某一参数的构造函数的映射。//运用获取到的构造函数的映射,通过newInstance()方法来创建对应参数的String对象。Constructor constructor1 = String.class.getConstructor(StringBuffer.class);//此处需要强制转型 String str3 = (String)constructor1.newInstance(new StringBuffer("abc"));sop(str3);ReflectPoint pt1 = new ReflectPoint(3,5);ReflectPoint pt2 = new ReflectPoint(4,6);//通过ReflectPoint的字节码和getField()方法来获取ReflectPoint中的公有成员变量的映射Field fieldY = pt1.getClass().getField("y");sop(fieldY.get(pt1));sop(fieldY.get(pt2));//通过ReflectPoint的字节码和getDeclaraedField()方法来强制获取ReflectPoint中的共有成员变量的映射Field fieldX = pt1.getClass().getDeclaredField("x");fieldX.setAccessible(true);sop(fieldX.get(pt1));changeStringValue(pt1);sop(pt1);//同过String的字节码来获取String类中的方法的映射。Method methodCharAt = String.class.getMethod("charAt",int.class);sop(methodCharAt.invoke(str1,1));}public static void changeStringValue(Object obj)throws Exception{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);}}}public static void sop(Object obj){System.out.println(obj);}}class ReflectPoint{private int x;public int y;public String s1 = "ball";public String s2 = "basketball";public String s3 = "cast";ReflectPoint(int x, int y){this.x = x;this.y = y;}public String toString(){return s1+".."+s2+"..."+s3;}}


----------------------Android培训、Java培训、java学习型技术博客、期待与您交流! ----------------------



0 0
原创粉丝点击