zoukankan      html  css  js  c++  java
  • 构造方法

    构造方法名([参数列表]){
     
    [this([参数列表]);] |[super([参数列表]);
     
    语句序列
     
    }

    其中,this是调用其他的构造方法,super是调用父类的构造方法。它们都必须放在其他语句的前面。
     
     构造方法的名字必须和类的名字完全相同。
     
     除了访问权修饰符之外,不能有其他任何修饰符,也就不能有返回值。
     
     尽管没有返回值,但并不能用“void”修饰。
     
     构造方法不能用static和final来修饰。一般也不用private修饰,这会导致无法在外部创建对象。
     
     构造方法不能由对象显式地调用。一般通过new关键字来调用,或者用this、super来调用。
     
     构造方法的参数列表可以为空,也可以有参数。根据参数的有无,可以将构造方法分为无参数的构造方法和带参数的构造方法。
     
     用户定义的类可以拥有多个构造方法,但要求参数列表不同。
     
     如果用户定义的类未提供任何构造方法时,系统会自动为其提供一个无参数的构造方法。
     

    一、无参数构造方法的定义和使用

      利用无参数构造方法为一些成员变量做初始化:

     

    public class Test {

     private int x = 0;

     public Test() {  

     System.out.println("这是个无参的构造!!!");  

     x = 2;  

    }

     public static void main(String[] args) {   

    Test t = new Test();   //隐式调用无参数的构造方法

    System.out.println(t.x);  //可以通过类方法获取该值

    }

    }

    /*public void Test() {
      System.out.println("这是个无参的构造!!!");
      x = 2;
     }

    它的输出结果如下: x = 0  

      语句Test t = new Test(); 并不是调用程序员自己定义的“构造方法”,而是调用了系统提供的默认 的无参数的构造方法,这个方法其实什么事情也没做,自然也就不会更改x的值。  

    说明:C++程序员不会犯此类错误。因为在C++中,如果在构造方法前面加上void,编译器将报错。  

    注意:构造方法前的访问权限修饰符同样有4种,但通常不会是private类型。因为用它来修饰的话,无法在外部使用该构造方法。  

    Test t = new Test();  创建对象在没有无参构造方法下也可以的,因为默认下还有一个构造方法。*/

    二、带参数构造方法的定义和使用 

    public class Test {

     private int x = 0;

     public Test(int x1) {   

    System.out.println("这是个有参的构造!!!");  

     x = x1;  

    }

     public static void main(String[] args) {   

    Test t = new Test(12);  

     System.out.println(t.x);  

    }

    }

    系统不会再为类提供无参数的构造方法。当此类被其他类继承时,这一问题显得越发严重,它甚至会导致根本无法写出一个子类。因此,父类中应该要有无参的构造方法!!!

    三、this关键字和构造方法的调用

    this([参数列表])
     
      系统将根据参数列表来决定调用哪一个构造方法。使用this时还需注意下面几点:
     1、用this调用构造方法时,该语句只能用在构造方法中。
     
     2、this语句必须是构造方法中的第一条语句。
     
     3、和new不同,this虽然可以调用构造方法,但它只是执行构造方法中的语句,并不会创建对象。

    public class Test {  private int x = 0;  private int y = 0;  public Test(int x1) {   System.out.println("这是个有参的构造!!!");   x = x1;

     }

     public Test(int x1,int x2) {   this(30);   System.out.println("这是个有参的构造!!!");   y = 59;  }

     public static void main(String[] args) {   Test t = new Test(12,49);   System.out.println(t.x+":::"+t.y);  } }

  • 相关阅读:
    【内网渗透】MSF的exploit和pyload的基础使用
    【代码总结】GD库中图片缩印
    【代码总结】GD库中添加图片水印
    如何调度考生的座位
    回溯算法团灭子集、排列、组合问题
    如何去除有序数组的重复元素
    如何寻找缺失的元素
    如何运用贪心思想玩跳跃游戏
    水塘抽样
    如何同时寻找缺失和重复的元素
  • 原文地址:https://www.cnblogs.com/ydpvictor/p/2669684.html
Copyright © 2011-2022 走看看