Java知识点总结(内存分析)

Java知识点总结(内存分析)

@(Java知识点总结)[Java, Java面向对象]java

[toc]程序员

对象内存

类是建立对象的模板

Java对象的使用时经过引用进行的
基本数据类型直接赋值,引用类型传递的是一个地址
栈:存放局部变量
堆:存放new出来的对象
方法区:存放类的信息(代码) 、static变量、常量池(字符串常量)等...this

clipboard.png

Student s1 = new Student();
s1.name="张三";
s1.study();
s1.sayHello("王武");
 
Student s2 = new Student();
s2.age = 18;
s2.name="李四";

垃圾回收机制(Garbage Collection)

  1. 对象空间的分配:使用new关键字便可
  2. 对象空间的释放:将对象赋值null便可。垃圾回收器将负责回收全部"不可达"对象的内存空间
  3. 要点:程序员无权调用垃圾回收器
    程序员能够经过System.gc() 通知GC运行,可是Java规范并不能保证当即运行
    finalize方法,是java提供程序员用来释放对象,或资源的方法,可是尽可能少用
  4. 一个对象没有被引用,就会被Java垃圾回收机制回收

static内存

  1. 在类中,用static声明的成员变量为静态变量,或者叫作:类属性,类变量,从属于类,给对象分配的内存里没有
  2. 它为类的公用变量,属于类,被该类的全部实例共享,在类被载入时被显示初始化
  3. 对于该类的全部对象来讲,static成员变量只有一份,被该类的全部对象共享
  4. 可使用"对象.类属性"来调用。不过通常都是用"类名.类属性"
  5. static变量置于方法区中
  6. 用static声明的方法为静态方法
  7. 类名.方法名调用
    在调用该方法时,不会将对象的引用传递给它,因此在static方法中,不可访问非static的成员
  8. 静态初始化代码块spa

    static{code

    ...

    }对象

若是但愿加载后,对整个类进行某些初始化操做,可使用static初始化块继承

是在类初始化时执行,不是在建立对象时执行ip

静态初始化块中不能访问非static成员内存

执行顺序:上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到咱们的类的静态初始化块为止资源

多态内存

多态性是OOP的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程当中才被决定而非在编译期间就决定了。

这对于大型信息来讲能提升系统的灵活性和扩展性

引用变量的两种类型:

  • 编译时类型 (模糊一点,通常是一个父类)
    由声明时的类型决定
  • 运行时类型(运行时,具体哪一个子类就是哪一个子类)
    由实际对应的对象类型决定

多态的存在要有3个必要条件:

  • 要有继承
  • 要有方法重写
  • 父类引用指向子类对象

子类若是重写了父类中的方法,方法调用的时候与实际类类型相绑定(传递的隐式参数this指向的开辟内存空间的类的对象,而不是父类的对象)

clipboard.png

public class Test {
  public static void testAnimalVoice(Animal c) {
    c.voice();
    if (c instanceof Cat) {
     ((Cat) c).catchMouse();
    }
  }
 
  public static void main(String[] args) {
    Animal a = new Cat();
    Cat a2 = (Cat) a;
    testAnimalVoice(a);
  }
}
 
class Animal {
  void voice() {
    System.out.println("发出动物的叫声");
  }
}
 
class Cat extends Animal {
  private String name = "Tom";
  void catchMouse() { //方法存在隐式参数this和super
    super.voice();
    System.out.println(this.name+"抓老鼠");
  }
}
相关文章
相关标签/搜索