final
最终的,最后的,不可变的
修饰类 : 太监化,不能有子类
与abstract关键字矛盾(抽象类不能直接用,一定要有子类)
修饰局部变量(局部常量) :只能赋值一次
对于基本数据类型而言,不可变指:值不可变
对于引用数据类型而言,不可变指:地址不可变
修饰全局变量(全局常量) :在创建时就必须手动赋值(使用final关键字,不会再有默认值,所以需要手动赋值)。要么使用直接赋值 ,要么通过构造方法 赋值
类别 | 命名规范 |
---|---|
项目名 | 全部小写 |
包名 | 全部小写 |
类名 | 大驼峰 |
变量名,方法名 | 小驼峰 |
常量名 | 全部大写,下划线分隔 |
所有命名规则必须遵循以下规则 :
在Java编程规范中要求开发人员在自己定义的包名前加上唯一的前缀(为了保障每个Java Package命名的唯一性)。由于互联网上的域名称是不会重复的,所以多数开发人员采用自己公司在互联网上的域名称(一般是反过来用,比如com.baidu
)作为自己程序包的唯一前缀
com
:公司项目,copyright由项目发起的公司所有.team
: 团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有.indi
: 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者(也有公司写作onem
)
包名 : indi.发起者名.项目名.模块名…
pers
: 个人项目,指个人发起,独自完成,可分享的项目,copyright主要属于个人.
包名 : pers.个人名.项目名.模块名…
priv
: 私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人.
包名 : priv.个人名.项目名.模块名
四类分别对应: 我自己 、我邻居 、 我儿子 、 陌生人
private
私有的意思,只能自己内部调用(default)
缺失的意思,之前说过,同包连导包语句都可省,省个权限修饰符也没什么毛病吧protected
保护的,父子间血脉是受保护的一个类内部,包含另一个类。这个里面的类,就叫做内部类
为什么要有内部类?心脏
可以看做一个类吧?脱离了身体
类,它就没有意义。所以心脏类
就是一个内部类。
分类:
内部类和外部类的格式一模一样
public class 内部类名称 {}
内部类的使用,可以分为间接使用 和直接使用 两种方式
// 直接使用的格式
外部类.内部类 对象名 = new 外部类().new 内部类();
内部类究竟是怎样的存在?或者说,内部类究竟在编译过程中,发生了什么?
外部类$内部类
的形式外部类访问内部类很好办,因为要通过内部类对象。
内部类如何访问外部类的重名变量呢?
外部类名.this.重名变量;
局部内部内核成员内部类就是放的位置不一样,注意这个内部类只能在这个方法内。
小提示: 其实可以通过这个方法,return一个Object,然后向下转型。但是这样做很麻烦,不提倡。
public
、(default)
public
、protected
、(default)
、private
(default)
的意思)问题来了: 如果这个局部内部类要用局部变量咋办?局部变量消失后
解决办法: 让这个局部内部类,把需要的局部变量复制一份(当然这个复制的动作不需要我们做)。如果这个局部变量会变的话,复制哪个?所以,不能让它变,要加上final
关键字
从
Java8
开始,final
可以省略不写。(这叫【有效final】)
如果接口的实现类(或子类)只需要使用一次,就可以使用匿名内部类
接口名称 对象名 = new 接口名称() {
// 重写所有抽象方法
}
匿名内部类省略的是类名称 (省略了实现类/子类名称),而不是对象名称 。下面这个两个都省了,叫做匿名对象匿名内部类
new 接口名称() {
// 重写所有抽象方法
}
匿名内部类 是在创建对象时,只能使用唯一一次
匿名对象 是在调用方法时,只能使用唯一一次
以下为了方便,我没有使用标准格式(私有化+Getter/Setter,这样代码看上去也不至于凌乱)
当然,还可以使用匿名对象进一步简化
素材在我上传的文件里,包括图片和接口。