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 }

    运行:

     关于构造器就那么多了;

  • 相关阅读:
    idea炫酷主题下载网站
    You have not concluded your merge (MERGE_HEAD exists)
    内部接口
    Nginx初尝试
    泛型和反射
    使用idea创建web项目
    <转>如果你报createSQLQuery is not valid without active transaction,请看这里
    android 通过pull解析xml文件
    shiro环境搭建
    springmvc文件上传
  • 原文地址:https://www.cnblogs.com/GH0522/p/8157702.html
Copyright © 2011-2022 走看看