Java自学(三)面向对象编程

news2025/1/19 16:18:40

目录

什么是面向对象

举例

this关键字和构造器

实体类

电影小案例


什么是面向对象

我们日常生活中谈到一个事物,总会描述它的性质与行为,这个事物也就是 ”对象”。比如一个学生对象,他的属性有姓名、学号、成绩......他的行为有上课、吃饭、睡觉.......将一个对象及其行为封装起来便于描述表达,这就是面向对象的思想。

举例

先在右边创建一个学生类,其成员变量有name, ID, grade,成员方法有分别获取3个属性的3种方法。

再在左边将对象模板实例化,也就是将抽象的学生类型抽象成具体的一名学生。针对实例化出的每一名学生可以设置不同的属性参数,并调用其成员方法。

在成员变量初始化时可以赋初始值,当然这么做没有意义,默认一开始成员变量是有初值的。

我们来看一下具体的实现过程:

 

this关键字和构造器

 这一块学了C++后再看感觉太亲切了,this 是为了避免变量重名而产生的。

这不能这么写吧?因此就有了this关键字。

构造器就类似于C++的构造函数,你不显示的写的话编译器会自动生成一个默认的无参构造器,要是你显示写了一个带参构造器,就不会自动生成,这时最好再自己加一个无参构造器。

构造器方便我们给成员变量赋初始值,这样可以不用在方法内部或者外部创建对象的时候赋值,而是直接调用构造器进行赋值。

 

实体类

什么是实体类?————它仅仅是用来保存数据的Java类,可以用它来创建对象。

它的成员变量必须私有,并且必须为其提供get , set方法以及无参构造器。

应用场景是针对数据和数据的处理分离,是目前主流的处理方式。

具体案例:

public class Student {
    private String name;
    private int ID;
    private double grade;

    public Student(String name, int ID, double grade) {
        this.name = name;
        this.ID = ID;
        this.grade = grade;
    }

    public Student() {
    }

    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 getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }
}

 这就是实体类,用来保存数据。

之前我们想打印成绩,或者判断成绩是否合格,是在Student类中定义方法,现在可以在创建一个StudentOperator类来描述该动作。

//StudentOperator类

public class StudentOperator {
    private Student s;
    public StudentOperator(Student s){
        this.s = s;
    }
    public void passGrade(){
        if(s.getGrade() >= 3.0){
            System.out.println(s.getName()+s.getID()+"成绩合格");
        }else{
            System.out.println(s.getName()+s.getID()+"成绩不合格");
        }
    }
}
//Test类

public class Test {
    public static void main(String[] args) {
        Student s1 = new Student("张三",2021,3.0);
        StudentOperator operator = new StudentOperator(s1);
        operator.passGrade();
    }
}

结果: 

电影小案例

//Movie class

package demo;

public class Movie {
    private int ID;
    private String name;
    private double price;
    private double score;

    public Movie() {
    }

