JAVA 基础加强2

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

1、if(field.getType == String.class)因为两个是同一个字节码的文件成员方法的反射先得到方法然后
再通过某个对象去调用这个方法,得到某个类中的方法。
 Method charAt = class.forName("java.lang.String").getMethod("charAt",int.class);
 调用方法:通常是System.out.println(str.charAt);
 反射方法:System.out.println(charAt.invoke(str,1));

 Method mthod = String.class.getMethod(CharAt,int.class)
 获取String中的char方法,方法中的值是int
 Method代表一个方法然后再用这个方法的方法去调用invoke方法,去得到str中的第一个位置上的元素。
 注:如果传递给了Method对象的invoke方法的第一个参数为null说明Method独享应为一个static方法。
2、在JDK1.4中的写法是Method。invoke(Str1.new Object[]{2});//代表的是Int类型自动装成了Integer
3、对数组成员的方法进行反射:
 每个数组的父类都是Object写一个程序让用户能够根据用户提供的类名,去执行该类中的main方法
 (1)、打包成一个数组。
  解决mainMethod.invoke(null,new Object[]){new String[]{"xxxx"}};
 (2)、mainMethed.invoke(Object)new String[]{"xxxx"};
 编译器会做特殊的处理编译时不会把参数当成数组来看待,也就是说不会吧数组打散成若干个参数。
 每一个数反射出来的都是同一个class,是具有相同的类型和纬度的
4、数组的反射:
 通过程序可以看出不管是什么样类型的数组,而且不管是几维数组,都是Object的子类 但是一维数组中
 的基本数据类型数组不是Object类型的数组 其他的都是。
 用asList可以把字符串类型的数组转成集合类型,但是不能把整数类型的数组转成集合,因为除了基本数据类型的
 数组雨雾全部都是Object类型数组而aslist在1.4中就是传递进去一个Object类型的数组,而在1.5中不是传递进去
 一个Object类型娿数组,而是传递进去一个Object类。
5、代表数组的class实例对象的getSuperclass 方法会会父类为Object类对应的class
6、基本数据类型一维数组可以被当做Object类使用,不能当成Object[]使用,非基本类型的一维数组即可当成Object类型使用,
即可当成Object使用。
7、Array工具类用于完成对数组的反射操作。
没有办法得到数组中元素的类型,但是可以得到数组中某一个元素的类型
8、ArrayList 和HashSet 的比较及HashCode的分析。
ArrayList是有序的  是指的是位置的顺序。
HashSet 是看集合中有没有要放置的对象,如果有,就不放进去,如果没有 就放进去。
HashCode的作用,是将集合分成如干个存储区每个对象可以算出哈希吗
可以将哈希吗分组,分组分别对应某个存储区中,根据一个对象的哈希吗就可以确定该对象应该存储在哪一个区中
如果两个对象的equals是相同的,也让HashCode相同,前提是使用了hashSet集合
如果去更改了独享的hashcode的值,这个对象就无法删除,同为hash值改变了无法找到这个独享了,如果不该hash值就可以删除
内存泄露 是一个对象不去使用了 但是并没有释放其空间,
9、框架概念及反射开发框架的原理:
 在写自己累的时候 框架已经存在了是yoga框架的时候还不知道有一个新的类所有在使用的时候要想把其存到一个配置文件中
 然后利用反射forName得到那个类的Instance  一个新的独享 因为已经知道是建立了一个已知类的对象 所以要进行强制转换
  通过类加载器来加载配置文件。class(字节码文件)。getClassLoader。getResource()。asStream()
  如果要用到类的加载器去加载就的写上全部路径  而通过类加载器只需协商文件名即可
10、内省:
 Introspector 主要用于对JAVABean的操作
 JAVaBean是特殊的java类 方法的名称是符合某种规则 javaBean的属性石根据方法名称来的
 javaBean的命名跪着 是去掉前缀后,入股第二个字母小写 测吧第一个字母也变成小写。
 javabean通过议会存储器丰富导出一个字母变成小写。
 另外一种方法:用遍历BeanInfo的所有属性方式来查找和设置某个RefectPoint对象的属性在程序中把一个类当
 做javabean来看,就是调用Introspector。getBeaninfo方法得到
 beaninfo对象 封装了把这个类当做javabean看做的结果
 javaBean  BeanUtils工具包,可以是类型转换自动完成
 Propertyutils是艺术性本身类型进行操作的。
 BeanUtils是以字符串形式对javabean进行操作的

