目录
1.JAVA关键字
ava关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息。Java语言共定义了如下所示的关键字。
1.1关键字:private
访问修饰符 — 私有的
1.修饰属性:该属性不能被外界访问,属性被封装在对象中
2.修饰方法:该方法不能被外界访问,方法被封装在类中
1.2关键字:this
1.调用属性:调用本对象的属性
2.调用方法:调用本对象所属类的方法
3.调用构造方法:调用本对象所属类的构造方法
ps :this(xxx):
1.传入参数不同,会自动匹配到对应的构造方法
2.只能写在构造方法中,并且是第一行
1.3关键字:static
static – 静态:
1.修饰属性:该属性被所有对象共享,属于类属性
生命周期:
创建:使用该类时,会把此类的.class文件加载到内存中(方法区),同时会扫描此类中的所有静态属性,并把静态属性加载到静态常量区里
销毁:整个项目结束时,就被销毁了
ps:static修饰的属性生命周期较长,慎用!可能会导致内存溢出的情况
应用场景:static + final
2.修饰方法:该方法被所有对象共享,属于类方法
应用场景:工具类
3.静态代码块
调用优先级:静态代码块 > 代码块 > 构造方法
应用场景:初始化
代码块:初始化没有参数的数据
构造方法:初始化带参数的数据
静态代码块:初始化没有参数的数据,只执行一次的情况下
什么时候调用静态代码块?
把.class文件加载到内存中时,就会调用静态代码块
ps:1和2的用法都是用类名直接调用即可
1.4关键字:super
1.调用属性:在子类里调用父类的一般属性
2.调用方法:在子类里调用父类的一般方法
3.调用构造方法:在子类里调用父类的一般构造方法
1.5关键字:final
1.修饰类:类不能被继承
2.修饰方法:方法不能被重写
3.修饰变量 - 常量:常量不能被重新赋值
命名规范:全部字母大写,单词与单词之间用下划线隔开
存储内存:常量池
应用场景:static + final : 常量类
面试题
String类为什么是final类?
原因:
1.字符串的不变性
2.用fianl修饰的类不可以被继承,方法不能被重写,JVM会认为此类里的方法为内联函数,调用的效率更高
2.继承
继承:子类继承父类一般属性和方法
在父类里用private修饰的属性和方法,子类是不能被继承的
应用场景:
当需求要求你去创建几个类时,这是就要注意,这几个类是否有相同的属性和方法,如果有,就创建个父类,把共同的属性和方法放在父类里
继承中的构造方法
问:创建子类对象,会调用父类的构造方法吗?
答: 会
问:创建子类对象是否会创建父类对象?
答:不会
问: 调用父类构造方法的目的?
答:在子类中开辟一个空间,用来存放父类的一般属性
问: 创建子类对象是否会创建父类引用?
答:不会,创建子类对象不会创建父类对象,父类对象都没有,何来的引用
问: 创建子类对象,先调用父类构造方法还是先调用子类构造方法?
答:先调用子类构造方法
3.重写和重载
3.1重写
应用场景:父类方法不满足子类需求时,考虑重写
条件:
1.在子父类关系的子类中
2.返回值、方法名、参数列表必须和父类重写的方法一致
3.访问修饰符不能比父类更严格
3.2重载
应用场景:同一个类中,方法功能一致,细节不一致,考虑重载
条件:
1.同一个类中
2.方法名相同
3.参数列表的类型或个数不同
4.与返回值无关
4.Object类
Object:基类、超类
所有类的祖先类,如果一个类没有明确继承的父类,默认继承Object
Object类:
equals:比较两个对象内存地址是否相同
hashCode:获取到对象在内存中的Hash值
getClass:获取当前类的字节码文件对象
toString:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
String类:
equals:比较两个字符串内容是否相同
toString:返回字符串内容
PS:注意object类下的equals和string类下的equals方法比较的方式。
5.访问修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。