由于都是看课件,看到哪里想到哪里,并不包含整个章节的知识点。
基本数据类型小写开始,对象数据类型大写开始。
基本数据类型:没有ID,但有值。如int,long,double,boolean,char(不可变)
对象数据类型:既有ID,又有值。
对象的实际内存都是分配在heap中,局部变量中的对象类型,引用保存在栈中,对象本身是分配在heap中。
- 静态成员变量在metaspace中,metaspace不在堆中,直接使用操作系统内存。
- 其余的所有对象类型(成员变量和方法中的局部变量)都在heap中;
- 方法中的基本数据类型(局部变量),在栈中;
- 成员变量中的基本数据类型,跟所在对象一起,放在heap中。
Object类是所有类的基类。所有类默认都继承了 Object类。
子类是父类的一个实例, 如 Student 和 Teacher 都可以设计为Person的子类。
LSP包含以下四层含义:
1.子类完全继承父类的方法,且具体子类必须实现父类的抽象方法。
2.子类中可以增加自己的方法。
3.当子类重写或实现父类的方法时,方法的形参要比父类方法的更为宽松。
4.当子类重写或实现父类的方法时,方法的返回值要比父类更严格。(返回类型与父类一样或为父类返回类型的子类)
重写(override):子类重写父类的方法,改造成自己的方法,对象调用时,根据对象属于哪个类确定调用的是哪个方法。
重写原则:
1. 重写方法不能比被重写方法限制有更严格的访问级别。如父类为public,子类必须为public以上,不能是private。
2. 参数列表必须与被重写方法的相同。
3. 返回类型必须与被重写方法的返回类型相同。若重写后的返回类型是父类返回类型的子类也可以。即导出类(子类)覆盖(即重写)基类(父类)方法时,返回的类型可以是基类方法返回类型的子类。如:父类为number子类可为double,int等。
4. 重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
此外,不能重写final方法。
重载:同一个类中同一方法名字根据参数不同可同时拥有有多个同名方法,如Play(int)与Play(String)
字符串合并:用+号即可,如:String text = “hello” + " world";
– text = text + " number " + 5; // text = “hello world number 5”
强转:注意double a = 2/3;结果a=0.0,因为2/3默认为(int)2/(int)3,结果为0,再变为double,应该直接double a = (double)2/3。
Static checking编译时可发现的错误
语言检测:
1.错名称:Math.Sine()
2.错数据声明:Math.sin(20,50)
3.错参数数据类型Math.sin(“50”)
4.错误的返回类型
动态检查(Dynamic checking)运行时才能发现的错误
动态检查:非法的参数,超出范围的索引值,调用空对象的方法
静态检查针对类型,与变量特定值无关的错误,但某些变量的值只有运行时才会知道。动态检查针对由特定值引起的错误
Mutability and Immutability(可变性与不变性)
改变变量和改变值的区别。对变量赋值是在改变变量的指向,指向不同的值,在当前存储空间写入新值。改变可变变量的内容时 ,是在改变变量内部内容的引用。
对象:一个类的具体实例化;
引用:对象的别名,使用该别名可以存放该对象,编译器不会为引用分配空间,新对象与源对象共用一个存储地址空间;引用的生命周期是它所引用的对象的生命周期,函数里返回一个局部对象的引用是很危险的。
可变对象:拥有方法修改自己的值/引用。
不可变对象:一旦被创建就始终指向同一个值的引用
变化指对指向或存放数据类型的变化,如List<>,Date是可变的,Instant, LocalDateTime,与基本类型等是不可变的。
(CCP) The Common Closure Principle
一个包中的所有类针对同一种变化是封闭的
一个包的变化将会影响包里所有的 类,而不会影响到其他的包
如果两个类紧密耦合在一 起,即二者总是同时发生变化,那么它们就应属于同一个包
(CRP) The Common Reuse Principle
一个包里的所有类应 被一起复用
如果复用了其中一个类,那么就应复用所有的类
Pseudocode伪代码
不允许在包依赖 图中出现任何圈/回路
无圈将容易 进行测试、维护与理解
若存在回路依赖,很难预测该包的变化将会如何影响其他包
包之间的依赖关系只能指向稳定的方向,被依赖者应更稳定于依赖者。
稳定的包较难发生改变。如果不稳定的包却被很多其他包依赖,会导致潜在的问题。
(SAP) The Stable Abstraction Principle
在稳定性与抽象度之间建立关联。一个包是稳定的,那么它就 应该尽可能抽象。一个完全稳定的包中只应包含抽象类。不稳定的包应是具体的,以便于容易的进行修改。
SAP和SDP共同构成了包之间的“ 依赖倒置原则DIP”
(SDP: 依赖应指向稳定的方向,SAP: 稳定性隐含着抽象。因此,依赖应指向抽象的方向)