54-JavaBean、综合案例

一、JavaBean

1. 它是什么

  • 也可以称为实体类,其对象可以用于在程序中封装数据。
  • 实体类是?比如:汽车类、学生类、用户类 …

2. 它的标准书写要求

  • 成员变量使用 private 修饰。

  • 提供成员变量对应的 setXxx() / getXxx() 方法

  • 必须提供一个 无参数构造器;有参数构造器是可写可不写的

  • 实体类: 用户类

package com.app.javabean;

// 用户类
public class User {
    // 1.成员变量建议使用private私有
    private String name;    // 用户姓名
    private double height;  // 用户身高
    private double salary;  // 用户工资

    /**
        2.提供成员变量对应的 setXxx() / getXxx() 方法,暴露其取值和赋值
        快捷键:鼠标右键 ——> Generate ——> Getter and Setter
     */
    public String getName() {
        return name;
    }

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

    public double getHeight() {
        return height;
    }

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

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    /**
        3.必须提供无参数构造器: 默认存在的;
          有参数构造器是可有可无的,如果你一旦定义了有参构造器,就必须也定义无参构造器
        快捷键:鼠标右键 ——> Generate ——> Constructor
     */
    // 无参
    public User() {

    }

    // 有参
    public User(String name, double height, double salary) {
        this.name = name;
        this.height = height;
        this.salary = salary;
    }
}
  • 实现类:封装用户信息
package com.app.javabean;

/**
    目标:学会JavaBean的书写要求
 */
// 测试类
public class UserTest {
    public static void main(String[] args) {
        // 1.无参构造器创建对象封装一个用户信息
        User u1 = new User();
        u1.setName("关羽");
        u1.setHeight(189.6);
        u1.setSalary(2500);
        // 2.取值,输出
        System.out.println("---------用户1的信息---------");
        System.out.println("姓名:" + u1.getName());
        System.out.println("身高:" + u1.getHeight() + "cm");
        System.out.println("工资:" + u1.getSalary());

        // 3.有参构造器创建对象封装一个用户信息
        User u2 = new User("张飞", 178, 15000);
        // 4.取值,输出
        System.out.println("\n---------用户2的信息---------");
        System.out.println("姓名: " + u2.getName());
        System.out.println("身高: " + u2.getHeight() + "cm");
        System.out.println("工资: " + u2.getSalary());
    }
}
  • 控制台
---------用户1的信息---------
姓名:关羽
身高:189.6cm
工资:2500.0

---------用户2的信息---------
姓名: 张飞
身高: 178.0cm
工资: 15000.0

Process finished with exit code 0

3. 它的书写快捷键

  • 提供成员变量对应的 setXxx() / getXxx() 方法 的快捷键
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 必须提供无参数构造器;有参数构造器是可有可无,一旦定义了有参数构造器,就必须也定义无参数构造器
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 生成有参数构造器也是

      1. 空白处鼠标右键

      2. 单击Generate:生成的意思

      3. 单击Constructor:构造器的意思

      4. 左手按住Shift,右手单击最后一个属性
        在这里插入图片描述
        在这里插入图片描述

二、成员变量、局部变量的区别

1. 它们的区别

区别成员变量局部变量
类中位置不同类中,方法外

例如:
public class Student {
private String name;
private int age;
}
常见于方法中

例如:
public class Test{
public static void main(String[] args){
double score = 98.6;
String name = “关羽”;
System.out.println(name + ": " + score);
}
}
初始化值不同有默认值,无需初始化(赋值)没有默认值,使用之前需要完成初始化(赋值)
内存位置不同堆内存栈内存
生命周期不同随着对象的创建而存在,随着对象的消失而消失随着方法的调用而存在,随着方法的运行结束而消失
作用域很难界定,因为成员变量属于每个对象在所归属的大括号中

三、面向对象综合案例:模仿电影信息展示

1. 需求

  • 使用面向对象编程,模仿电影信息的展示。
    在这里插入图片描述

2. 分析

  • 一部电影是一个Java对象,需要先设计一个电影类,再无参构造器或有参构造器创建对象封装一个电影信息。
  • 多部电影对象可以采用数组存储起来。
  • 依次遍历数组中的每个电影对象,取出其信息进行展示。

3. 实现

1.实体类: 电影类
  (1.1) 成员变量建议使用private私有
  		a: 电影名称
  		b: 电影评分
  	    c: 地区
  	    d: 类型
  	    e: 导演
  	    f: 主演
  (1.2) 提供成员变量对应的 setXxx() / getXxx() 方法,暴露其取值和赋值
  (1.3) 必须提供一个无参数构造器,有参数构造器是可有可无,一旦定义了有参,无参也必须定义
  
