Day3
JAVASE基础
final 关键字用法
-
一,修饰类
- 不能有子类
- final类中的所有方法无法覆盖重写
-
二,修饰方法
- 不能覆盖重写
- abstract 和 final 不能同时使用
-
三,修饰局部变量
- final使用局部变量,终生不能更改
- 对于基本类型来说,不可变说的是数值不可变
- 对于应用类型来说,不可变说的是变量中的地址不可改变(但是地址里的内容是可以变的)
-
四,修饰成员变量
- 用final之后必须手动赋值
- 要么直接赋值,要么通过构造方法赋值
- 必须保证所有构造方法都对final变量进行赋值
四种权限修饰符
public | protected | (defult) | private | |
---|---|---|---|---|
同一个类(我自己) | YES | YES | YES | YES |
同一个包(我邻居) | YES | YES | YES | NO |
不同包子类(我儿子) | YES | YES | NO | NO |
不同包非子类(陌生人) | YES | NO | NO | NO |
//(defult)是直接不写
内部类
-
成员内部类
- 就是嵌套类
- 注意:内用外随意,外用内需要内部类对象
-
内部类方法访问外部类的重名成员变量
- 外部类名.this.外部类成员变量
-
局部内部类
- 只有当前所述方法才能调用局部内部类
-
注意,定义一个类时权限修饰符规则
- 1,外部类:public / private
- 2,成员内部类:public / protected / (default)/ protected
- 3,局部内部类:什么都不能写
-
局部内部类如果要访问所在方法的局部变量
- 那么这个变量必须是【有效final】的,不能变
- (是为了解决生命周期问题,因为变量生命周期短于内部类,只要变量是不变的,那么内部类就可以直接复制一份来用,但如果变了的话就不行了)
-
匿名内部类(最重要)
- 接口名称 对象名 = new 接口名称(){
//覆盖重写所有的方法
};
-
相当于省去了实现接口的过程,不用实现一个具体名字的类 直接
new
完大括号里定义类即可 -
注意大括号后边的
分号
别丢 -
匿名对象和匿名内部类不是一回事
equals 和 == 的区别
-
==判断符串是否相等
对基本类型比较的是数值
对引用类型(new出来的判断的是地址值是否相等)- 更新一波理解,等号判断的只是等号左右的地址是否相同,而上文所以及的基本类型和引用类型的区别在于他们在内存中存在的形式不同,才造成两种表现。
- 基本类型的存储是共享的,所以如果相同的话,必定是两个基本类型指向内存中的同一块地址,所以本质上依然是地址相同,而不仅仅是比较值相同。
- 这样理解可以可以统一java中
==
的作用: - 有且只有比较地址是否相同的作用。
-
equals判断串相等
- 只比较内容是否相等
-
equals使用时推荐常量写前面
"abc".equals(str1);
- 防止变量值为空,会报错,空指针异常
-
注:equalsIgnorceCase是忽略大小写比较字符串