1.类成员属性的初始值
普通成员属性:
普通成员属性可以不用显示初始化即可使用,此时候成员变量的值为其类型的初始值。但被 final 修饰的成员属性为常量,需要在定义是初始化值。
引用成员属性:
引用类型都需要初始化后才可使用,因为引用类型的初始值为null,代表不具备存储数据的内存空间,直接使用会造成程序运行异常(比如:空指针异常)。
2.方法参数传递
java只有值传递。基本数据类型传递的是变量的具体的值。引用类型传递对象在堆空间的地址值。
3.可变API 与 不可变API
可变API:再分配内存空间之后,可以在自己的内存地址上修改数据,添加数据。
不可变API:在增加数据时,需要重新 分配内存。
4.对形参的操作是否会影响到实参
当方法中的形参在没有调用不可变API之前,形参的任何改变都将影响实
参的状态,而当形参执行了任何不可变API之后,形参和实参之间就断开
了这种状态联系
5.构造方法
一旦显式地定义了构造方法,默认构造方法自动消失,即便显式定义的构
造方法不是无参的。
6.this
对象被创建时会为其分配一个地址值,此地址空间内保存着对象的一些信息(如:属性,方法…),其中还有 一个this。this 代表着此对象所在的空间,是一个是实实在在的一个自身的引用。因此this跟其他引用一样,在外部使用时有权操作此对象公开的方法。
构造方法中调用this,必须在第一行。
7.private
成员访问控制符。被其修饰的变量和方法,只能在其本类的内部被使用。
8.继承
- 子类无法继承父类的构造方法
- 当构建子类对象时会优先隐式自动调用父类的无参构造方法,而且这个构建调用过程是从父类“向外”递归扩散的。
9.super
super 与 this 在一个方法中不可同时存在。
super不能当作引用传递给其他的调用者。
10.多态环境下对属性和方法的调用特点
调用属性:引用持有者,调用的属性是自身声明的类型的 属性。
调用方法:调用方法时,调用的是具体子类中的方法。
11.instanceof运算符
instanceof用来判断对象是否属于某个类的实例。(对象 instanceof 类)如果对象的类型是后面提供的类或其子类,则返回true,反之返回false。
12.类与类之间的关系
关联关系
关联表示has-a关系,如学生拥有一个课程,往往表现为B作为A的属性存
在。
依赖关系
依赖体现了“ use a”关系,如 方法的参数体系。
强弱关系
依赖 < 关联 < 聚合 < 组合
13.类成员的访问控制符
权限等级:public > protected > default > private
14.抽象
- 抽象类不能实例化
- 构造方法和final、static方法,不可以修饰为abstract
15.JDK8接口的默认方法
- 默认方法是库/框架设计者的后悔药。对于以前的遗留代码,大家都不知
道有这个新方法,既不会调用,也不会去实现,如同不存在;编写新代码
的程序员可以将它视为保底的方法体。类型层次中任何符合override规则
的方法,优先于默认方法,因为遗留代码可能正好有同样的方法存在。 - 默认方法的声明很简单,直接在接口中把方法声明为default,之后再写
方法的实现即可。
16.static
- static成员并不存放在对象对应的堆空间中。而是存放在方法区中。
- 静态成员方法没有this引用。
- JDK1.5中引入了“Static Import”机制,借助这一机制,可以用略掉所在的
类或接口名的方式,来使用静态成员
import static java.lang.Math.abs;
17.包装器
在自动装箱拆箱过程中,只有数值是byte范围内的时候,才使用到常量
池,否则都是分配新的内存空间;
18.Lambda表达式
- 在lambda表达式中访问外层作用域和老版本的匿名内部类中的方式很相似
- 可以直接访问标记了final的外层局部变量,或者实例的成员变量以及静态变量
- 和匿名内部类不同的是,局部变量可以不用声明为final,代码同样能够正确执行,但变量必须不可表达式的代码修改(即隐性的具有final的语义)识点5-其他内部类相关技术
- 有一个和接口的默认方法相关的要点需要特别留意。
- Lambda表达式中是无法访问到默认方法的。
19.操作符( :: )
主要用于绑定 静态方法、成员方法 或 构造方法的绑定。一般用于函数式接口。
所谓绑定是指,声明一个类型的引用,将此类型中 的方法与指定的方法进行绑定。
绑定静态方法
interface A{ Integer getInt(); }
A a = Integer::valueof
绑定成员方法
interface A{ void fo(); }
class B{ void bo(){} }
B b = new B();
A a = b::fo();
a.fo();
将接口A中的方法 与 类B中的bo方法绑定。实际执行时,执行的内容是B中的。
绑定构造方法
interface A{ void fo(); }
class B{ }
A a = B::new;