北京圣思园_Java SE Lesson 9


Java SE Lesson 9

 

反射:第 1 步:获得Class 的对象, 要想使用反射,首先需要获得待处理类或对象所对应的Class对象。

 

2.  获取某个类或某个对象所对应的Class对象的常用的3种方式:

a)  使用Class类的静态方法forNameClass.forName(java.lang.String);

b)  使用类的.class 语法:String.class;

c)  使用对象的getClass()方法:Strings = aa; Class<?> clazz = s.getClass();  这种方式必须先有对象 Object中的 getClass()并不是静态的, fina 不可以被重写的。

 

Class<?>  classType  =  object.getClass(); // 第三种方式 生成 Class 对象

 

Constructor cons =classType.getConstructor(new Class[]{});

Object obj =cons.newInstance(new Object[]{});

 

// 以上两行代码等价于下面一行,但是 下面的一行代码只能生成构造方法不带参数的对

// Object obj2 = classType.newInstance();

 

 

3.  若想通过类的不带参数的构造方法来生成对象,我们有两种方式:

a)  先获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:

Class<?> classType =String.class; 

Object obj = classType.newInstance();

b)  先获得Class对象,然后通过该对象获得对应的Constructor对象,再通过该Constructor

对象的newInstance()方法生成:

Class<?> classType =Customer.class; 

Constructor cons =classType.getConstructor(new Class[]{});  

Object obj = cons.newInstance(newObject[]{});

 

4.  若想通过类的带参数的构造方法生成对象,只能使用下面这一种方式:

Class<?> classType =Customer.class; 

Constructor cons =classType.getConstructor(new Class[]{String.class, int.class});  

Object obj = cons.newInstance(newObject[]{“hello”, 3});

 

5. Integer.TYPE 返回的是int,而Integer.class返回的是Integer 类所对应的Class象(class java.lang.Integer)。

 

 

Class 中的 getFiled() 返回的是 Public 修饰的属性, getDeclaredField()返回的是所有的属性,包括Private 修饰的属性。

 

注意:运用 primitive wrapper classes TYPE 语法

 Class c1 = Boolean.TYPE;  表示的是 Boolean 的原生数据类型boolean对应的Class对象。

而要得到 Boolean 类的对应的Class 对象是 : Class c2 = Boolean.class

 

 

Java SE Lesson 10

 

动态代理:

 

1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法

2.创建被代理的类以及接口

3.通过Proxy的静态方法newProxyInstance(ClassLoaderloader, Class[] interfaces, InvocationHandler  h) 创建一个代理

4.通过代理调用方法

 

Java 注解(Annotation )

 

a) Override注解表示子类要重写(override)父类的对应方法。

b) Deprecated注解表示方法是不建议被使用的。

c) SuppressWarnings注解表示抑制警告。

3.  自定义注解:当注解中的属性名为value 时,在对其赋值时可以不指定属性的名称而直接写上属性值即可;除了value以外的其他值都需要使用name=value这种赋值方式,即明确指定给谁赋值。

4.  当我们使用@interface关键字定义一个注解时,该注解隐含地继承了java.lang.annotation.Annotation接口;如果我们定义了一个接口,并且让该接口继承自Annotation,那么我们所定义的接口依然还是接口而不是注解;Annotation本身是接口而不是注解。可以与Enum类比。

 

所有的注解 实现接口

 

Override                          @Retention(value = SOURCE)

SuppressWarnings                @Retention ( value = SOURCE)

Deprecated                          @Retention( value = RUNTIME)

Retention                            @Retention ( value =RUNTIME)

Target                  @Retention ( value= RUNTIME)

Documented                        @Retention( value = RUNTIME)

Inherited                             @Retention( value = RUNMITE)

 

 

 

 

java.lang.annotation
Enum RetentionPolicy

{    CLASS   RUNTIME    SOURCE    }

 

7.  JUnit4的执行的一般流程:

a)  首先获得待测试类所对应的Class对象。

b)  然后通过该Class对象获得当前类中所有public方法所对应的Method数组。

c)  遍历该Method数组,取得每一个Method对象

d)  调用每个Method对象的isAnnotationPresent(Test.class)方法,判断该方法是否被Test

注解所修饰。

e)  如果该方法返回true,那么调用method.invoke()方法去执行该方法,否则不执行。

 

8.  单元测试不是为了证明你是对的,而是证明你没有错误

 

9. Writing Secure Code(编写安全的代码):Input is evil。

 

 

 

java.lang.reflect
Interface AnnotatedElement

All Known Implementing Classes:

AccessibleObject,Class, Constructor,Field, Method

 

 

 

11. Java中的异常分为两大类:

a) Checked exception  (非 Runtime Exception)

b) Unchecked exception(Runtime Exception)

 

12.  Java中所有的异常类都会直接或间接地继承自Exception。

 

13. RuntimeException类也是直接继承自Exception类,它叫做运行时异常,Java中所有的运行时异常都会直接或间接地继承自RuntimeException

 

14.  Java 中凡是继承自Exception而不是继承自RuntimeException的类都是非运行时异常。

 

16. 对于非运行时异常(checked  exception),必须要对其进行处理(不处理就会有一个错误),处理方式有两种:第一种是使用try.. catch…finally 进行捕获,捕获后程序会继续往下执行;第二种是在调用该会产生异常的方法所在的方法声明throws Exception , 如果在 main ()中有 throws Exception 就会有虚拟机来处理,虚拟机 会暂停程序的执行。

 

17. 对于运行时异常(runtime  exception),我们可以不对其进行处理,()也可以对其进行处理。推荐不对其进行处理。

 

18.  NullPointerException是空指针异常,这就是个运行时异常。出现该异常的原因在于某个引用为null,但你却调用了它的某个方法。这时就会出现该异常。

 

 






 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值