JVM内存解析
手机:
特征:
名字、价格、颜色
行为:
打电话
发送消息
打游戏
Java的JVM的内存可以分为这几个区:堆区、栈区、方法区、PC寄存器、本地方法栈
堆区
1.存储的全部是对象,每个对象都包含一个与之对应的class信息。(class的目的是得到操作指令)
2.jvm只有一个堆区被所有线程共享,堆中不存放基本数据类型和对象引用,之存放对象本身。
栈区
1.栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈区中的数据(原始类型和对象引用)都是私有,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区
方法区
1.方法区又叫做静态区,和堆一样,被所有线程共享,方法区包含所有的class和static变量。
2.方法区包含的都是在整个过程中永远唯一的元素,如:class,static变量
构造方法
构造方法作用就是对类进行初始化。如果你没有定义任何构造方法,
程序会为一创建一个不带任何参数的构造函数,那么你产生类的对象
时候只能用不带参数的方法,如 class Phone{} 没有任何构造。
构造方法就是与类同名的那个方法,作用初始化
<1>语法格式
class 类名(){
类名(形参列表){
构造方法体;
}
}
例如:
class Person{
Person(){
}
}
<2>注意事项
构造方法的名称与类名称完全相同,大小写一致
构造方法没有返回值类型,连void都不允许有
当创建一个新的对象的时候,会自动调用构造方法来进行对象中成员变量的初始化工作。
<3>默认构造
当自定义类中没有声明任何形式的构造方法时,则编译器会自动添加一个无参构造,
空的构造方法,叫做默认/缺省构造方法:比如 Person(){}
但是类中只要定义了构造方法,则编译器不再提供任何形式的构造方法
方法的重载
<1>基本概述
在同一个类中,方法名相同参数列表不同的方法之间构成重载关系(Overload);
<2>方法重载的表现形式
方法重载的主要体现在:参数的个数不同、参数的类型不同、参数的顺序不同
方法名称要相同,
形参变量名与返回值类型无关,但是建议返回值类型最好相同。
判断方法重载的核心:判断调用方法是否能加一区分。
参考:java.io.PrintStream类中print()和println()
<3>作用
方法重载的意义在于:调用者只需要记住一个方法名就可以调用各种不同的版本,从而可以实现多种类型数据的处理。
this关键字
对于构造方法来说,this关键字就代表当前正在构造的对象;
对于成员方法来说,this关键字就代表当前正在调用的对象;
原理:
由于不同的对象调用同一个方法时,在方法体的内部使用this进行记录,因此this代表的对象也就不同,
当访问成员变量时候默认解析为:this.成员变量名,其中this.相当于汉语中“我的”,因此this的不同导
致果的不同
使用场合:
<1>当形参变量名和成员变量名相同的时候,在方法体的内部会优先选择变量使用,此时就需要使用
this.的方式明确使用的成员变量而不是形参变量
<2>在构造方法的第一行使用this(实参)的方式可以调用本类重其他构造方法