JAVASE基础
程序员文章站
2024-03-23 14:54:40
...
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出来的判断的是地址值是否相等)
-
equals判断串相等
- 只比较内容是否相等
-
equals使用时推荐常量写前面
"abc".equals(str1);
- 防止变量值为空,会报错,空指针异常
-
注:equalsIgnorceCase是忽略大小写比较字符串
Object类
toString()方法
- 直接打印名字,其实就是调用toString
- 需要重写打印类属性
equals()方法
-
Object类中的equals方法还是用等号比较的,即依然是基本类型比较值,引用类型比较地址 -
所以String中的equals是重写过的
-
要比较值的话需要重写equals方法
-
更新认知------equals与==的区别在前文更新
上一篇: Java的split()函数
下一篇: C/C++inline函数