学习Java第06天-面向对象基础

文章目录

设计对象并使用

java 复制代码
public class 类名{
	1. 成员变量(代表属性,一般是名词)
	2. 成员方法(代表行为,一般是动词)
	3. 构造器
	4. 代码块
	5. 内部类
}

Person类

java 复制代码
public class Person {
    String name;
    String major;
    int age;
    double height;
    double weight;

    public void selfIntroduction() {
        System.out.println("大家好,我的名字是" + name + ",我今年" + age + "岁了,身高" + height + ",体重" + weight + "公斤,大学主修" + major + ".");
    }
}

Test类

java 复制代码
public class Test {
    public static void main(String[] args) {
        Person you = new Person();
        you.name = "法外狂徒张三";
        you.major = "法律";
        you.age = 23;
        you.height = 176;
        you.weight = 70;

        you.selfIntroduction();
    }
}

类名首字母建议大写、英文、有意义,满足驼峰模式,不能用关键字,满足标志符规定

一个代码文件中可以定义多个类,但是只能一个类是public修饰的

publi修饰的类名必须是Java代码的文件名称

对象内存图

构造器

构造器定义格式

java 复制代码
修饰符 类名(形参列表) {
	...
}
// 例如
public class Car {
	...

    // 无参数构造器
    public Car() {
		...
    }

    // 有参数构造器
    public Car(String name, double price) {
		...
    }
}

无参数构造器(默认存在的):初始化的对象时,成员变量的数据均采用默认值。

有参数构适器:在初始化对象的时候,同时可以为对象进行赋值。

需要注意的是,如果没有写无参数构造器,只写了有参数构造器,默认的无参数构造器将会失效

this关键字

作用:出现在成员方法、构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法

示例:

java 复制代码
public class Car {
    String name;

    public Car(String name) {
        this.name = name;
        System.out.println("给当前对象的name属性赋值为:" + name);
    }
}

封装

是面向对象三大特征之一:封装,继承,多态。

  • 一般会把成员变量使用 private 隐藏起来

  • 通过 getter 和 setter 方法暴露其访问
    好处:

  • 加强了程序代码的安全性

  • 适当的封装可以提升开发效率,同时可以让程序更容易理解与维护

标准JavaBean

  • 成员变量使用 private 修饰
  • 提供每一个成员变量对应的 setXxx() / getXxx()
  • 必须提供一个无参构造器
java 复制代码
public class Person {
    String name;
    String major;
    int age;
    double height;
    double weight;

    public Person() {
    }

    // 可选项
    public Person(String name, String major, int age, double height, double weight) {
        this.name = name;
        this.major = major;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }

    public String getName() {
        return name;
    }

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

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }
}

成员变量&局部变量

区别 成员变量 局部变量
类中位置不同 类中,方法外 常见于方法中
初始化值不同 有默认初始化值 没有,使用之前需要完成赋值
内存位置不同 堆内存 栈内存
生命周期不同 随着对象的创建而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的运行结束而消失
类中位置不同 在所归属的大括号中

综合案例

写一个简单的学生注册系统:

java 复制代码
public class Student {
    private String name;
    private int age;
    private String major;
    private int yearOfEnrollment;

    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 getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public int getYearOfEnrollment() {
        return yearOfEnrollment;
    }

    public void setYearOfEnrollment(int yearOfEnrollment) {
        this.yearOfEnrollment = yearOfEnrollment;
    }
}
java 复制代码
import java.util.Scanner;

public class EnrollSystem {
    public static void main(String[] args) {
        // 学校只能容纳 100 人
        Student[] schoolStudents = new Student[100];

        enroll(schoolStudents);
    }

    public static void welcomeMenu() {
        System.out.println("###############欢迎加入Java工程师###############");
    }

    public static void enroll(Student[] studentArr) {
        while (true) {
            welcomeMenu();

            Student student = createStudent();

            for (int i = 0; i < studentArr.length; i++) {
                if(studentArr[i] == null){
                    studentArr[i] = student;
                    break;
                }
            }

            printStudents(studentArr);
        }
    }

    public static void printStudents(Student[] students) {
        for (int i = 0; i < students.length; i++) {
            if (students[i] == null) {
                break;
            }
            System.out.println("学生编号: " + i);
            System.out.println("学生姓名: " + students[i].getName());
            System.out.println("学生年龄: " + students[i].getAge());
            System.out.println("学生专业: " + students[i].getMajor());
            System.out.println("入学时间: " + students[i].getYearOfEnrollment());
            System.out.println();
        }
    }

    public static Student createStudent() {
        Scanner sc = new Scanner(System.in);
        Student student = new Student();

        System.out.println("请输入你的姓名: ");
        String name = sc.next();
        System.out.println("请输入你的年龄: ");
        int age = sc.nextInt();
        System.out.println("请输入你的专业: ");
        String major = sc.next();
        System.out.println("请输入你的入学年份: ");
        int yearOfEnrollment = sc.nextInt();

        student.setName(name);
        student.setAge(age);
        student.setMajor(major);
        student.setYearOfEnrollment(yearOfEnrollment);

        return student;
    }
}
相关推荐
渣哥14 分钟前
Java Set 不会重复?原来它有“记仇”的本事!
java
一叶飘零_sweeeet15 分钟前
从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
java·数据库·mysql·数据库架构·分库分表
苹果醋318 分钟前
数据库索引设计:在 MongoDB 中创建高效索引的策略
java·运维·spring boot·mysql·nginx
Dontla29 分钟前
Dockerfile解析器指令(Parser Directive)指定语法版本,如:# syntax=docker/dockerfile:1
java·docker·eureka
彭于晏Yan32 分钟前
SpringBoot优化树形结构数据查询
java·spring boot·后端
AAA修煤气灶刘哥1 小时前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud
一川月白7091 小时前
51单片机---硬件学习(跑马灯、数码管、外部中断、按键、蜂鸣器)
单片机·学习·51单片机·外部中断·蜂鸣器·数码管·跑马灯
上位机付工1 小时前
C#与倍福TwinCAT3进行ADS通信
开发语言·c#
练习时长一年1 小时前
Spring事件监听机制(三)
java·后端·spring
月阳羊1 小时前
【硬件-笔试面试题-69】硬件/电子工程师,笔试面试题(知识点:电机驱动电路的反馈电路)
java·经验分享·嵌入式硬件·面试