黑马程序员---Java高新技术1

 ------- 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学习型技术博客、期待与您交流! ------------

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值