真正的JAVA
2025年1月12日大约 2 分钟
面向对象
类是创建对象的模版:(以一套特定的规则来创建对象的模版)
对象是类的实例(在特定的规则下所创建的对象)
#非primitive变量只会将变量名保存在栈上,而对象在堆上
子类继承的方法可以被覆盖,实例变量不可以被覆盖
super关键字(了解了前两个使用方法)
在 Java 中,super 关键字是一个非常重要的概念,主要用于访问父类的属性和方法。它在继承关系中起着关键作用,允许子类与父类之间进行交互。以下是对 super 关键字的详细解释:
1. 访问父类的属性
当子类和父类中有同名的实例变量时,可以使用 super 关键字来区分它们。通过 super,子类可以访问父类的实例变量。
2. 访问父类的方法
如果子类重写了父类的方法,但在某些情况下仍然需要调用父类的方法,可以使用 super 关键字来实现。
3. 调用父类的构造函数
在子类的构造函数中,可以使用 super() 来调用父类的构造函数。这通常用于初始化父类的属性。
this关键字:
前提:this的使用在一个方法里,且存在一个类,用this.变量名来访问实例变量的值
目的:改变实例变量,然后可以用改变后的实例变量进行操作
new关键字:
格式:类名 对象名(这会将dog类的实例化对象的引用传递给这个变量名,即可以将此变量名当成类名使用) = new 方法名(在指定类中的方法) 参数
自动调用setter或getter的条件
- 其中 getter 方法需满足条件:方法名长于 4、不是静态方法、以
get开头且第4位是大写字母、方法不能有参数传入、继承自特定类,此属性没有 setter 方法;
特定类:Collection|Map|AtomicBoolean|AtomicInteger|AtomicLong - setter 方法需满足条件:方法名长于 4,以
set开头且第4位是大写字母、非静态方法、返回类型为 void 或当前类、参数个数为 1 个。具体逻辑在com.alibaba.fastjson.util.JavaBeanInfo.build()中。
若是没有setter方法,依旧想在反序列化时给变量赋值,则用Feature.SupportNonPublicField参数。
fastjson因为引进了AutoType功能,在对json字符串反序列化的时候,会读取到type到内容,将json内容反序列化为java对象并调用这个类的setter方法。