5.4 深入构造器
构造器是一个特殊的方法,这个特殊方法用于创建实例时执行初始化。构造器是创建对象的重要途径,因此Java类必须包含一个或一个以上的构造器。
5.4.1 使用构造器进行初始化
构造器最大的用处就是在创建对象时执行初始化,所谓的初始化就是创建对象时,系统对这个对象的Field进行赋值处理。
举例1:
package com.lang; public class Person { private String name = null; private int age = 0; Person(String name,int age){ = name; = age; } public String getName(){ return ; } public void setName(String name){ = name; } public int getAge(){ return ; } public void setAge(int age){ = age; } public static void main(String[] args) { Person p1 = new Person("张三",35); Sy()); Sy()); } }
注意:如果程序员提供了自定义的构造器,系统就不再提供默认的构造器,在上例的Person类中提供了构造器因此不能再通过new Person()代码来创建实例,因为该类不再包含无参数的构造器。
5.4.2 构造器重载
同一个类里具有多个构造器,多个构造器的形参列表不同,即被称为构造器重载。构造器重载允许Java类里包含多个初始化逻辑,从而允许使用不同的构造器来初始化java对象。
举例1:
package com.lang; public class Test { private String name = null; private int age = 0; Test(String name,int age){ = name; = age; } Test(){ } public String getName(){ return; } publicvoid setName(String name){ = name; } publicint getAge(){ return; } publicvoid setAge(int age){ = age; } publicstaticvoid main(String[] args) { Test test = new Test("张三",35); Sy()); Test test1 = new Test(); Sy()); } }
5.4.3创建对象总结:
到这里结束,一个类的组成我们已经大体讲完了。包括变量,方法,构造方法,它们的使用以及需要注意的地方,那咱们一块来写一个person类。包括成员变量,成员方法,构造方法,以及给成员变量进行赋值。
那我们写了 Person p = new Person(); 也就是当我们创建了一个对象的时候 ,JVM都干了一些什么事?
• 加载Per文件进内存
• 在栈内存为p开辟空间
• 在堆内存为Person对象开辟空间
• 对Person对象的成员变量进行默认初始化
• 对Person对象的成员变量进行显示初始化
• 通过构造方法对Person对象的成员变量赋值
• Person对象初始化完毕,把对象地址赋值给p变量
5.4.4static关键字详细解释
static是一个特殊的关键字,它可以用于修饰方法,变量(Field)等成员,static修饰的成员表明它属于这个类本身,而不是该类的单个实例,通常把static修饰的变量(Field)和方法(method)称为类变量,类方法。不使用static修饰的普通方法、变量则属于该类的单个实例。
举例:
public class Student { private String gender = "男"; private static String name = "wangwu"; public static void main(String[] args) { name = "zhangsan"; Sy(name);//zhangsan Student st = new Student(); = "lisi"; Sy(); //实例的名称 Sy(name); //类的名称 = "男"; Sy(); Student st1 = new Student(); Sy);/ } }
static关键字的特点有哪些?
(1) 它随着类的加载而加载(典型的就是main()方法)。
(2) 它优先于对象存在,在JVM中出现的比对象早。
(3) 而且它被类的所有对象共享。而它的这个特点也是告诉了我们什么时候用static关键字来进行修饰成静态的?比如说咱们的班级编号。
(4) 可以通过类名来直接使用。
接着咱们来画个图来看一看,咱们的图又要添加新的内容了。
静态变量与成员变量的区别有哪些?
1.归属不同2.内存中位置不同3.在内存中出现的时间不同4.调用方式不同