2.实现类:
  (2.1) 动态初始化一个数组,类型为电影类,长度为3,用于存储3部需要展示的电影
  (2.2) 有参构造器创建对象封装3部电影信息,并分别存入数组中
  (2.3) 定义一个用于展示电影信息的方法showFilm,无返回值,设置一个形参: 类型是电影类,用于接收传入的电影数组
  		a: 定义for循环,遍历电影数组
  		   (1) 取出每次遍历到的电影的信息并用变量接收
  		   (2) 判断电影数组中的电影是否为空
  		   	   (2.1) 不为空,展示所有电影信息
  		   	   (2.2) 为空,结束展示
  (2.4) 成功存入,调用showFilm方法,传入电影数组,展示所有电影信息
  • 实体类: 电影类
package com.app.demo;

// 1.实体类: 电影类
public class Film {
    // (1.1) 成员变量建议使用private私有
    private String name;        // a: 电影名称
    private double score;       // b: 电影评分
    private String region;      // c: 地区
    private String type;        // d: 类型
    private String director;    // e: 导演
    private String starring;    // f: 主演

    /**
        (1.2) 提供成员变量对应的 setXxx() / getXxx() 方法,暴露其取值和赋值
     */
    public String getName() {
        return name;
    }

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

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getRegion() {
        return region;
    }

    public void setRegion(String region) {
        this.region = region;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public String getStarring() {
        return starring;
    }

    public void setStarring(String starring) {
        this.starring = starring;
    }

    /**
         (1.3) 必须提供一个无参数构造器,有参数构造器是可有可无,一旦定义了有参,无参也必须定义
     */
    // 无参
    public Film() {

    }

    // 有参
    public Film(String name, double score, String region, String type, String director, String starring) {
        this.name = name;
        this.score = score;
        this.region = region;
        this.type = type;
        this.director = director;
        this.starring = starring;
    }
}
  • 实现类
package com.app.demo;

/**
    目标:完成电影信息的展示案例,理解面向对象编程的代码
 */

// 2.实现类
public class FilmTest {
    public static void main(String[] args) {
        // (2.1) 动态初始化一个数组,类型为电影类,长度为3,用于存储3部需要展示的电影
        Film[] films = new Film[3];

        // (2.2) 有参构造器创建对象封装3部电影信息,并分别存入数组中
        films[0] = new Film("《长津湖》", 9.5, "中国",
                                "剧情 / 历史 / 战争", "陈凯歌 / 徐克 / 林超贤",
                                "吴京 / 易烊千玺 / 段奕宏 / 朱亚文 / 李晨");

        films[1] = new Film("《我和我的父辈》", 9.4, "中国大陆", "剧情",
                                "吴京 / 章子怡 / 徐峥 / 沈腾",
                                "吴京 / 章子怡 / 徐峥 / 沈腾 / 韩昊霖");

        films[2] = new Film("《五个扑水的少年》", 8.9, "中国大陆", "剧情 / 喜剧 / 运动",
                                "宋灏霖", "辛云来 / 冯祥琨 / 李孝谦 / 吴俊霆 / 王川");

        // (2.4) 成功存入,调用showFilm方法,传入电影数组,展示所有电影信息
        showFilm(films);
    }

    // (2.3) 定义一个用于展示电影信息的方法showFilm,无返回值,设置一个形参: 类型是电影类,用于接收传入的电影数组
    public static void showFilm(Film[] films) {
        // a: 定义for循环,遍历电影数组
        for (int i = 0; i < films.length; i++) {
            // (1) 取出每次遍历到的电影的信息并用变量接收
            Film film = films[i];
            // (2) 展示所有电影信息
            System.out.println("电影名: " + film.getName() + "\n"
                              + "评分: " + film.getScore() + "\n"
                              + "地区: " + film.getRegion() + "\n"
                              + "类型: " + film.getType() + "\n"
                              + "导演: " + film.getDirector() + "\n"
                              + "主演: " + film.getStarring());
            System.out.println("—————————————————————————————————————————");
        }
    }
}
  • 控制台
电影名: 《长津湖》
评分: 9.5
地区: 中国
类型: 剧情 / 历史 / 战争
导演: 陈凯歌 / 徐克 / 林超贤
主演: 吴京 / 易烊千玺 / 段奕宏 / 朱亚文 / 李晨
—————————————————————————————————————————
电影名: 《我和我的父辈》
评分: 9.4
地区: 中国大陆
类型: 剧情
导演: 吴京 / 章子怡 / 徐峥 / 沈腾
主演: 吴京 / 章子怡 / 徐峥 / 沈腾 / 韩昊霖
—————————————————————————————————————————
电影名: 《五个扑水的少年》
评分: 8.9
地区: 中国大陆
类型: 剧情 / 喜剧 / 运动
导演: 宋灏霖
主演: 辛云来 / 冯祥琨 / 李孝谦 / 吴俊霆 / 王川
—————————————————————————————————————————

Process finished with exit code 0

4. 执行内存图

在这里插入图片描述

5. 结论

  • 数组中存储的元素并不是对象本身,而是对象的地址。
  • 检验方法:将存有对象的数组打印输出看一下就知道了!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值