javase学习第七天(构造方法)
构造方法知识
JavaBean特点
1、private 修饰成员属性;
2、public 修饰成员方法;
3、有get、set方法对成员变量进行赋值/取值 ;
4、空构造器
构造方法
定义:位于类中,成员方法外,和成员变量、成员方法是平级关系,
特点:是和类同名,没有返回值;
主要作用:是对新创建的对象进行属性初始化,而不是创建对象;
构造方法可进行重载,即可创建多个具有不同形参的构造方法;
根据形参的个数初始化不同的实例属性。
注意:构造方法必须和类同名; 构造方法没有返回值,也不能使用void修饰,一旦加了返回值或者void,那么这个方法就是一个成员方法,不是构造方法;
使用
构造方法是使用new关键字的时候调用的,调用之后的返回就是一个实例的引用。
在创建一个类时,如不自定义给出构造方法,系统会自动默认有一个无参的构造方法,如果显示定义了有参的构造方法,则不再默认给出无参的构造方法;要使用时,必须自己显示定义;
程序使用new关键字创建一个类的实例化对象的时候,根据传递参数的情况调用相应的构造方法;
this关键字
this关键字用来指向当前对象,根据this出现位置不同,有以下 两种情况:
1、在构造方法中引用该构造方法正在初始化的对象;
2、在方法中引用正在使用该方法的对象;
使用场景:让类中的一个方法去访问类中另一个实例方法或变量。
static
有static修饰的成员变量/成员方法,为类变量/类方法,没有则是实例变量/实例方法;
类变量、类方法可用类名或对象名两种方式来访问;
实例变量、实例方法必须用实例对象进行访问;
static关键字的特点
1、随着类的价值而加载,优于对象的创建(类的加载优于对象的创建);
2、被类的所有实例对象共享(存在于方法区中的静态区,如果是一个类变量的话,任何一个对象对该变量进行修改,都会在其他对象中得到体现),是否使用this的标准;
3、可通过类名访问(类名.静态变量名、类名.静态方法名),也可使用对象名来访问。
使用情景
当一个变量或方法属于一个类,而不是属于这个类的实例对象时,可使用static来修饰,就可使用类名对变量、方法进行访问这个static变量、方法。
注意事项:
静态方法(类方法)中不能使用this关键字,this关键字代表的的是当前对象的引用,而静态方式是随着类的加载而加载的,当类进行加载时,此时实例对象还没有被创建出来,此时是无法使用this关键字的。
静态方法只能访问静态成员变量和静态成员方法;
static内存图
被static修饰的变量或者方法存在方法区中的静态区;
静态变量和实例变量的区别:
|
所属 |
内存位置 |
出现时间 |
调用 |
静态变量 |
类 |
方法区的静态区 |
随类加载而加载 |
类名调用,对象名调用 |
实例变量 |
对象 |
堆内存 |
随对象创建而存在 |
对象名调用 |
|
声明位置 |
内存位置 |
生命周期 |
初始值 |
局部变量 |
方法内,形参上 |
栈内存 |
随方法调用而存在 |
必须先定义,赋值再使用 |
实例变量 |
类内,方法外 |
堆内存 |
随对象创建而存在 |
有默认初始值 |
代码块
java中使用{}括起来的代码被称为代码块,根据其位置不同可分为:
局部代码块、构造代码块、静态代码块。
局部代码块:在方法中出现,直接用{}括起来的部分,就是局部代码块;
作用:限定变量的生命周期,及早释放,提高内存利用率;
构造代码块:在类中,方法外出现,多个构造方法中相同的代码放在一起,每次调用构造时都执行,并且在构造方法前执行;多个构造代码块,它们按顺序执行; 可把构造代码块看成是构造方法的补充,它是一段固定的代码,不接受任何参数;
静态代码块:加了static修饰的构造代码块;给类进行初始化,在加载的时候就执行,并且只执行一次。
执行顺序:静态代码块-->构造代码块-->构造方法
作用:静态代码块是对类进行初始化的(主要是对类变量/静态变量进行初始化);
构造代码块和构造方法是对实例对象进行初始化的;
局部代码块主要是规定变量的作用范围,提高内存利用率,节省空间。
对象初始化过程包括两个方面:构造代码块的执行+构造方法的执行。