11、注释:
 一个注解就是一个类。
 (1)、Override覆盖
 (2)、Deprecated过时的
 (3)、SuppressWarnings 不去在意的警告
 作用:是在编译的时候向编译器传递一种信息,注解相当于一种标记,加上了注解就等于打上了某种标记
 没有加注解测表示没有这种标记,以后javac编译器开发工具盒其他的程序可以用反射来了解你的类,以及各种袁术上有无
 任何标记,看你与有什么样的标记有去干详单的事 标记可以加在包 类字段方法的参数上,以及局部变量上。
 注解的注解称为元注解
 @Retention说明注解的生命周期
 生命周期分为三个阶段:
  RetetionPolicy。SOURCE 源文件阶段
  RetetionPolicy。class  字节码文件阶段
  RetetionPolicy。runtime  运行阶段
 默认值是class阶段
 @Target是注解这个注解。注解在哪上?是方法还是类型上。(作用在成分上)ElementType 。Method作用在方法上
 Type作用在类上。
 为注解增加属性。如果只有value属性 在注解中可以直接调用如果有两个属性的时候,可以把某一个属性设置为缺省
 值然后再去调用
  如果数组元素中只有一个元素,这个时候属性值部分可以省略大括号
  枚举类型的属性的返回值必须是枚举类型的一个实例
  注解类型的返回值为注解 而返回的那个注解上还有一个属性。
12、泛型:
 使用泛型是在定义泛型类的时候就明确是什么样的类型,这样就可以节省了强制转换的麻烦
 泛型是提供给javac编译器使用的 可以限定集合中的输入类型,让源程序挡住程序中非法输入 编译器编译带类型的说明是去除掉类型的信息
  只要跳过编译器,就可以往某个泛型的类型中加入其它的类型的数据。
  在没有使用泛型的时候后 不管是什么类型的对象殴打符可以存储用一个集合 但是使用了泛型集合之后  可以将一个几个钟的眼熟先动为一个特定
  类型 集合中只能存储同一个卡类型的对象的类型 不需要强制转换,这样更加的方便。
  泛型的定义和涉及的术语
  1、整个称为ArrayList<E>  为泛型类型
  2、E称为类型变量和类型参数
  3、整个Array<Integer>为参数化类型
  4、Integer称为类型参数的实例或实际类型参数
  5、<>念typeof
  6、ArrayList称为原始类型
  7、参数化类型和原始化类型的兼容性 可以相互引用
  8、参数化了性u考虑类型参数的继承关系
  9、在创建数组实例是数组元素不能使用参数化类型
 通配符<?>表示任意类型,使用后不能去调用与类型有关的方法,使用通配符可以引用 ,其他各种参数化的类型
 ?通配符定义的变量主要是作为引导可以调用与参数无关的方法 ,不能调用与参数有关的方法。
 可以把一个具体的类型传递给?但是不能把?传递给具体类型
13、set和map进行迭代:
 

haspmap<String.Integer> map = new HashMap<String Integer>
 map.put();
 map.put();
 Set<map.Integer<String.Integer>> mes = map.entrySet();
 for(Map.Entry<String Integer> me = mes)
 me.getKey();
 me.getValue();



14、自定义的泛型:
 泛型的实际类型只能是引用的类型,不能是基本数据类型
 在泛型中可以勇士有多个了性的参数  在定义他们的尖括号中用逗号分开。
 如果要想对一个类中的所有方法全部都相关联,也就是说每个方法操作的都是同一个的对象,泛型就要定义在类上
15、通过反射获得泛型的参数化类型
16、类的加载器:就是加载类的工具
    java虚拟机中可有多个类的加载器,系统中默认是三个主要的加载器
    三个主要的加载器是: BootStrap   ExtclassLoader   AppclassLoader
    每个加载器都是负责特定位置上的类。类的加载器也是java中的一个类,它去加载别的类,而java加载器的类是有BootStrap
    这个加载器所加载的。
    BootStrap不是一个类
    当一个类的加载器去加载类的时候先是传递了上级 先让上级去找是否有需要的类,如果没有找到 就返回到了泛起者
    还是没有找到的话就会抛出了ClassNotFoundException异常  这也就是委托的加载机制
17、模板方法设计模式:
 父类- Loadclass- findclass- 得到class文件的转化成的字节码-definclass
18、自己编写加载器的步骤:
 1、继承与classLoader 然后覆写其中的方法findclass
 2、然后用Loadclass返回一个字节码数组
 3、然后再用defineclass返回那个文件的字节码文件
19、分析代理类的作用和原理:
 代理的概念和作用:
  在已知的一个类的功能的前提下 为了扩展功能 就重新定义了一个类去覆写原来类中的方法
20、Aop是面向方面的编程:
 JVM虚拟机可以自动的生成代理如果想要生成一个没有接口的动态的代理就要使用CGLIB
 让JVM虚拟机创建动态的类需要提供哪些的信息:
  三个方面的信息:
   生成的类中有哪些的方法 通过让其实现哪些接口方式进行告知
   生成的类中的方法代码是怎么样的 也有我们自己去提供,把我们的代码写在一个约定好的接口
   对象中,把对象传递给它,它调用了我们的方法,即相当于调用了我们的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值