由于jvm的垃圾回收机制由一条后台线程完成。如果不考虑内存管理,会出现以下问题:
1,不断分配内存使得系统的内存减少,从而降低程序运行的性能,
2,大量已经分配的内存的回收使得垃圾回收负担加重,降低程序的运行的性能。
Java中的变量:
1,变量可以分为成员变量和局部变量。
局部变量分为,形参(方法签名中使用的局部变量),方法内的局部变量,代码块内的局部变量。
类体内定义的变量成为成员变量,如果由static修饰,则称之为静态变量或者类变量。如果没有修饰那么就是非静态变量或者实例变量。
同一个jvm中,每一个类只有一个class对象,但是可以创建多个java对象,因此类对象只需要创建一次,但是程序需要几个实例,那么实例变量就需要几块内存空间。
实例变量的初始化时机:程序会先执行非静态代码块然后再执行构造函数。假如非静态代码块中有对成员函数赋值的操作,那么赋值操作的结果和程序的源码的顺序有关。
public static void main(String[] args) { Cat catt=new Cat("kobe"); System.out.println(catt); } public static class Cat{ String name; double weight=2.3; public Cat(String name){ System.out.println("执行构造器"); this.name=name; } { System.out.println("非晶态代码狂"); weight=2.0; } public String toString(){ return name+weight; } }
非晶态代码狂执行构造器kobe2.0
public static void main(String[] args) { Cat catt=new Cat("kobe"); System.out.println(catt); } public static class Cat{ String name; public Cat(String name){ System.out.println("执行构造器"); this.name=name; } { System.out.println("非晶态代码狂"); weight=2.0; } double weight=2.3; public String toString(){ return name+weight; } }
非晶态代码狂
执行构造器kobe2.3 类变量的初始化。1,定义类变量的时候进行初始化。2,静态初始化块中对类变量指定初始值。这两种方式得执行顺序和它在源代码中的执行顺序相同。关于父类构造器;
创建任何java对象得时候,总是先依次调用每个父类的非静态初始化块,父类构造器(总是从object开始),最后才调用本类的非静态代码块。
(this()和super()只能在构造器中使用,而且他们都必须作为构造器的第一行代码)