欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的构造方法

程序员文章站 2024-03-17 08:05:52
...

构造方法及其作用
    构造方法是类中一种特殊的方法 ,它一般由系统在创建对象(及类实例化)是自动调用,构造方法是对象中第一个被执行的方法,主要用于申请内存,对类的成员变量进行初始化等操作。( 创建对象,给对象中的成员进行初始化。)
构造方法的特点

  • 构造方法的名字必须和类的名字完全相同。
  • 除了有访问权限修饰符之外,不能有其他任何修饰符,也就不能有返回值。
  • 没有返回值,连void也没有。
  • 构造方法不能用static和final来修饰,一般也不用private来修饰这回导致无法在外部创建对象。
  • 构造方法不能由对象显式的调用,一般通过new关键字来调用或者this,super来调用。
  • 如果用户没有给出构造方法时,系统会自动为其提供一个无参数的构造方法。
  • 构造方法可分为有参构造和无参构造。

构造方法及注意事项
如果我们没有给出构造方法,系统将会自动提供一个无参的构造方法,如果我们给出了构造方法,系统将不再提供默认的无参的构造方法,并且这个有参的构造方法会遮蔽掉无参的构造方法。(建议永远自己给出无参构造方法)

给成员变量赋值的两种方式

  • setxxx()方法
  • 构造方法

创建一个对象的步骤
  Student  s = new Student();
步骤

  • 加载Student.class文件进内存
  • 在栈内存中为s开辟空间
  • 在堆内存为学生对象开辟空间
  • 对学生对象的成员变量进行默认初始化
  • 对学生对象的成员变量进行显示初始化
  • 通过构造方法对学生对象的成员变量进行赋值。
  • 学生对象初始化完毕,把对象地址赋值给s变量
//手机类
package org.westos.demo2;

public class Phone {
    private String name;
    private String colour;
    private int weight;
    //有参构造
    public Phone(String name, String colour, int weight) {
        this.name = name;
        this.colour = colour;
        this.weight = weight;
    }
    //无参构造

    public Phone() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColour() {
        return colour;
    }

    public void setColour(String colour) {
        this.colour = colour;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }
    public void call(){
        System.out.println("打电话");
    }
    public int calc(int a,int b){
        return a + b;
    }
}

//测试类
package org.westos.demo2;

public class Mytest {
    public static void main(String[] args) {
        //无参构造
        Phone phone = new Phone();
        phone.setColour("蓝色");
        phone.setName("小米");
        phone.setWeight(78);
        System.out.println(phone.getColour());
        System.out.println(phone.getName());
        System.out.println(phone.getWeight());
        System.out.println(phone.calc(2, 34));
        phone.call() ;
        //有参构造
        Phone phone1 = new Phone("小米","蓝色",78);
        System.out.println(phone1.getWeight());
        System.out.println(phone1.getName());
        System.out.println(phone1.getColour());
        phone1.call();
        System.out.println(phone1.calc(89, 67));


    }
}

运行结果

蓝色
小米
78
36
打电话
78
小米
蓝色
打电话
156

对象和引用

  • 在上面中对象:目前在使用new运算符在堆内存开辟的内存空间成为对象。
  • 引用是一个变量:不一定是局部变量还可能是成员变量,引用保存了内存地址指向了堆内存中开辟的空间
  • 所有访问实例相关的数据,都需要通过“引用”的方式访问,因为只有通过引用才能找到对象。
  • 只有一个空的引用,在访问对象的实例相关数据时才会出现空指针异常。

static关键字
特点:

  • 随着类的加载而加载(不需要创建对象,内存就开辟了)
  • 优先于对象存在
  • 被类中的所有对象共享(也就是说如果某个成员变量在被所有对象共享时,那么它就应该定义为静态的)
  • 静态变量存储在方法区内存中的静态区

通过类名调用,不需要创建对象。当然也是可以通过对象名调用不建议。
注意事项

  • 在静态方法中是没有this关键字的,静态是随着类的加载而加载,this是随着对象的创建而存在,静态比对象现存在。

  • 静态方法只能访问静态的成员变量和静态的成员方法。(静态的只能访问静态的,非静态可以访问静态的也可以访问非静态的)
    静态变量和成员变量的区别

  • 所属不同
       静态变量是属于类,所以也成为类变量
       成员变量属于对象,所以也成为实例变量(对象变量)

  • 内存中的位置不同
       静态变量存储在方法区内存的静态去
       成员变量存储在堆内存

  • 内存出现时间不同
       静态变量随着类的加载而加载,随着类的消失而消失
       成员变量随着对象的创建而存在,随着对象的消失而消失

  • 调用不同
       静态变量可以通过类名调用,也可以通过对象调用
       成员变量只能用过对象名调用


package org.westos.demo5;

public class Person {
    String name;
    static String country;
    public void show(){
        System.out.println(name+"........"+country);
    }
}

package org.westos.demo5;

public class Mytest {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.name = "小明";
        person1.country = "加拿大";
        person1.show();

        Person person2 = new Person();
        person2.name = "小花";
        //person2.country = "日本";
        person2.show();
        person2.country = "日本";

        person1.show();
        person2.show();
    }
}

运行结果为:

小明........加拿大
小花........加拿大
小明........日本
小花........日本

Java中的构造方法