Java面向对象纪要

以下所有内容来自《疯狂Java讲义(第二版)》,本文为读后总结要点。

=========================================

静态成员不能直接访问非静态成员。

当系统加载类或者创建类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。成员变量放置在堆内存中。

局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。保存在其所在方法的栈内存中。

栈内存中的变量无须系统垃圾回收,随方法或代码块的运行结束而结束。

局部变量的作用范围越小,它在内存中停留的时间就越短,程序运行性能就越好。能用代码块局部变量的地方,就坚决不要使用方法的局部变量。

【继承】

如果程序员没有为Java类提供任何构造函数,系统会为这个类提供一个无参数的构造器,执行体为空,不做任何事情。

一旦程序员提供了自定义的构造器,系统就不再提供默认的构造器。

Java子类不能获得父类的构造器。

不管我们是否使用super调用来执行父类构造器的初始化代码,子类构造器总会调用父类构造器一次。

【多态】

Java引用变量有两个类型:编译时类型,运行时类型。如果两者不一致,就会出现所谓的多态

父类引用指向子类对象。

相同类型的变量调用同一方法时呈现出多种不同的行为特质,这就是多态。比如,动物都会叫,但是不同动物叫的声音不一样,这就生物多样性。

继承严重地破坏了父类的封装特性。

继承要表达的是一种“是(is-a)”的关系,而组合表达的是“有(has-a)”的关系。

初始化块在构造函数之前执行,多个初始化块按代码里的先后顺序执行。

1 {
2     System.out.println("初始化块");
3 }

静态初始化块在类初始化时执行。

1 static {
2     System.out.println("静态初始化块");
3 }

使用javac编译源码后,初始化块会被嵌入到每个构造器中代码的最前面。

有抽象方法的类必须定义为抽象类,抽象类不一定要有抽象方法。

==========END=========

原文地址:https://www.cnblogs.com/flyfly121/p/4698564.html