final 匿名内部类等
简述final作用
final:最终的
修饰类:不可被继承
修饰方法:表示方法不可被子类覆盖,但是可以重载
修饰变量:表示变量一旦赋值就不可以更改它的值
1修饰成员变量
如果修饰的是类变量,只能在静态初始化块中指定初始值或者生命该类变量时指定初始值
如果final修饰的时成员变量,可以在非静态初始化块、声明变量时或者构造器中执行初始值
即final int b=0;
或{
b=0;
}
static{
b=0;
}
系统不会为局部变量进行初始化,局部变量必须由程序员进行显示初始化,因此使用final修饰局部变量时,即可以在定义时指定默认值,也可以不指定默认值,而在后面的代码中对final变量赋初值(仅一次)
3修饰基本类型和引用类型数据
如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改
如果是引用类型的变量,则在其初始化之后便不能再让其指向另一个对象
即如果是引用类型变量可以对里面属性进行修改而不能改变它指向的地址
为什么局部内部类和匿名内部类只能访问局部final变量?
因为外面的方法执行完了 而里面的没有执行
内部类和外部类是同一个级别的,内部类不会因为定义在方法中就会随着方法的执行完毕就被销毁
这里产生问题,当外部类方法结束时,局部变量就会被销毁了,但是内部类对象可能还存在,这里就出现了一个矛盾:内部类对象访问了一个不存在的变量。为了解决这个问题,jvm就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡后,内部类仍可以访问它,实际访问的是局部变量的copy
将局部变量复制为内部类成员变量时,怎样保证两个变量是一样的,就将局部变量设置为final,对它初始化后,我就不让你再去修改这个变量,就保证了内部类的成员变量和方法的局部变量的一致性,实际也是一种妥协,使得局部变量与内部类内建立的拷贝保持一致
匿名内部类是创建某个类型子类对象的快捷方式
格式 new 父类或接口(){
//进行方法重写
}
已经存在的父类
public abstract class Person(){
public abstract void eat();
}
定义并创建 该父类的子类对象,并用多态的方式赋值给父类引用
Person p=new Person(){
public void eat(){
System.out.println('我吃了');
}
}.eat();//可直接调用eat方法
使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,。虽然是两个步骤,但是两个步骤是连在一起完成的。
原文地址:https://www.cnblogs.com/wzjdbk/p/15012874.html
- .NET4.0下网站应用程序用UrlRewriter.dll重写无后缀路径 (在IIS7.5中的配置方法)
- 苹果为你的心跳开发一个读者
- 建立可扩展的silverlight 应用框架 step-5
- 安卓 iOS 版双双更新!还带来一大波小游戏
- 建立可扩展的silverlight 应用框架 step-4
- 全自动驾驶,吹牛容易实现难!有90%的人都不了解这些细节
- .NET4.0下web应用程序用UrlRewriter.dll重写无后缀路径
- Silverlight中摄像头的运用—part2
- 区块链小白投资入门操作指南(上)
- 《我的WCF之旅》博文系列汇总
- 网站出现“Service Unavailable”提示该如何解决
- Silverlight 4 中摄像头的运用—part1
- Silverlight 4 中摄像头的运用—part1
- Silverlight 4 中数据绑定发生的变化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法