10初级 - Java对象系统基础

258 阅读2分钟

对象基本概念:成员与初始化

  • 什么是对象,对象就是数据和行为的集合
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垃圾回收器,会默默回收内存

1引用链.png

  • jvm如何知道回收内存,GC Roots,方法栈中的一个局部变量就是root,其他都是垃圾
  • GC roots可达到的都是活对象(属于强引用),除此都是死对象

2.png

  • 现实生活中房间的例子

3.png

  • GC算法,分代回收算法非常复杂,可能发生删除或者压缩,碎片化空地小商贩建公园的例子,也会报异常