JVM内存分类
- 程序计数器内存:记录程序执行的行号,是和线程相关的,每当创建一个线程就会有一块程序计数器内存。
- 堆内存 :是用来存储new出来的对象。堆内存中的对象不是共享的,意味着每new一个对象就会创建一个新
的对象,对象是没有大小限制的。垃圾回收器监测堆内存中的对象,如果对象没用了,垃圾回收器对其进行
回收。 - JVM栈内存:JVM栈内存是一个先进先出的数据结构,每执行一个方法时,就会把方法的栈帧压入到JVM栈内
存中,当执行完这个方法,就把栈帧从JVM栈内存中弹出。 - 本地方法栈内存:当Java程序调用其他语言的程序时,其他语言方法在执行时使用的是本地方法栈内存。
- 方法区 :把类加载到方法区内存中。
解释 NullPointerException 空指针异常,当调用一个对象的方法或使用一个对象属性时,JVM会有一个指针
指向这个对象,方法中的this就是这个对象,属性是哪个对象的。如果这个对象是null,就会抛出空指针异
常。
换句话,也就是调用了一个空引用的属性或方法,就会抛出空指针异常。
static关键字
static是静态的意思,staitc修饰属性、方法、内部类、游离块,静态的属性和方法是属于类的,而不是对象的;静态属性对象之间是共享的。
可以通过类名直接调用静态的属性和方法了,不建议使用对象调用了
语法要求:在静态的方法中不能使用非静态的属性和方法,以及this关键字,在非静态的方法中可以调用任何的属
性和方法
游离块的概念
在类中可以定义游离块
public class Person extends Animal{
//游离块(初始化块)
{
//当调用构造器时,在执行构造器中代码前先执行游离块
//当每个构造器都要初始化一下相同的代码,就可以写在游离块中
System.out.println("执行了Person的游离块"); }
public Person(){
System.out.println("执行了Person的构造器");
}
public static void method(){
}
public static void main(String[