构造函数

Posted on 2022-01-28 11:01  zhoumubaiyu  阅读(59)  评论(0编辑  收藏  举报

构造函数

  • Java构造函数的名称必须和类名一样,且没有返回值

  • Java有构造函数,但是没有析构函数

    • 构造函数是制造对象的过程,析构函数是清除对象的过程

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

    public class LifeCycleTest{
      
      public static void main(String[] args){
        int a = 0;   //a在main函数中都是active
        
        //i只能活在for循环中
        for(int i=0;i<5;i++){
          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 non-positive");
        }
      }
    }
    

     

  • 当变量被创建时,变量将占据内存;当变量消亡时,系统将回收内存

  • Java具有内存自动回收机制的,当变量退出其生命周期后,JVM会自动回收所分配的对象的内存。所以不需要析构函数来释放内存

  • 对象回收效率依赖于垃圾回收器GC(Garbage Collector),其回收算法关系到性能好坏,是JVM的研究热点

  • 每个Java类都必须有构造函数

  • 如果没有显示定义构造函数,Java编译器自动为该类产生一个空的无形参构造函数。如果已经有了显式的有参构造函数,编译器就不会越俎代庖了

  • 每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super,而且super语句必须放在第一条,不会出现连续两条super语句

  • 一个类可以有多个构造函数,只要形参列表不相同即可

  • 在new对象的时候,根据形参的不同,自动挑选相应的构造函数。如果实参形参匹配不上,将会报错

    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类中没有无参数的构造函数 
      }
    }
    

     

  • 当变量被创建时,变量将占据内存;当变量消亡时,系统将回收内存

  • Java具有内存自动回收机制的,当变量退出其生命周期后,JVM会自动回收所分配的对象的内存。所以不需要析构函数来释放内存

  • 对象回收效率依赖于垃圾回收器GC(Garbage Collector),其回收算法关系到性能好坏,是JVM的研究热点

  • 每个Java类都必须有构造函数

  • 如果没有显示定义构造函数,Java编译器自动为该类产生一个空的无形参构造函数。如果已经有了显式的有参构造函数,编译器就不会越俎代庖了

  • 每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super,而且super语句必须放在第一条,不会出现连续两条super语句

  • 一个类可以有多个构造函数,只要形参列表不相同即可

  • 在new对象的时候,根据形参的不同,自动挑选相应的构造函数。如果实参形参匹配不上,将会报错