2025.3.19学习日报 封装与构造方法

封装:

封装是指将数据(属性)和与数据操作有关的方法组合在一起,形成一个类。通过封装,对象的内部状态被隐藏起来,防止外部直接访问和修改,从而确保对象的状态保持一致。

封装后需要用gettersetter方法来获取

封装的优点:
  1. 增强数据安全性:通过限制对属性的直接访问,防止外部代码意外修改对象的状态。

  2. 提高代码的可维护性:封装使得代码更加模块化,易于维护和更新。

  3. 降低模块间的耦合性:隐藏类的内部实现细节,只暴露必要的接口,降低了模块之间的依赖程度。

  4. 提高代码的复用性:封装的类可以在不同的项目中重复使用,而不需要修改内部实现。

    public class Person {
        // 私有属性
        private String name;
        private int age;
    
        // 构造方法
        public Person(String name, int age) {
            this.name = name;
            this.age = age;    //this是指向当前对象的引用   
        }
    
        // name的getter方法      //可以在生成中快速生成
        public String getName() {
            return name;
        }
    
        // name的setter方法
        public void setName(String name) {
            this.name = name;
        }
    
        // age的getter方法
        public int getAge() {
            return age;
        }
    
        // age的setter方法
        public void setAge(int age) {
            if (age >= 0) {
                this.age = age;
            } else {
                System.out.println("Age cannot be negative.");
            }
        }
    }

 构造方法:

构造方法(Constructor)是一种特殊的方法,用于在创建对象时初始化对象的状态。构造方法的名称必须与类名相同,并且没有返回值类型(连void都没有)。主要作用是在创建对象时初始化对象的属性。它会在new关键字创建对象时被自动调用,并且可以有多个重载的构造方法,以支持不同的初始化方式。

构造方法的特点

  1. 方法名与类名相同:构造方法的名称必须与类名完全一致。

  2. 没有返回值类型:构造方法没有返回值类型,甚至连void也没有。

  3. 可以重载:一个类可以有多个构造方法,只要它们的参数列表不同(参数的类型、数量或顺序不同)。

  4. 默认构造方法:如果类中没有显式定义任何构造方法,Java编译器会自动提供一个无参构造方法(默认构造方法)。默认构造方法没有任何参数,并且会调用父类的无参构造方法(super())。

  5. 必须调用父类构造方法:在构造方法的第一行,必须显式或隐式地调用父类的构造方法(super())。如果父类没有无参构造方法,必须显式调用父类的其他构造方法。

下面是运用封装和构造方法来写出并且执行随机抽人的程序:
package oop;

   public class Competitor {
       private String name;        //封装
       private int num;
       private char gender;
       private String voice;
       public boolean isSpeak;

            //setter和getter的运用
       public String getName(String name) {    
           return name;
       }

       public void setName(String name) {
           this.name = name;
       }

       public int getNum() {
           return num;
       }

       public char getGender() {
           return gender;
       }

       public void setGender(char gender) {
           this.gender = gender;
       }

       public String getVoice() {
           return voice;
       }

       public void setVoice(String voice) {
           this.voice = voice;
       }

       public void setSpeak(boolean speak) {
           isSpeak = speak;
       }

       public void setNum(int num){
            this.num = num;
       }
       public void isSpeak() {
           System.out.println("大家好我是" + name + " 性别" + gender + " 号码" + num + " 我的演讲:" + voice);

       }
   }
package oop;

import java.util.Collection;

public class space {
    public static void main(String[] args) {
          Competitor[] competitors = new Competitor[4]; //添加选手和选手信息
        Competitor competitor1 = new Competitor();

        competitor1.setName("杨二");
        competitor1.setNum(1);
        competitor1.setGender('男');
        competitor1.setVoice("我最棒我最棒");
        competitor1.isSpeak=false;
        competitors[0] = competitor1;

        Competitor competitor2 = new Competitor();
        competitor2.setName("张三");
        competitor2.setNum(2);
        competitor2.setGender('女');
        competitor2.setVoice("免费的 免费的 都是免费的");
        competitor2.isSpeak=false;
        competitors[1] = competitor2;


        Competitor competitor3 = new Competitor();
        competitor3.setName("菜坤");
        competitor3.setNum(3);
        competitor3.setGender('女');
        competitor3.setVoice("我是练习练习两年半的练习生");
        competitor3.isSpeak=false;
        competitors[2] = competitor3;

        Competitor competitor4 = new Competitor();
        competitor4.setName("张五");
        competitor4.setNum(4);
        competitor4.setGender('女');
        competitor4.setVoice("呵呵呵呵呵呵呵");
        competitor4.isSpeak=false;
        competitors[3] = competitor4;


                  for (int i = 0; i < competitors.length; i++) {
                      int rd = (int)(Math.random()*4); //random()*4为0~3的取值 左开右闭
                      Competitor c = competitors[rd]; //定义一个常量来接收随机数
                      if(c.isSpeak) {
                          i--;
                          continue;
                      }
                      System.out.println("有请第"+(i+1)+"位选手:");
                      c.isSpeak();       //调用说话的方法
                      c.isSpeak = true;
                     }
                 }
            }

 

你可能感兴趣的:(学习)