zoukankan      html  css  js  c++  java
  • JAVA中的构造函数

    1:构造器是干什么的???

    构造器最大的用处就是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化。如果想改变这种默认的初始化,就可以通过自定义构造器来实现。

    2:使用构造器时需要记住:

    1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)

    2.每个类可以有一个以上的构造器;

    3.构造器可以有0个、1个或1个以上的参数;

    4.构造器没有返回值;

    5.构造器总是伴随着new操作一起调用;

    3:构造器的调用:

    调用无参的构造器:如

      我们先创建一个Father类,体提供一个无参的构造器,

    1 package Constructor;
    2 
    3 public class Father {
    4 
    5     public Father() {
    6         System.out.println("调用了这个构造器");
    7     }
    8 }

      然后我们去创建测试类,去new这个对象

     1 package Constructor;
     2 
     3 public class Test {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         Father F1=new Father();
     8         
     9     }
    10 }

      我们直接运行,会发现构造器被调用了

      到我们信new一个对象的时候,这个时候就会默认调用空的构造函数,然后初始化这个对象,其实new一个对象就是在堆中给开辟了一个新的内存空间,里面存放的是这个对象的信息,然后栈中存放的是句柄,这个句柄对应着堆中对象所在的位置。

    如果我们自定义了构造函数了,则调用的时候就不会自动调用无参的构造函数了,如:

    调用有参的构造器:如

     1 package Constructor;
     2 
     3 public class Father {
     4     private String name;
     5     private int age;
     6     private String sex;
     7     
     8     
     9     public Father(String name, int age, String sex) {
    10         super();
    11         this.name = name;
    12         this.age = age;
    13         this.sex = sex;
    14         System.out.println("调用了有三个参数的构造函数"+name+"--"+age+"--"+sex);
    15     }
    16     
    17     
    18     public Father(String name, int age) {
    19         super();
    20         this.name = name;
    21         this.age = age;
    22         System.out.println("调用了有三个参数的构造函数"+name+"--"+age);
    23     }
    24     
    25     
    26 
    27     public Father(String name) {
    28         super();
    29         this.name = name;
    30         System.out.println("调用了有三个参数的构造函数"+name);
    31     }
    32 
    33     
    34 }

    在这里我们可以看到我们重载的构造的方法,

     1 package Constructor;
     2 
     3 public class Test {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         Father F1=new Father("GH");
     8         
     9         Father F2=new Father("GH",12,"男");
    10         
    11         Father F3=new Father("GH",19);
    12     }
    13 }

    我们运行一下看看:

     子类调用父类的构造函数:

    使用super调用父类构造器的语句必须是子类构造器的第一条语句

    如果子类构造器没有显式地调用父类的构造器,则将自动调用父类的默认(没有参数)的构造器。如果父类没有不带参数的构造器,并且在子类的构造器中又没有显式地调用父类的构造器,则java编译器将报告错误

     如图:

    给父类加上空的构造方法,编译就能通过;

    默认调用父类无参的构造函数:

     1     public Father() {
     2         System.out.println("子类默认调用父类的无参构造函数");
     3     }
     4 
     5 
     6 
     7 public class Son extends Father{
     8 
     9 }
    10 
    11 
    12 
    13 public static void main(String[] args) {
    14         // TODO Auto-generated method stub
    15         Son s=new Son();    
    16     }

    结果:

    我们能使用super关键字,进行对父类的构造函数进行自定义的调用:

     1 package Constructor;
     2 
     3 public class Son extends Father{
     4 
     5     public Son(String name, int age, String sex) {
     6         super(name, age, sex);
     7         // TODO Auto-generated constructor stub
     8     }
     9 
    10     
    11 }
    12 
    13 
    14 
    15 
    16 
    17 package Constructor;
    18 
    19 public class Test {
    20 
    21     public static void main(String[] args) {
    22         // TODO Auto-generated method stub
    23         Son s=new Son("aaa", 12, "女");    
    24     }
    25 }

    运行:

     关于构造器就那么多了;

  • 相关阅读:
    unsupported jsonb version number 123
    如何在MPlayer上支持RTSP
    TDengine 时序数据库的 ADO.Net Core 提供程序 Maikebing.EntityFrameworkCore.Taos
    如何使用IoTSharp对接ModBus?
    如何从源码启动和编译IoTSharp
    Asp.Net Core 自动适应Windows服务、Linux服务、手动启动时的内容路径的扩展方法
    MQTTnet 的Asp.Net Core 认证事件的扩展
    Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
    The remote certificate is invalid according to the validation procedure 远程证书验证无效
    settings插拔式源码
  • 原文地址:https://www.cnblogs.com/GH0522/p/8157702.html
Copyright © 2011-2022 走看看