---------------------- android培训、java培训、期待与您交流! ----------------------
枚举:
如果枚举只有一个成员时,就可以作为一种单例的实现方式。
枚举就相当于一个类,其中也可以定义构造方法、成员方法、普通方法、抽象方法。
枚举元素必须位于枚举体中的最开始部分,且列表的后面要有分号与其他杨员分隔,
如果枚举中带有构造方法则这个方法必须定义成private的
Overload vs Override:
Overload :方法重载,是指方法名相同参数个数不同、参数类型不同,如果一个方法的参数个数及参数类型都相同只是返回值不同,它也不是方法重载,因为方法重载与返回值无关。
Override:方法重写,方法重写是发生在子类中。方法的返回值类型、方法名、参数列表和父类中的方法完全一致,并且子类的访问级别不能低于父类的访问级别。但如果子类中的这个方法是private的那它就不是重写父类中的方法了,它完全就是另一个方法。
享元模式(flyweight):如果很多很小的对象它们又有很多相同的属性,就把它们封装成一个对象,而那些不同的属性就封装成外部对象作为方法的参数传入,称为外部状态,方法称为对象的内部状态。
反射:
Class 这个类代表内存中的一份字节码,
得到类的字节码有三种方式:
如:类名.class——Class c1=Date.class
对象.getClass()——new Date().getClass();
反射Class.forName("类名")——
用Class.forName(java.util.Date);来返回字节码,返回有两种情况:
1、是字节码已经加载到了虚拟机中只要返回就行
2、是虚拟机中还没有字节码,用类加载器去加载,把加载进来的的字节码缓存到虚拟机中返回
判断是不是原始类型:
String s="abc";
Class c1=s.getClass();
System.out.println(c1.isPrimitive());
System.out.println(int.class.isPrimitive());
System.out.println(int.class==Integer.class);
System.out.println(int.class==Integer.TYPE);
System.out.println(int[].class.isPrimitive());
判断是不是数据类型的Class实例对象:
System.out.println(int[].class.isArray());
反射就是把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"));//调用获得的方法时要用到上面相同类型的实例对象
Field 类:它代表某个类中的一个成员变量
public class ReflactPoint {
public int x;
private int y;
public String a="abckedg";
public String b="basket";
public String c="telnalPhona";
public ReflactPoint(){}
public ReflactPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public String toString(){
return "a:"+a+"b:"+b+"c:"+c;
}
}
Public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchFieldException {
ReflactPoint rp=new ReflactPoint(12,45);
//访问公共的 x
//Field不是对象身上的变量而是类身上的,要用它去取对象身上对应的变量
Field fieldX=rp.getClass().getField("x");
System.out.println(fieldX.get(rp));
//访问私有的y
Field fieldY=rp.getClass().getDeclaredField("y");
fieldY.setAccessible(true);
System.out.println(fieldY.get(rp));
比较两个字节码时要用==双等号,不要用.equals
//练习:把一个对象中所有String类型的变量中的b换成a.
public static void main(String[] args) throws...
ReflactPoint rp=new ReflactPoint();
changeString(rp);
System.out.println(rp);
public static void changeString(Object obj) throws IllegalArgumentException, IllegalAccessException{
Field[] fields=obj.getClass().getFields();
for (Field field : fields) {
if(field.getType()==String.class){
String oldStr=(String) field.get(obj);
String newStr=oldStr.replace("a", "e");
field.set(obj, newStr);
}
}
Method:某个类中的一个成员方法。
得到类中的某一个方法:
Method charAt=
Class.forName("java.lang.String").getMethod("name",parameterTypes)
如:
//得到方法
如methodCharAt=String.class.getMethod("charAt",int.class);
methodCharAt.invoke(str,1);//调用方法
调用方法:
通常方式:System.out.println(str.charAt(1));
反射方式:System.out.println(charAt.invoke(str,1));
如果传递给Method对象的invoke()方法的第一个参数为null,说明该Method对象对应的是一个静态方法!
具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象,代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class.
基本数据类型的一维数组可以被 当作Object类型来使用,不能当作Object[]类型来使用,非基础数据类型的一维数组既可以当作Object类型使用又可以当做Object[]类型使用。
Arrays.asList()方法处理int[]和String[]时是不一样的。
数组的反射:
Array工具类用于完成对数组的反射操作。
ArrayList_HashSet的比较及Hashcode分析:
ArrayList它的底层实现是数组数据结构,是有顺序的集合它中存储的是对象的引用并且其中的元素可以重复
HashSet是它的底层实现是哈希表,它所存储的元素不允许重复。
Hashcode的作用:
改hashcode时容易造成内存泄漏。
加载配置文件的三种方法:
InputStream is=new FileInputStream("文件名");
InputStream is=
Person.class.getClassLoader().getResourceAsStream("路径");
InputStream is=Person.class.getResourceAsStream("文件名");
---------------------- android培训、java培训、期待与您交流! ----------------------
分享到:
相关推荐
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
java基础,反射枚举基础,自己总结的笔记。
大学课程讲义_Java基础_枚举&注解.pptx
枚举 定义 自实现枚举类 使用 enum 定义枚举类 实现接口的枚举类 枚举类的方法 注解
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
java枚举小例子,简单了解枚举的用法,适合初学者使用。
java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list>
JAVA枚举JAVA枚举
Java高新技术_java5的枚举的基本应用
Java——枚举: enum关键字、Enum类 类集对枚举的支持——EnumMap类与EnumSet类 枚举类实现接口、在枚举类中定义抽象方法 Java反射机制: Class类、Class类的使用 反射的应用:取得类的结构
Java枚举是一种高效、可读性强的常量管理方式,它可以使代码更易于维护和扩展。使用Java枚举可以帮助我们有效地组织常量,并将其用于多种场景,提高代码的易用性和可重用性。 如何使用Java枚举? 在Java中,定义枚举...
java中enum枚举的详细用法。 0.0
Java源码查看枚举类型定义.rarJava程序设计经典300例
主要介绍了Java手动方式创建枚举类,结合实例形式分析了java创建枚举类的方法及相关操作技巧,需要的朋友可以参考下
列举java 枚举相关信息列举java 枚举相关信息列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息
例子中很好的体现了java中枚举的使用技巧和简单反射的实现过程
【Java面试】枚举从使用到原理
这里枚举类型有自己的反射方式: 这里我先总结下逻辑: 1. 通过getEnumConstatnts返回目前枚举中存在的对象。 2. 通过getMehod获取方法。 3. 最后用这个对象调用其方法。 程序运行截图如下: 其中对应的枚举: ...
深入理解 Java 枚举(枚举的方法+枚举的特性+枚举可以实现接口+组织枚举+策略枚举+枚举工具类等)
Java基础反射pptx Java基础 多线程.pptx Java基础 异常处理pptx Java基础 枚举&注解pptx Java基础泛型docx Java基础_网络编程pptx Java基础面向对象pptx Java基础_高级类特性.pptx Java基础实战Bank项目文档需求源...