java-面对对象编程学习记录(构造器,this关键字,封装,实体类)

一、类

类的定义:
类是面向对象编程的核心单元,用于描述一组具有相同属性和行为的对象的抽象模板。

类比:类是“设计图纸”,对象是根据图纸建造的“具体房子”。
作用:通过类可以创建对象(实例化),实现代码复用和数据封装。

例子,创建学生类,里面可以存入成绩,年龄,名字。

public class Student{
string name;
int score;
int age;
}

二、构造器

用于初始化对象,若在创建类时未定义构造器,java会默认提供无参数构造器。(但写了有参构造器就不会默认提供无参构造器,此时需要自己写)

public class Student
{
    String name;
    int score;
    int age;
    //1、无参数的构造器,若不写构造器就默认拥有,
    //但写了有参数的构造器必须写无参数的构造器,不然不能定义空内容的对象
    public Student() {
                System.out.println("无参数构造器开始运行");    //创建类的时候调用
    }
    public Student(String n, int s, int a)
    {
        //此时有参构造器开始运行
        name=n;
        score=s;
        age=a;
    }

}
public class studentdemo {
    public static void main(String[] args) {
        Student s1 = new Student();                  //调用无参构造器
        Student s2 = new Student("张三",70,18);      //调用有参构造器
        s1.name="李四";
        s1.age=18;
        s1.score=90;
        System.out.println(s1.name+" "+s1.age+" "+s1.score);
        System.out.println(s2.name+" "+s2.age+" "+s2.score);
    }
}

 三、this关键字

作用

1、区分成员变量与局部变量:当二者同名时,用this.变量名可以明确指向成员变量

2、调用类中的其他构造器:在构造器中用this(参数)可以调用本类中的其他构造器,但必须放在方法第一行

public class Student {
    String name;
    
    public Student() {
        this("默认姓名"); // 调用有参构造器
    }
    
    public Student(String name) {
        //前文用n指代name,但n本身没有意义,用name能使代码更优雅
        this.name = name; // this.name指成员变量,name为形参
    }
}

四、封装

核心思想:
通过private修饰成员变量,使类中的成员变量只能在本类中被直接调用,外部方法想要调用需要类内设置set/get方法提供访问权限。

public class Student1 {
    String name;
    private int age;
    int scorce;
    public void SetAge(int age)
    {
        if(age>0&&age<100)
        {
            this.age=age;
        }
        else
        {
            System.out.println("您输入的年龄数据非法");
        }
    }
}

优势:

1、数据安全性:避免非法赋值(如SetAge()可限制年龄范围)

2、代码可维护性:修改内部实现不影响外部调用(当需要改动age的存储逻辑时,只需要修改存储方法SetAge)。

五、实体类

实体类是一种特殊类,要满足以下要求

1、类中的成员变量全部私有,并提供public修饰的getter与setter方法。

2、类中要提供无参构造器与有参构造器。

应用场景:实体类的对象只负责数据存取,实现数据和数据业务处理相分层。

示例

学生类的创建

package JavaBean;

public class Student {
    //私有成员变量
    private String name;
    private int age;
    private int chinesescorce;
    private int mathscorce;
    //无参构造器
    public Student(){

    }
    //有参构造器
    public Student(String name, int age, int chinesescorce,int mathscorce)
    {
        this.name=name;
        this.age=age;
        this.chinesescorce=chinesescorce;
        this.mathscorce=mathscorce;
    }
    //公开的setter与getter
    public String GetName()
    {
        return name;
    }
    public void SetName(String name)
    {
        this.name=name;
    }
    public int GetAge()
    {
        return age;
    }

    public void setAge(int age) {
        if(age>0&&age<100)
        this.age = age;
        else
            System.out.println("您的输入年龄不合法");
    }

    public int getChinesescorce() {
        return chinesescorce;
    }

    public void setChinesescorce(int chinesescorce) {
        if(chinesescorce>=0&&chinesescorce<=100)
        this.chinesescorce = chinesescorce;
        else
        {
            System.out.println("您的成绩输入不合法");
        }
    }
    public void setMathscorce(int mathscorce)
    {
        if(mathscorce>=0&&mathscorce<=100)
            this.mathscorce=mathscorce;
        else
            System.out.println("您输入的成绩不合法");
    }
    public int getmathscorce()
    {
        return mathscorce;
    }
}

方法类

package JavaBean;
//处理学生类的方法
public class Operatorbuild {
    private Student s;//记住将要处理的学生变量
    public Operatorbuild(Student s)
    {
        this.s=s;
    }
    public int averagescore()
    {
        return (s.getChinesescorce()+s.getmathscorce())/2;
    }
    public int Totalscore()
    {
        return s.getChinesescorce()+s.getmathscorce();
    }
}

测试

package JavaBean;

public class Text {
    public static void main(String[] args)
    {
        Student s1=new Student();
        s1.SetName("小明");
        s1.setAge(18);
        s1.setChinesescorce(90);
        s1.setMathscorce(83);
        Operatorbuild operator=new Operatorbuild(s1);
        System.out.println("平均成绩为:"+operator.averagescore());
        System.out.println("总成绩为: "+operator.Totalscore());
    }
}

以上代码就实现的学生数据存储与平均分,总分计算的分开业务处理。

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