zoukankan      html  css  js  c++  java
  • 章节三、7-构造方法

    新建第一个类StructureCar:

    package introduction;
    
    public class StructureCar {
    
        private String make;
    
        public void setMake(String make) {
            this.make = make;
        }
        public String getMake() {
            return make;
        }
    
    }

    新建第二个类ConstructorDemo:

    package introduction;
    
    public class ConstructorDemo {
    
        public static void main(String[] args) {
        //当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
        StructureCar c1 = new StructureCar();
        c1.setMake("Auto");
        System.out.println(c1.getMake());
    
        }
    
    }

    一、构造函数专门用于初始化对象。

    二、每个类在创建后都默认有一个空参数的构造函数,构造函数中默认有return语句,用于结束函数。

    三、怎样新建一个构造函数:

    package introduction;
    
    public class StructureCar {
        /*
         * 构造函数歌手:
         * 1、函数名和类名相同
         * 2、没有返回值类型
         * 3、没有具体的返回值
         */
        private String make;
        //这是一个构造函数
        public StructureCar() {
        
        }
        
        public void setMake(String make) {
            this.make = make;
        }
        public String getMake() {
            return make;
        }
    
    }

    四、一个类中允许存在多个构造函数,同名不同参(参数的个数和类型不同)。

    五、方法名相同,参数列表不同的方法我们可以称之为重载。

    六、重新新建两个变量,并在构造函数中对他们进行初始package introduction;public class StructureCar {

    /*
         * 构造函数歌手:
         * 1、函数名和类名相同
         * 2、没有返回值类型
         * 3、没有具体的返回值
         */
        private String make;
        int year;
        int speed;
        //这是一个构造函数
        public StructureCar() {
            this.year = 2000;
            this.speed = 1990;
        //体现已经调用了这个构造方法
       System.out.println(
    "空参构造函数"); } public void setMake(String make) { this.make = make; } public String getMake() { return make; } }

    在ConstructorDemo类中打印刚刚加上的两个变量:

    package introduction;
    
    public class ConstructorDemo {
    
        public static void main(String[] args) {
        //当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
        StructureCar c1 = new StructureCar();
        
        System.out.println(c1.speed);
        System.out.println(c1.year);
        }
    
    }

    打印结果为:

    从打印结果中我们可以看到“空参构造函数”打印在变量“year、speed”之前,因为我们在创建“c1”对象时“空参构造函数”就已经执行了,同时还给变量“year、speed”进行了初始化赋值,但是在打印结果中我们可以看到“空参构造函数”比变量的赋值结果先打印在显示栏中,其实在对象建立时这些都已经赋值完成了,只不过在其它类中打印变量的语句在对象建立之后才执行,所以我们看到的打印结果才会出现这种现象。

    七、如果我们想创建对象时变量就能够按照自己的要求被初始化,那么我们创建一个带参数的构造函数:

    package introduction;
    
    public class StructureCar {
        /*
         * 构造函数歌手:
         * 1、函数名和类名相同
         * 2、没有返回值类型
         * 3、没有具体的返回值
         */
        private String make;
        int year;
        int speed;
        //这是一个构造函数
        public StructureCar() {
            this.year = 2000;
            this.speed = 1990;
            //体现已经调用了这个构造方法
            System.out.println("空参构造函数");
        }
        /*
         * 这个构造函数和上面的构造函数不同之处:
         * 上面的构造函数year、speed变量是固定的,创建完对象后,对象的初始化值都是“0”,
         * 而下面这种构造函数在创建对象时就可以按照自己的意愿给year、speed变量传值
         */
        public StructureCar(int year,int speed) {
        this.year = year;
        this.speed = speed;
        }
        public void setMake(String make) {
            this.make = make;
        }
        public String getMake() {
            return make;
        }
    
    }

    在ConstructorDemo类中进行调用打印:

    package introduction;
    
    public class ConstructorDemo {
    
        public static void main(String[] args) {
        //当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
        StructureCar c1 = new StructureCar();
        
        System.out.println(c1.speed);
        System.out.println(c1.year);
        System.out.println("---------分割线---------");
        //创建对象时进行初始化
        StructureCar c2 = new StructureCar(2018,120);
        System.out.println(c2.speed);
        System.out.println(c2.year);
        }
    }

    结果为:

    八、在构造方法内部调用构造方法(构造函数调用构造函数):

    调用的格式:this();

    package introduction;
    
    public class StructureCar {
        /*
         * 构造函数歌手:
         * 1、函数名和类名相同
         * 2、没有返回值类型
         * 3、没有具体的返回值
         */
        private String make;
        int year;
        int speed;
        //这是一个构造函数
        public StructureCar() {        
         //调用带参的构造函数
         this(2100,1880); //this.year = 2000; //this.speed = 1990; //体现已经调用了这个构造方法 System.out.println("空参构造函数"); } /* * 这个构造函数和上面的构造函数不同之处: * 上面的构造函数year、speed变量是固定的,创建完对象后,对象的初始化值都是“0”, * 而下面这种构造函数在创建对象时就可以按照自己的意愿给year、speed变量传值 */ public StructureCar(int year,int speed) { this.year = year; this.speed = speed; } public void setMake(String make) { this.make = make; } public String getMake() { return make; } }

    在ConstructorDemo类中进行调用打印:

    package introduction;

    public class ConstructorDemo {

    public static void main(String[] args) {
    //当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
    StructureCar c1 = new StructureCar();
    System.out.println(c1.speed);
    System.out.println(c1.year);
    }
    }

    结果为:

    注意:调用时被调用的构造函数必须放在调用的构造方法的第一行,否则会报错

    正确(如下所示必须放在第二行,否则会报错):

    1 public StructureCar() {
    2         this(2100,1880);
    3         this.year = 2000;
    4         this.speed = 1990;
    5         //体现已经调用了这个构造方法
    6         System.out.println("空参构造函数");
    7     }

     错误:

     九、构造方法和普通方法的区别:

    1、运行上:

    构造函数在创建对象时就已经执行,只执行一次。

    在对象创建后,需要时才被调用,能够调用多次。

    2、构造函数在类中是以重载形式来体现,方法名一样,参数列表不一样。

    3、在一个类中,如果自定义了一个构造函数,默认的构造函数就不存在了

  • 相关阅读:
    JAVA for(i = 0; i<a.length; i++) 解析
    3.2.2多维数组 3.3 排序
    3.2数组
    字符串和数组
    2.7.3与程序转移有关的跳转语句
    2.7.2 循环语句
    读书共享 Primer Plus C-part 4
    Linux 批量修改文件名
    关于/usr/local/lib/libz.a(zutil.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC解决办法
    做一个有深度的程序猿
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/9511921.html
Copyright © 2011-2022 走看看