• 构造方法


    构造方法定义

    需求:在创建对象的时候就明确属性值

    解决方式:利用构造方法

    1、构造方法的格式:

    修饰符 构造方法名(参数列表)

    {

    }

    2、构造方法的体现:

    ①构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。

    ②构造方法名称必须和类名保持一致。

    ③构造方法没有具体的返回值。

    3、代码体现:

    class Person {
        // Person的成员属性age和name
        private int age;
        private String name;
    
        // Person的构造方法,拥有参数列表
        Person(int a, String nm) {
            // 接受到创建对象时传递进来的值,将值赋给成员属性
            age = a;
            name = nm;
        }
    }

    构造方法的调用

    创建对象时构造方法的调用

    class Person {
        // Person的成员属性age和name
        private int age;
        private String name;
    
        // Person的构造方法,拥有参数列表
        Person(int a, String nm) {
            // 接受到创建对象时传递进来的值,将值赋给成员属性
            age = a;
            name = nm;
        }
    
        public void speak() {
            System.out.println("name=" + name + ",age=" + age);
        }
    }
    
    class PersonDemo {
        public static void main(String[] args) {
            // 创建Person对象,并明确对象的年龄和姓名
            Person p2 = new Person(23, "张三");
            p2.speak();
        }
    }

    注意:在创建对象时,会调用与参数列表对应的构造方法。

    默认构造方法和细节

    问题:

    在没有学习构造方法之前,我们也可以通过new关键字创建对象,并调用相应的方法,同时在描述事物时也没有写构造方法。这是为什么呢?

    答案:

    在之前学习的过程中,描述事物时,并没有显示指定构造方法,当在编译Java文件时,编译器会自动给class文件中添加默认的构造方法。

    如果在描述类时,我们显示指定了构造方法,那么,当在编译Java源文件时,编译器就不会再给class文件中添加默认构造方法。

    class  Person {
        //如果没有显示指定构造方法,编译会在编译时自动添加默认的构造方法
        //Person(){}  //空参数的默认构造方法
    }

    构造方法的细节:

    1、一个类中可以有多个构造方法,多个构造方法是以重载的形式存在的

    2、构造方法是可以被private修饰的,作用:其他程序无法创建该类的对象。

    class Person {
        private int age;
        private String name;
    
        // 私有无参数的构造方法,即外界不能通过new Person();语句创建本类对象
        private Person() {
        }
    
        // 多个构造方法是以重载的形式存在
        Person(int a) {
            age = a;
        }
    
        Person(String nm, int a) {
            name = nm;
            age = a;
        }
    }

    构造方法和一般方法区别

    构造方法在对象创建时就执行了,而且只执行一次。

    一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

    问题:

    有了构造方法之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?

    答案:

    需要相应的set和get方法,因为对象在创建之后需要修改和访问相应的属性值时,在这时只能通过set或者get方法来操作。

    例题:

    1、编写一个完整的Person类,使用this关键字给成员变量进行赋值在测试类中测试

    public class Person {
        private String name;
        private int age;
        private String sex;
        public Person(String name,int age,String sex){
            this.name=name;
            this.age=age;
            this.sex=sex;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
    public static void main(String[] args) {
            Person p1=new Person("萨曼莎",24,"女");
            System.out.println(p1.getName());
            System.out.println(p1.getAge());
            System.out.println(p1.getSex());
            Person p2=new Person("劳拉",21,"女");
            System.out.println(p2.getName());
            System.out.println(p2.getAge());
            System.out.println(p2.getSex());
        }

     2、根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试。

    标准格式包含: 私有属性   无参构造  有参构造  setter 和getter 需求中的方法

    需求一:

      员工类Employee

        属性:姓名name,工号id,工资salary 

        行为:显示所有成员信息的方法show()

    需求二:

      动物类Animal

        属性:姓名name,年龄age

        行为:吃饭eat,睡觉sleep

    需求三:

      人类Person

        属性:姓名name,年龄age,性别gender

        行为:学习study,睡觉sleep

    public class Employee {
        private String name;
        private int id;
        private double salary;
        public Employee(String name,int id){
            this.name=name;
            this.id=id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public double getSalary() {
            return salary;
        }
        public void setSalary(double salary) {
            this.salary = salary;
        }
        public void show(){
            System.out.println("年龄"+id+"姓名:"+name+"工资"+salary);
        }
    }
    public class Animal {
        private String name;
        private int age;
        public Animal(String name,int age){
            this.name=name;
            this.age=age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public void eat(){
            System.out.println("我会吃饭");
        }
        public void sleep(){
            System.out.println("我会睡觉");
        }
    }
    public class Person {
        private String name;
        private int age;
        private String sex;
        public Person(String name,int age,String sex){
            this.name=name;
            this.age=age;
            this.sex=sex;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public void studay(){
            System.out.println("我会学习");
        }
        public void sleep(){
            System.out.println("我会睡觉");
        }
        
    }
    public static void main(String[] args) {
            Employee yg=new Employee("萨曼莎",24);
            yg.setSalary(5000);
            yg.show();
            Employee yg1=new Employee("劳拉",21);
            yg1.setSalary(3000);
            yg1.show();
            Animal dog=new Animal("乔治",4);
            System.out.println("我叫"+dog.getName()+"今年"+dog.getAge()+"岁");
            dog.eat();
            dog.sleep();
            Person p1=new Person("约拿",26,"男");
            System.out.println("姓名"+p1.getName()+"年龄"+p1.getAge()+"性别"+p1.getSex());
            p1.studay();
            p1.sleep();
        }
  • 相关阅读:
    RESTful规范1
    Django -- 发送HTML格式的邮件
    11.10 vue
    Selenium 使用
    Beautiful Soup的用法
    Pthon常用模块之requests,urllib和re
    爬虫--工具安装Jupyter anaconda
    11-3
    Python -- tabulate 模块,
    Python -- queue队列模块
  • 原文地址:https://www.cnblogs.com/Ace-suiyuan008/p/9372841.html
Copyright © 2020-2023  润新知