    public Movie(int ID, String name, double price, double score) {
        this.ID = ID;
        this.name = name;
        this.price = price;
        this.score = score;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public double getScore() {
        return score;
    }

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

public class MovieOperator {
    private Movie[] movies;
    public MovieOperator(Movie[] movies){
        this.movies = movies;
    }
    public void Print(){
        System.out.println("打印全部电影信息");
        System.out.println("--------------------");
        for (int i = 0; i < movies.length; i++) {
            Movie m = movies[i];
            System.out.println(m.getName()+" "+
                    m.getID()+" "+m.getScore()+" "+m.getPrice());
            System.out.println("--------------------");
        }
    }
    public boolean searchMovie(int ID){
        for (int i = 0; i < movies.length; i++) {
            Movie m = movies[i];
            if(ID == m.getID()){
                System.out.println(m.getName()+" "+
                        m.getID()+" "+m.getScore()+" "+m.getPrice());
            return true;
            }
        }
        System.out.println("查找失败,电影不存在");
        return false;
    }
}
//Test class

 public class Test {
    public static void main(String[] args){
        Movie[] movies = new Movie[3];
        movies[0] = new Movie(001,"你的名字",39.9,8.9);
        movies[1] = new Movie(002,"天气之子",29.9,8.0);
        movies[2] = new Movie(003,"铃芽之旅",25.8,8.7);
        MovieOperator m = new MovieOperator(movies);
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入数字 0, 1,2以选择相应的小程序");
            int r = sc.nextInt();
            switch(r){
                case 0:
                    System.out.println("退出程序");
                    return;
                case 1:
                    m.Print();
                    break;
                case 2:
                    System.out.println("请输入你要查找的电影编号");
                    int id = sc.nextInt();
                    boolean flag = m.searchMovie(id);
                    break;
                default:
                    System.out.println("输入不合法的数字,请重新输入");
                    break;
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1051828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】C++模板进阶 —— 非类型模板参数、模板的特化以及模板的分离编译

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】C多…

史玉柱复出一年:巨人股权第三次被冻结,力推AI+游戏

大数据产业创新服务媒体 ——聚焦数据 改变商业 一则股权冻结信息&#xff0c;又一次将复出一年的史玉柱推上风口浪尖。 天眼查APP显示&#xff0c;巨人投资近日新增一则股权冻结信息&#xff0c;被执行人为史玉柱&#xff0c;冻结股权数额1.14亿元&#xff0c;冻结期限为三年…

Visual Studio 中将TAB设置为空格

将TAB设置为空格的原因很多&#xff0c;其中一点是为了统一不同编译器对TAB的解释&#xff0c;防止代码风格在不同编译器下不一致等。 在菜单中选择: 工具-->选项-->文本编辑器--->所有语言-->制表符 在窗口中选择&#xff0c;制表符大小和缩进大小都选为4&#xf…

【从入门到起飞】JavaSE—Stream流

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f354;Stream流的作用&#x1f354;Stream流的使用步骤&#x1f384;获取Strea…

机器人过程自动化(RPA)入门 7. 处理用户事件和助手机器人

在UiPath中,有两种类型的Robot用于自动化任何流程。一个是后台机器人,它在后台工作。它独立工作,这意味着它不需要用户的输入或任何用户交互。另一个是前台机器人,也被称为助理机器人。 本章介绍前台机器人。在这里,我们将了解自动化过程中通过简单按键、单击鼠标等触发事…

代码随想录算法训练营第四十六天 | 动态规划 part 8 | 139.单词拆分、多重背包、背包问题总结

目录 139.单词拆分思路代码 多重背包背包问题总结 139.单词拆分 Leetcode 思路 dp[i] : 字符串长度为i的话&#xff0c;dp[i]为true&#xff0c;表示可以拆分为一个或多个在字典中出现的单词。如果确定dp[j] 是true&#xff0c;且 [j, i] 这个区间的子串出现在字典里&#xf…

仿真数据检查器如何比较数据

可以定制仿真数据检查器比较过程&#xff0c;以多种方式满足您的需求。在比较各运行时&#xff0c;仿真数据检查器会执行以下操作&#xff1a; 根据对齐设置&#xff0c;对齐基线运行和比较项运行中的信号对组。 仿真数据检查器不会比较无法对齐的信号。 根据指定的同步方法同…

Leetcode 剑指 Offer II 046. 二叉树的右视图

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底…

【中秋国庆不断更】OpenHarmony定义可动画属性:@AnimatableExtend装饰器

AnimatableExtend装饰器用于自定义可动画的属性方法&#xff0c;在这个属性方法中修改组件不可动画的属性。在动画执行过程时&#xff0c;通过逐帧回调函数修改不可动画属性值&#xff0c;让不可动画属性也能实现动画效果。 可动画属性&#xff1a;如果一个属性方法在animation…

批量剪辑视频软件,支持免费试用,合成视频,预览不限量不收费

几乎对于所有的短视频创作者来说&#xff0c;批量剪辑软件都是现在或者将来必备的办公软件。现如今市场上的批量剪辑软件也是层出不穷&#xff0c;质量也是良莠不齐。 今天给大家实实在在的推荐一款性价比非常高的批量剪辑软件——超级编导&#xff0c;适用于既想提升团队视频…

volatile关键字以及使用场景

在多线程环境下&#xff0c;如果编程不当&#xff0c;可能会出现程序运行结果混乱的问题。 出现这个原因主要是&#xff0c;JMM 中主内存和线程工作内存的数据不一致&#xff0c;以及多个线程执行时无序&#xff0c;共同导致的结果。 同时也提到引入synchronized同步锁&#x…

Android Studio插件版本与Gradle 版本对应关系

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、Gradle各版本对应关系3.1 Gradle 版…

杀掉进程但是fastapi程序还在运行

两个脚本&#xff0c;一个运行fastapi服务&#xff0c;一个重启服务&#xff1a; 启动服务先&#xff1a; 发现问题&#xff0c;杀掉 server.sh 后&#xff0c;依旧有&#xff1a; 不知道为什么会出现这个&#xff0c;直接kill吧&#xff1a; server.sh: #!/bin/bashparpath/…

Unity/WebGL打包/跨域问题/简单解决“......has been blocked by CORS policy: ......“

报错原文&#xff1a; Access to XMLHttpRequest atfile:///C:/Users/13171/My%20project%20(1)/Test/Build/test.data.gz from origin null has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-e…

NX 1988 如何将组件转为部件

打开组件 文件-导出-部件 指定部件名为1206&#xff0c;类选择&#xff1a;所有要导出的部件 选择完全加载 完成

(vue3)create-vue 组合式APIsetup、ref、watch,通信

优势&#xff1a; 更易维护&#xff1a;组合式api&#xff0c;更好的TS支持 之前是选项式api&#xff0c;现在是组合式&#xff0c;把同功能的api集合式管理 复用功能封装成一整个函数 更快的速度 更小的体积 更优的数据响应式&#xff1a;Proxy create-vue 新的脚手架工…

vue前端项目中添加独立的静态资源

如果想要在vue项目中放一些独立的静态资源&#xff0c;比如html文件或者用于下载的业务模板或其他文件等&#xff0c;需要在vue打包的时候指定一下静态资源的位置和打包后的目标位置。 使用的是 copy-webpack-plugin 插件&#xff0c;如果没有安装则需要先安装一下&#xff0c;…

Pikachu靶场——PHP反序列化漏洞

文章目录 1. PHP反序列化1.1 反序列化代码审计1.2 漏洞防御 1. PHP反序列化 可参考我写的另一篇博客&#xff1a;反序列化漏洞及漏洞复现。 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串&#xff0c;比如下面是一个对象&#xff1a; class S{publi…

Push rejected: Push to origin/master was rejected

Push rejected: Push to origin/master was rejected 原因&#xff1a;推拒绝&#xff1a;推送到起源/主人被拒绝 解决方案如下&#xff1a; 方案1&#xff1a; 1.在Idea打开终端 方案2&#xff1a; 1、在对应项目文件里打开 Git Bash 然后依次输入&#xff1a; git pull …

【数据结构--八大排序】之堆排序

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …