------- android培训、java培训、期待与您交流! ----------
import static 导入某个类中的某一个静态方法或所有的静态方法,这样写静态方法是可以省略前缀。
overload与override的区别
overload重载,两个函数的参数个数和类型完全一致,但是返回类型不一致,不叫重载。
override重写,如果父类的方法是private,子类和父类的方法完全一致,并不是重写,而是一个全新的方法。
可变参数,在方法当中的最后一个参数是可变参数,不是最后一个参数不行。
增强for循环 语法for(type 变量名:变量集合) 注意事项:迭代变量必须在()中定义,集合变量可以使数组也可是是实现了Iterable的集合类
自动装 箱和拆箱功能,基本数据和和对象的转换,装箱时将基本数据封装成对象,拆箱是说将数据对象边城数据。在创建多个Integer数据对象时,在对象在一个字节内时,当创建第一个时首先放在数据缓存池中,当再次创建时如果已经存在了,那么就会自动取,不会创建新的对象。这就是享元模式。如果超过一个字节的范围,例如两个137,这样就不可以了。
枚举:就是让某个类型的变量的取值只能在若干个固定的值中取一个。模拟式通过私有构造方法,和模拟抽象类,因为需要模拟类本身创建自己的类,所以如果实例对象和实例对象之间存在某种关联的话,可以通过实现抽象方法,来减少if else的判断语句。
获得字节码的方式:
1.类名.class
2.对象.getClass
3.Class.forName的作用就是返回自己码,返回的方式有两种,第一种是这份字节码曾经加载过,已经在JVM中了,还有一种是JVM中还没有这一份字节码,用类加载器加载。
反射:就是把Java中的各种成分映射成类。例如,一个Java类中用一个Class类的对象表示,一个类的组成部分:成员变量,方法,构造方法,包等信息也用一个个的Java类表示,就像汽车是一个类,汽车的发动机,加速器也是一个类一样。表示Java类的Class类显然提供了一系列的方法,来获得其中的变量和方法等信息,这些信息用相应的类的实例对象表示,他们是Field,Method,Constructor等等。
通过getConstructor(Class...paramterType)可变参数的方法,参数为传递的是构造方法的参数类型,即参数对应的字节码。通过反射的机制创建实例,
Constructor<String> constructor=String.class.getConstructor(String.class);
String s =constructor.newInstance("avc");
Class.newInstance实例对象:获得缓存的构造方法,如果没有缓存的话,就创建一个空的构造方法。省去了构造方法的创建步骤,反射会导致计算机性能严重的下降。
Field类 首先创建一个类的实例,然后同反射机制取得成员变量,然后通过成员变量的get方法取得该实例对应的成员变量的值。fieldY不是对象身上的变量,而是类上的。getDeclaredField可以过得私有的成员变量,然后同成员变量的setAccessible(true)让变量可以访问。(暴力反射)
RefectPoint rp =new RefectPoint(3,4); Field fieldY=rp.getClass().getField("Y"); fieldY.get(rp);
反射综合案例
public static void changValue(Object obj) throws Exception{
Field[] fields=obj.getClass().getFileds();
for(Field field:fields){
if(field.getType()==String.class){
String oldValue=(String)field.get(obj);
String newValue=oldValue.repalce("b","a");
field.se(obj,newValue);
}
}
}
Method类 方法属于类,反射先取得方法,然后针对实例去调用方法。谁拥有数据,谁就拥有方法,即专家模式。调用静态方法时:invoke(null,param)。
反射调用charAt方法: Method methodCharAt =String.class.getMethod("charAt",Int.class); methodCharAt.invoke(str1,1); invoke是方法对象身上的方法。
对于接受数组元素的成员方法进行反射,运用反射是因为有些类需要动态的启动,某些类是需要相关参数指定的。
Method methodMain=Class.forName(startingClassName).getMethod("main",String[].class);
methodMain.invoke(null,new Object[](new String[]{"111","333","4444"}));或methodMain.invoke(null,(Object)(new String[]{"111","333","4444"}));
数组与Object的关系及反射类型
Object是数组的超级类,Object是一个一元数组类。 int a[];Object oa=a;工具类Arrays.asList(数组),如果是String(符合1.4)类型,可以转换成数组,int(按1.5,作为一个参数)数组则不可以转换。
具有相同维数和元素类型的数组是同一类型,即拥有想的Class实例对象。代表数组的Class实例对象的getSuperClass()返回的父类为Object的Class。非基本类型的一维数组既可以当做Object使用,也可以单做Object[]使用。
Arrays工具类用于完成对数组的反射操作。
public static void printObject(Object obj){
Class clazz =obj.getClass();
if(clazz.isArray()){
int len=Array.getLength(obj);
for(int i=0;i<len;i++){
System.out.println(Array.get(obj,i));
}
}else
System.out.println(obj);
}
ArrayList HashSet的比较和hashCode的分析
List集合为有序集合,Set为无序集合,所以List中可以存在相同的元素,但是Set集合中不可以。hashCode作用:通过算出的hashCode将数据分成若干个数据,只有存储集合石Hash集合,hashCode才有价值。不要改动和hashCode值相关的字段,一旦改动HashCode值,那么就无法移动原来的数据,就会导致内存泄露。
框架的概念及其用反射技术开发框架的原理
使用别人写的类的两种方式,第一种你去调用别人写的类(工具),第二种别人调用你写的类(框架)。
InputStream ips =new FileInputStream("config.propertis");
Properties pp =new Properties();
pp.load(ips);
ips.close();//此处关闭的是输出流想关联的资源对象,而它本身的回收是通过GC机制回收的。
String className=pp.getProperty("className");
Collection collection =(Colleciton)Class.forName(className).newInstance();
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------