Java是一门纯面向对象语言,即所有的东西都是在类里面的;对象是数据和方法的集合,数据就是对象的成员,方法就是对象的行为。数据有基本数据类型和引用类型的数据。


关于new

凡是new出来的都是对象,特例就是: Integer i = 1; ,虽然没有new,但是在装箱时JVM会偷偷地new一个对象;还有一个特例String, String str = "" ,也同样不需要new,但是这个字符串也是个对象,在JVM中有一个常量池中存储着已经创建好的一个内存块存储着这个字符串,不需要再new。


对象的组成

在内存中分为栈和堆,栈是方法调用发生的位置,例如:方法栈;堆是存放对象的位置。每个对象都包含自己的数据(成员),可分为引用类型的成员和基本数据类型的成员。


new的时候发生了什么

  • 划分一块空间给对象使用
  • 初始化,在没有指定数值的前提下,成员是基本数据类型的初始化为0,是引用类型的成员初始化为null。
  • 最后调用构造器。(如果没有构造器,编译器会偷偷地帮你生成一个没有参数,没有内容的构造器。

方法的重载

重载区别于重写,重载是方法名相同,但是参数表和返回类型不同或参数表不同但返回类型相同。(只有返回类型不同不行)。在调用重载函数时,如果多个重载函数都符合调用,则会发生隐式转换,类型最匹配的优先调用。
例如: f(1) ,调用以下几个重载函数:f(int i)、f(Integer i)、f(Number i),
优先级为f(int i)>f(Integer i)>f(Number i);
如果调用 f(null) ,匹配多个函数: f(Integer i)、f(Double i);将需要对 null进行强制类型转换。


对象的初始化顺序

静态成员、静态代码块在一切发生之前先初始化;静态成员>静态代码块。再过来是成员和代码块,成员>代码块。


对象的生命周期

Java是自动内存管理的,所以不需要自己管理内存,而是使用垃圾回收器GC(garbege collection)。
JVM怎么知道哪些对象是垃圾?

  • GC ROOT应用链上的都不是垃圾