对象基本概念:成员与初始化
- 什么是对象,对象就是数据和行为的集合
package com.github.hcsp.controlflow;
public class Cat {
String name;
public Cat(String name) {
this.name = name;
}
public static void main(String[] args) {
int a = 1;
int b = 2;
Cat Cat = new Cat("咪咪");
Cat.meow();
}
private void meow() {
System.out.println("喵");
}
}
-
判断是否是对象的标准
- new 运算符创造出来的都是对象。
- 特例装箱拆箱
Integer a = 1;
-
对象由什么组成
- 所有的对象都在堆上分配
- 每个对象都包含⾃自⼰己的数据(成员变量量)
- 原生类型的成员
- 引用类型的成员
- Cat.java
package com.github.hcsp.controlflow;
public class Cat {
int age;
String name;
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
public static void main(String[] args) {
int a = 1;
int b = 2;
Cat Cat = new Cat(1,"咪咪");
Cat.meow();
}
private void meow() {
System.out.println("喵");
}
}
- Home.java
package com.github.hcsp.controlflow;
public class Home {
Cat cat;
public Home(Cat cat) {
this.cat = cat;
}
public static void main(String[] args) {
new Home(new Cat(1, "张三"));
}
}
- 对象的构造函数是新建对象的唯一途径
- 在堆上分配空间
- 执⾏必要的初始化工作
- 执⾏行行构造器器函数
- 如果没有任何构造器器,编译器器会偷偷摸摸帮你⽣生成⼀一个
方法的重载(overload)
- 和覆盖的区别,面试初级很常问
- 方法名字相同,参数表不同,返回值不同
package com.github.hcsp.controlflow;
public class Cat {
public static void main(String[] args) {
Cat cat = new Cat();
cat.printName();
cat.printName("");
}
void printName() {
}
void printName(String s) {
}
}
- 碰到拆装箱过程的参数,最匹配最接近的参数优先
void f(int i) {
}
void f(Integer i) {
}
void f(Number i) {
}
void f(Object i) {
}
特殊类型-null
- 需要强制类型转换(String) null
- 接近哪个类型就是哪个
构造器的重载
this()
对象的初始化工作是在做什么
- 必要的初始化工作
- 静态成员的初始化
- 静态初始化块
- 成员的初始化
- 初始化块
- 块里面调用函数是合法的,但是很危险
- 静态成员初始化方法,变量会最先被执行,先于所有对象
对象的生命周期,面试99%会问
- jvm中GC垃圾回收器,会默默回收内存
- jvm如何知道回收内存,GC Roots,方法栈中的一个局部变量就是root,其他都是垃圾
- GC roots可达到的都是活对象(属于强引用),除此都是死对象
- 现实生活中房间的例子
- GC算法,分代回收算法非常复杂,可能发生删除或者压缩,碎片化空地小商贩建公园的例子,也会报异常