您的位置:首页 > 职场人生

黑马程序员之java学习笔记12

2014-08-03 13:54 197 查看
1. System.out.prinltn((String.class).getName())的结果是包括包名的类的全称,java.lang.String。

2. Integer.TYPE返回的int,而Integer.class返回的是Integer类所对应Class对象。其它包装类Byte,Long)(的情况也一样。

3.
反射能调用类的私有成员变量和方法,通过Method对象的setAccessibe(true)压制java访问权限的检查,使得private的方法也能调用,这就打破了类的封装性。

4. classType.getMethod(String name, Class<?>…paramete
4000
rType)只能返回该Class对象指定的public成员方法。而classType.getDeclaredMethod(String
name, Class<?>…parameterType)没有这个限制。

5.
反射方式调用类的私有方法具体操作:

  
Person p = new Person();

  
Class<?> clazz = p.class;

  
Method method = clazz.getDeclaredMethod(privateMethod, new Class[]{String.class}

  
method.setAccessibale(true);

Object obj = method.invoke(p, new Object[]{“hello”};

6.
反射方式改变类的成员变量的值:

 
Person p = new Person();

  
Class<?> clazz = p.class;

  
Field filed = clazz.getDeclaredField(“name”);

  
filed.setAccessiable(true);

  
field.set(p,”lisi”);

 

7. Class对象只能由JVM创建,Class对象是在类被加载后由JVM创建。

8.
代理模式的作用:为其他对象提供一种代理以控制对该对象的访问。

9.
代理的三种角色:抽象角色,真实角色,代理角色。抽象角色定义真实角色和代理角色的共同接口;真实角色是我们正在要使用的对象;代理角色里面要有真实角色的引用,同时可能定义一些附加的功能。

10.静态代理:事先知道要代理的真实对象。动态代理:事先不知道要代理的真实对象。

11.生成动态代理的步骤:

  
使用接口创建一个抽象角色类-à创建一个真实角色类实现抽象角色类的接口à创建一个代理角色类,实现接口InvocationHandler中invoke(Object
proxy, Method method,Object[] args)方法--à在客户端中的main方法调用Proxy的静态方法newProxyInstance(ClassLoader
loader, Class[] interface, InvocationHandler h)创建一个代理实例à通过代理实例调用抽象角色类的抽象方法,这时流程转给InvocationHandler类对象handler处理,调用handler的invoke方法,通过method.invoke(传进来的正真角色类的对象,args)来完成动态代理。其中proxy,method,args已在newProxyInstance方法中动态的生成好了。

12.
每一个Proxy实例都会相关一个InvocationHandler类实例,当在proxy
instance上调用一个方法时,就会去调用相关的InvocatioonHandler实例的invoke方法。

13. Proxy的静态方法newProxyInstance(ClassLoader loader, Class[]
interface, InvocationHandler h)会根据Class[] interface(类实现的接口)动态的生成一个类,并返回一个Object的代理实例。所以定义类有两种方式:一种是普通方式class
ClassName(){}这种方式,另一种是动态的生成类。

14.动态代理主要用到一个类和一个接口:InvocationHandler接口(invoke方法)和Proxy类(Proxy.newInstanceProxy方法)。

15.
不论是类还是接口都有.class方法,不论是类还是接口都有getClassLoader()方法。如,Foo是一个接口,也能这样使用Foo.class获得Class对象,Foo.class.getClassLoader()获取加载器。

16.
注解<Annotation>可以用在类上,也可以用在方法上,还可以用在属性上。

17.自定义注解类方式:

public @interface A{

   
String value();//定义的是一个value属性,只不过后面跟着(),一定得这种方式定义属性。

}

18.如何调用自己定义的注解

 

@A(value=”aa”)//@A(“aa”)

Public class AnnotationTest{

    
@A(value=”bb”)//@A(“bb”)

 

    
Public void getName(){

       
Return name;

 

}

1.      
小结:当且仅当注解类的属性为value时,在给属性赋值既可以@A(value=”aa”),也可以省去value,@A(“aa”),其他的属性名必须的@A(value=”aa”)这种方式。

2.      
@A({“aa”,”bb”,”cc”}),当属性值有多个时,必须得使用大括号,因为是数组。当是当个属性值时,为了简便,大括号可以省去,只使用小括号,如@A(“aa”),。

 

21 .3大常用注解:@Override,@Deprecated,@SuppressWarning

@Override注解表示被Override注解的方法必须得重写父类对应方法,父类没对应方法就会报错。

@Deprecated注解表示过时,不建议使用的意思。

@SuppressWarning(“unchecked”):表示压制括号内的警告。

22.
异常(Exception);定义在java.lang.Exception类中,异常分为两大类,运行时异常(Runtime
Exception)又称Unchecked Exception,非运行时异常(checked
Exception)该类是所有异常的父类。

23. Exception继承Throwable类,与Exception对应的是Erro类,Exception和Erro都是Throwable的子类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息