主要学习自:https://www.pdai.tech/md/java/basic/java-basic-lan-basic.html;附加一些其他文章参考引用和个人碎片式总结。
Java—面向对象:
三大特性:封装、继承、多态。
封装:用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象、private 修饰类中的属性,4种修饰符。
继承:继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。只能继承一个父类,但可以实现多个接口。
多态:多态分为编译时多态和运行时多态。编译时多态主要是方法的重载;运行时多态主要是继承,重写、向上转型:https://www.cnblogs.com/chanchan/p/7787453.html
Java—知识点
数据类型
整型:byte 1个字节 范围在(-128~127) 、short 2个字节 范围在(-2^16~2^16-1)、int 4个字节 范围在(-2^32~2^31-1)、long 8个字节 范围在(-2^63~2^63-1)
浮点型:float 4个字节 范围在(-3.4*10^-45~3.4*10^38)、double 8个字节 范围在(-1.79*10^-308~1.79*10^308)
字符型:char 1个字节 范围在(0~65535)
布尔类型:boolean (true/false)
基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。
Integer x = 2; // 装箱
int y = x; // 拆箱
缓存池
编译器会在缓冲池范围内的基本类型自动装箱过程调用 valueOf() 方法,因此多个 Integer 实例使用自动装箱来创建并且值相同,那么就会引用相同的对象。
String
被声明为final,不可被继承,不可修改。private final char value[];
String.intern()可以保证相同内容的字符串变量引用同一的内存对象。
存储位置:Java7之前,字符串常量池在运行时常量池中,之后放在本地方法区,在堆中。
另外一篇从JVM存储角度分析String类的文章:https://blog.csdn.net/qq_41907991/article/details/106799400
参数传递
Java中参数以值传递形式传入方法。比如传递对象时传入的是对象的地址的值传给了形参,方法内是一个新的对象。
抽象类
抽象类和接口:
抽象类和普通类:
super可以访问父类的构造函数,成员,包括属性和方法
重写发生在继承关系中的子类里,方法的访问权限和返回值的范围都要大于等于父类;重载发生在同一个类中,方法名和返回值相同,但参数的类型,个数,顺序有所不同
Object通用方法:
public final native Class<?> getClass()
public native int hashCode()
public boolean equals(Object obj) 引用比较和值比较
protected native Object clone() throws CloneNotSupportedException 浅拷贝和深拷贝:区别在于是否在堆中生成新的对象内容。
最好不要去使用 clone(),可以使用拷贝构造函数或者拷贝工厂来拷贝一个对象。Effective Java
public String toString()
public final native void notify()
public final native void notifyAll()
public final native void wait(long timeout) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException
public final void wait() throws InterruptedException
protected void finalize() throws Throwable {}
反射
各种框架中都用到反射来达到通用的目的。分享一下:https://www.sczyh30.com/posts/Java/java-reflection-1/
异常
try-catch、throws、throw
泛型(暂)
https://www.cnblogs.com/coprince/p/8603492.html
注解(暂)
https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html
SPI机制(破坏了双亲委派模型)