内存管理:
jvm将内存分成三大主要区域:堆,栈,方法区
堆(heap):存储new出来的对象,给成员变量分配空间。
栈(stack):jvm在执行程序时,在栈中,会为每一个方法分配一个空间
即栈帧,用来存储方法的局部变量
在栈中存在一块区域叫栈帧:栈帧的作用是在程序调用方法时,开辟一块空间来
执行方法,方法结束,栈帧消失,内存释放。
方法区:用来存储jvm加载的字节码文件的信息(类的信息)
包含类的方法,方法只有一份,堆中的对象共享这份方法
在使用非static修饰的方法时,需要对象来调用,即动态绑定到对象上
垃圾回收机制:(GC)
jvm的一个独有线程(程序),用于回收没有任何指向的对象。
System.out.println((new Person()).name);
System.out.println((new Person()).name);
上述产生的对象,以后再也无法使用,如果类似的这种情况有很多,
对象来不及被处理,内存剩余空间就会越来越小,有可能出现内存溢出情况
因此,需要一个处理机制,即,垃圾回收机制,没有被引用的对象,会被视为垃圾,等待GC回收
(因为有垃圾回收机制,所以Java程序员不用担心内存溢出或泄露情况)
用以下代码举例:
构造方法(也叫构造器)
是特殊的方法,作用是用来给成员变量(Field,字段,属性),初始化.
特殊在
(1)没有返回值这个位置
(2)方法名与类名相同
如:
public class Point{
int x;
int y;
修饰词 类名(){}
剩下的是普通方法
public
}
此处需要用到一个关键字this(这个):
this指向的是将要创建的那个对象,即,变量.方法()时的变量
在普通方法中,操作的成员变量,如果与局部变量名称相同时,
为了避免出现歧义,应该在成员变量前使用this.进行区分
当没有歧义时,this.可以省略不写
在构造器中,还可以使用this关键字,调用本类中的其他构造方法
语法格式:this【那个构造器名称】(有参传参)
一定要注意:无论上一句是什么,必须,只能在构造器中的首行首句上使用!!!!!!!!!!
默认无参构造器:如果定义类时,如果没有添加构造方法,
系统会默认提供一个公有的没有形式参数的构造器
pubic Point(){}
注意:如果定义期间提供了构造器,系统不在提供无参构造器.
有参构造器:因为构造器是用来给成员变量初始化的,为了方便
所以形式参数的名称都与成员变量一致,因此,在赋值时,this.不能省略
构造器的调用:
只能使new关键字来调用;
new 构造方法(有形参就传实参,一定要与参数列表一一对应)
对象的实例化,是由new完成的,(对象此时已经存在了,但是成员变量都是默认值)
对象的成员变量初始化,是由new调用的构造器进行的(成员变量是第一次被赋值)
构造器的重载:
一个类中可以有多个构造器,
举例:
对象的实例化,比如一个未出生的婴儿,婴儿已经存在,但是还没有自己的名字,年龄,生日等
对象的初始化与变量的初始化类似,变量的初始化指的是第一次给变量赋值,二对象的初始化在
构造方法中,我们将实际参数传递给了形式参数,再由形式参数通过this关键字传递给了成员变量(属性)
婴儿在出生时就有了自己的生日年龄等,即对象的成员变量初始化。
方法名相同,参数列表不同(形式参数类型的顺序)-------与方法的重载类似
构造方法与普通方法的区别:
普通方法
1、方法签名: 方法名+参数列表
2、方法重载:在同一个类型中,方法名相同,参数列表不同。即方法的重载
同一个类中允许方法名相同,参数类型列表不同的方法存在
3、定义语法:
修饰词 返回值类型 方法名(。。。){
}
4、调用语法:
没有static修饰的方法:
必须使用引用.方法(有参传参)
构造方法:
作用:用来初始化对象的成员变量
定义语法: 修饰词 类名(...){}
调用语法:new 构造方法();
无参构造器:没有定义构造器时,系统会默认提供无参构造器
注意,只要定义了构造器,系统不再提供默认构造器