Java基础——构造方法
Published on 2022-10-08 10:41 in 分类: Java基础 with 花海~
分类: Java基础

Java基础——构造方法

    一、构造方法的定义

    默认无参构造是这个样子
    public Student(){}
    首先,构造方法没有返回值,没有void,其次构造方法的名字和类名是相同的。
    其实void也是有返回值,只不过是null(为空)
    编译的是 .java文件,完成后是执行 .class文件
    执行反编译如下:
    复制代码
    //编译
    E:\D>javac Demo.java
    //反编译
    E:\D>javap Demo.class
    Compiled from "Demo.java"
    public class Demo {
      public Demo();
      public static void main(java.lang.String[]);
    }
    复制代码

    二、构造方法传参

    1.当发现运行结果是不同时,因为创建对象的时候传递的名字不相同,new关键字创建的实例每一个都有属于自己的属性(内存空间)
    2.通过构造方法,给每个对象的name赋值了对象的名字,所以创建的实例的名字是不同的
    3.传参的是三个方式(初始化成员变量):【1.点name方式 2.set和get方式 3.构造方法】
    注:一般情况下如果局部变量不跟成员变量重名的话,方中调用成员变量是可以省略this的(就近原则)
    一般情况下,构造方法形参会跟成员变量相同,会表明哪个成员变量赋值(规范)
    复制代码
    //学生类
    public class Student {
        private String name;
        private int age;
     }
    //有参构造
    public Student(String name){
        this.name=name;
    }
    public Student(String name,int age){
        //就近原则,当属性名字和成员变量相同时加this
        this.name=name;
        this.age=age;
    }
    //无参构造,如果有了有参构造无参构造就失效了
    public Student(){}
    //赋值传参
    Student s1=new Student("zs");
    System.out.println(s1.getName());
    Student s2=new Student("zs",22);
    System.out.println(s2.getName()+","+s2.getAge());
    复制代码
    一般来说,我们构造方法作用主要是给成员变量赋值,其他操作尽量不要在构造方法里面操作,除非没有其他方法可以实现

    三、总结如下:

    1.构造方法名字和类名相同,构造方法没有返回值,不需要void修饰
    2.使用new关键字实例化对象时会用到构造方法
    3.构造方法的参数与普通方法的参数的用法相同
    4.当我们实现了构造方法之后,虚拟机不会赠送无参构造,如果想使用无参构造,只能自己定义
    5.构造函数中this的作用和普通函数相同
    6.构造方法主要用于给当前构造对象的成员变量赋值

    四、构造方法重载

    复制代码
    public Student(String name){
        this.name=name;
    }
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    复制代码

    五、构造方法相互调用

    this.属性名:操作属性
    this.方法名:调用方法
    this():调用自己的构造函数
    复制代码
    public Student(String a){
        //this()调用构造方法
        this(a,0,null,null)
    }
    public Student(String name,int age,String gender,String password){
        this.name=name;
        this.age=age;
        this.gender;
    }
    复制代码

    posted @   花海~  阅读(190)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
    · Manus爆火,是硬核还是营销?
    · 终于写完轮子一部分:tcp代理 了,记录一下
    · 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
    · 单元测试从入门到精通
    点击右上角即可分享
    微信分享提示