栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

4.3 构造函数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

4.3 构造函数

如何在对象产生时就给成员变量赋值?
这就需要创建构造函数,constructor function

public class A{
    int id;
    public A(int id2){
        id = id2
    }
}
  • java构造函数的名称必须和类名一样,且没有返回值

  • java有构造函数,但是没有析构函数
    -构造函数是制造对象的过程,析构函数是清除对象的过程

  • 每个变量都是有生命周期的,它只能存储在离它最近的一对{ }中

public class LifeCycleTest {
    public static void main(String[] args){
        int a = 0;//a在main函数中都是active

        for(int i=0;i<5;i++){//i只能活在for循环中
            int k = 0;
            k++;
        }

        if(a>0){
            Object obj1 = new Object();//obj1 只能在if分支中
            System.out.println("a is positive");
        }
        else {
            Object obj2 = new Object();//obj2 只能在else中
            System.out.println("a is negative");
        }
    }
}
  • 当变量被创建时,变量将占据内存;当变量消亡时,系统将回收内存
  • java具有内存自动回收机制的,当变量退出其生命周期后,JVM会自动回收所分配的对象的内存。所以不需要析构函数来释放内存。
  • 对象回收效率依赖于垃圾回收器GC(Garbage Collector),其回收算法关系到性能好坏,是JVM的研究热点。
  • 每个java类都必须有析构函数。
  • 如果没有显式定义构造函数,java编译器自动为该类产生一个空的无形参构造函数。如果已经有了显式的有参构造函数,编译器就不会越俎代庖了。
  • 每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super(),而且super语句必须放在第一条,不会出现连续两条super语句。(本条规则在后续继承时会再提到)
  • 一个类可以有多个构造函数,只要形参列表不相同即可
  • 在new对象的时候,根据实参的不同,自动挑选相应的构造函数。如果实参形参匹配不上,将会报错。
public class MyPairNumber {
    int m;
    int n;
    public MyPairNumber()
    {
        m = 0;
        n = 0;
    }
    public MyPairNumber(int a)
    {
        m = a;
        n = 0;
    }
    public MyPairNumber(int a, int b)
    {
        m = a;
        n = b;
    }
}
public class ConstructorTest {
    public static void main(String[] args){
        MyPairNumber obj1 = new MyPairNumber();
        MyPairNumber obj2 = new MyPairNumber(5);
        MyPairNumber obj3 = new MyPairNumber(10, 20);
        System.out.println("obj1 has " + obj1.m + "," + obj1.n);
        System.out.println("obj2 has " + obj2.m + "," + obj2.n);
        System.out.println("obj3 has " + obj3.m + "," + obj3.n);
        // A a = new A();//error ,A类中没有无参数的构造函数
    }
}

运行结果

obj1 has 0,0
obj2 has 5,0
obj3 has 10,20
总结
  • 构造函数是一个对象初始化的过程
  • 一个类必须有构造函数,可以有多个构造函数。在new的时候根据实参和形参进行匹配。
  • java只有构造函数,没有析构函数。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号