黑马程序员技术交流社区
标题:
内部类的一些问题
[打印本页]
作者:
张敬培
时间:
2013-1-15 16:05
标题:
内部类的一些问题
为什么方法内部类中的方法要调用外面的局部变量,局部变量要使用final来修饰? target 和adrice
//得到一个代理类
public static Object getProxy(final Object target, final Advice advice){
// 创建一个proxy类的对象,
Object proxy = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),//接口
//InvocationHandler类的对象,使用匿名内部类创建
new InvocationHandler() {
//重写了invoke方法
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
advice.before();
Object objVal = method.invoke(target, args);
advice.after();
return objVal;
}
});
return proxy;
}
复制代码
作者:
yong230
时间:
2013-1-15 16:27
Java中final修饰符既可以修饰类、方法,也可以修饰变量,基本规则如下:
1)用final修饰的类不能被扩展,也就是说不可能有子类;
2)用final修饰的方法不能被替换或隐藏:
①使用final修饰的实例方法在其所属类的子类中不能被替换(overridden);
②使用final修饰的静态方法在其所属类的子类中不能被重定义(redefined)而隐藏(hidden);
3)用final修饰的变量最多只能赋值一次,在赋值方式上不同类型的变量或稍有不同:
①静态变量必须明确赋值一次(不能只使用类型缺省值);作为类成员的静态变量,赋值可以在其声明
中通过初始化表达式完成,也可以在静态初始化块中进行;作为接口成员的静态变量,赋值只能在其
声明中通过初始化表达式完成;
②实例变量同样必须明确赋值一次(不能只使用类型缺省值);赋值可以在其声明中通过初始化表达式
完成,也可以在实例初始化块或构造器中进行;
③方法参数变量在方法被调用时创建,同时被初始化为对应实参值,终止于方法体(body)结束,在此
期间其值不能改变;
④构造器参数变量在构造器被调用(通过实例创建表达式或显示的构造器调用)时创建,同时被初始化
为对应实参值,终止于构造器体结束,在此期间其值不能改变;
⑤异常处理器参数变量在有异常被try语句的catch子句捕捉到时创建,同时被初始化为实际的异常对象
,终止于catch语句块结束,在此期间其值不能改变;
⑥局部变量在其值被访问之前必须被明确赋值;
方法参数target 和adrice用final修饰 说明在它们一旦初始化,在整个方法执行期间,它们的值都不会改变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2