Java开发从入门到精通(八):Java的面向对象编程OOP:封装、继承、多态

Java大数据开发和安全开发

  • (一)Java的封装
    • 1.1 什么是封装
      • 1.1.1 封装的设计规范
      • 1.1.2 代码层面如何控对象的成员公开或隐藏?
    • 1.2 JavaBean(实体类)
      • 1.2.1创建实体类
      • 1.2.2 实体类有啥应用场景?
      • 1.2.3 实体类总结
    • 1.3 static关键字
      • 1.3.1 static修饰成员变量
      • 1.3.1 static修饰成员变量的应用场景
      • 1.3.1 static修饰成员方法
      • 1.3.1 static修饰成员方法的应用场景
      • 1.3.1 static的注意事项
      • 1.3.1 static的应用知识:代码块
      • 1.3.1 static的应用知识:单例设计模式

(一)Java的封装

1.1 什么是封装

  • 就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去
  • 要处理的数据
  • 处理数据的方法
  • 写到一个类里就是封装 如下

在这里插入图片描述

1.1.1 封装的设计规范

  • 合理隐藏
  • 合理暴露
  • private
public class Student {
    private String name; 
    double chinese; 
    double math;
    
    private void printTotalScore() { 
        System.out.println(name + "的总成绩是:" + (chinese + math));
    }

    public void printAverageScore() {
        System.out.println(name + "的平均成绩是:" + (chinese + math) / 2.0);
    }
}

怎么达到合理隐藏 合理暴露呢
控制输入
控制输出

为了防止别人随意传值,使用私有化变量,然后让用户通过公有方法访问给私有变量赋值

public class Student {

    private String name; // 私有变量 不允许访问
    private double score;
    private double math;

    public void  setScore(String name,double score,double math){
        if ((score >= 0 && score <= 100) && (math >=0 && math<=100)){
            this.name = name;
            this.score = score;
            this.math = math;
        } else {
            System.out.println("数据非法");
        }

    }

    public double getScore(){
        return score;
    }

    private void printTotalScore() { // 私有方法 不允许访问
        System.out.println(name + "的总成绩是:" + (chinese + math));
    }

    public void printAverageScore() {
        System.out.println(name + "的平均成绩是:" + (chinese + math) / 2.0);
    }
}
public class Test {
    public static void main(String[] args) {
        // 目标:掌握封装的设计规范:合理隐藏、合理暴露。
        Student s1 = new Student();
        s1.setScore("liyang",55,66);
        System.out.println(s1.getScore());
    }
}

1.1.2 代码层面如何控对象的成员公开或隐藏?

  • 公开成员,可以使用public(公开)进行修饰。
  • 隐藏成员,使用private(私有,隐藏)进行修饰。

1.2 JavaBean(实体类)

什么是实体类?

  • 就是一种特殊形式的类。
    在这里插入图片描述

1.2.1创建实体类

  • 1.先创建两个私有变量
public class Student {
    private String name;
    private double score;
}

2.选中变量右键选择generate,可以创建有参构造器,set方法,get方法
在这里插入图片描述
在这里插入图片描述

  • 3.无参构造方法选择selec none

在这里插入图片描述

public class Student {
	//1、必须私有成员变量,并为每个成员变量都提供getset方法
    private String name;
    private double score;
    //2、必须为类提供一个公开的无参数构造器
    public Student() {
    }

    public Student(String name, double score) {
        this.name = name;
        this.score = score;
    }

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

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

    public String getName() {
        return name;
    }

    public double getScore() {
        return score;
    }
}

public class Test {
    public static void main(String[] args) {
        //目标:掌握实体类的书写要求、特点、应用场景
        Student s1 = new Student();
        s1.setName("播妞");
        s1.setScore(99);
        System.out.println(s1.getName());
        System.out.println(s1.getScore());
    }
}

1.2.2 实体类有啥应用场景?

  • 实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离

在这里插入图片描述
操作类处理数据

public class StudentOperator {
    private Student student;

    public StudentOperator(Student student) {
        this.student = student;
    }

    public void printPass() {
        if (student.getScore() >= 60) {
            System.out.println(student.getName() + "学生成绩及格");
        } else {
            System.out.println(student.getName() + "学生成绩不及格");
        }
    }
}

实体类保存数据

```java
public class Test {
    public static void main(String[] args) {
        //目标:掌握实体类的书写要求、特点、应用场景
        Student s1 = new Student();
        s1.setName("播妞");
        s1.setScore(99);
        System.out.println(s1.getName());
        System.out.println(s1.getScore());
        
        StudentOperator operator =new StudentOperator(s1);
        operator.printPass();
    }
}

1.2.3 实体类总结

  • 什么是实体类?有啥特点?
    • 成员变量必须私有,且要为他们提供get、set方法;必须有无参数构造器
    • 仅仅只是一个用来保存数据的java类,可以用它创建对象,保存某个事物的数据。
  • 实体类有啥应用场景?
    • 实体类对应的是软件开发里现在比较流行的开发方式,数据和数据的业务处理相分离

1.3 static关键字

static关键字的概念:

			静态的意思,可以修饰成员变量、成员方法。

1.3.1 static修饰成员变量

成员变量按照有无static修饰,分为两种:

  • 类变量

  • 实例变量(对象的变量)
    在这里插入图片描述

  • 类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享

  • 实例变量(对象的变量):无static修饰,属于每个对象的

public class Test {
    public static void main(String[] args) {
        // 目标:掌握有无static修饰成员变量的用法,特点。
        // 1、类变量的用法。
        // 类名.类变量(推荐)
        Student.name ="袁华";

        // 对象.类变量(不推荐)
        Student s1 = new Student();
        s1.name ="马冬梅";  //会被类的全部对象共享

        Student s2 = new Student();
        s2.name="秋雅";    //会被类的全部对象共享

        System.out.println(s1.name);//  秋雅
        System.out.println(Student.name);// 秋雅

        //2、实例变量的用法:属于每个对象的变量
        // 对象.实例变量
        s1.age = 23;
        s2.age = 18;
        System.out.println(s1.age);//23
    }
}
public class Student {
    // 类变量
    static String name;
    // 实例变量(对象的变量)
    int age;

}

成员变量的执行原理

在这里插入图片描述

1.3.1 static修饰成员变量的应用场景

类变量的应用场景

  • 在开发中,如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义成类变量来记住

案例导学:

  • 系统启动后,要求用户类可以记住自己创建了多少个用户对象了
public class User {
    // 类变量
    public static int number;
    public User(){
        // User.number++;
        // 注意:在同一个类中,访问自己类的类变量,才可以省略类名不写。
        number++;
    }
}
public class Test2 {
    public static void main(String[] args) {
        // 目标:通过案例理解类变量的应用场景、
        User ul = new User();
        User u2 = new User();
        User u3 = new User();
        User u4 = new User();
        System.out.println(User.number);
    }
}

1.3.1 static修饰成员方法

成员方法的分类
类方法 :有static修饰的成员方法,属于类。
在这里插入图片描述
实例方法 :无static修饰的成员方法,属于对象
在这里插入图片描述

public class Student {
    double score;// 类方法
    public static void printHelloWorld() {
        System.out.println("Hello World");
        System.out.println("Hello World");
    }

    //实例方法(对象的方法)
    public void printPass(){
        System.out.println("成绩:" +
                (score >=60 ?"及格":"不及格"));
    }
}
public class Test {
    public static void main(String[] args) {
        // 目标:掌握有无static修饰方法的用法。// 1、类方法的用法
        // 类名.类方法(推荐)
        Student.printHelloWorld();
        // 对象.类方法(不推荐)
        Student s= new Student();
        s.printHelloWorld();
        
        // 2、实例方法的用法// 对象.实例方法
        s.printPass();
        // Student.printPass();// 报错
    }
}

1.3.1 static修饰成员方法的应用场景

1.3.1 static的注意事项

1.3.1 static的应用知识:代码块

1.3.1 static的应用知识:单例设计模式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI-逻辑回归模型

&#x1f606;&#x1f606;&#x1f606;感谢大家的支持~&#x1f606;&#x1f606;&#x1f606; 逻辑回归的应用场景 逻辑回归&#xff08;Logistic Regression&#xff09;是机器学习中的 一种分类模型 &#xff0c;逻辑回归是一种分类算法&#xff0c;虽然名字中带有回…

中国沈阳综合门户网站建设服务说明(2016年10月23日)

1 宏锦大厦412室 联系电话&#xff1a;***-******38 综合门户网站建设服务说明 中国沉阳 综合门户网站建设服务说明 门户网站策划公司地址&#xff1a;沉河区宏锦万柳塘路36-1号412号楼 联系电话&#xff1a;***-******38 综合门户网站建设服务说明 中国沉阳 海丰科技 联系电话…

当“新质生产力”遇上“CAE仿真”,将激起什么样的火花?

在刚刚闭幕的全国两会上&#xff0c;新质生产力无疑是最为“滚烫”的热词。发展新质生产力是推动高质量发展的内在要求和重要着力点&#xff0c;此次更被列为2024年政府重点任务的第一条。 新质生产力是创新起主导作用&#xff0c;摆脱传统经济增长方式、生产力发展路径&#…

GPT-SoVITS开源音色克隆框架的训练与调试

GPT-SoVITS开源框架的报错与调试 遇到的问题解决办法 GPT-SoVITS是一款创新的跨语言音色克隆工具&#xff0c;同时也是一个非常棒的少样本中文声音克隆项目。 它是是一个开源的TTS项目&#xff0c;只需要1分钟的音频文件就可以克隆声音&#xff0c;支持将汉语、英语、日语三种…

电竞游戏行业有哪些媒体资源?活动发布会如何宣传?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 电竞游戏行业的媒体资源主要包括&#xff1a;游戏门户网站、综合资讯网站、社交媒体平台、电视和网络直播等。 在电竞游戏行业中&#xff0c;媒体资源是丰富多样的。游戏门户网站如游民…

蜜源加入飞桨技术伙伴计划,共同打造“智能导购助手”电商应用新模式

近日&#xff0c;蜜源&#xff08;广州&#xff09;新媒体科技有限公司正式加入飞桨技术伙伴计划&#xff0c;双方将共同努力在电商导购智能化服务领域&#xff0c;创新升级打造“AI导购”新模式。基于大模型赋能电商&#xff0c;持续挖掘出AI电商导购领域的潜力和应用价值&…

pip 配置镜像加速安装

在使用pip安装Python第三方库时&#xff0c;默认是使用pip官网的非常慢&#xff0c;可通过配置国内镜像源加速下载速度&#xff0c;以下是如何使用国内镜像源安装Python库的两种常见方式&#xff1a; 临时使用镜像源安装 如果你只是想临时使用某个镜像源安装单个或几个库&…

『scrapy爬虫』04. 使用管道将数据写入excel(详细注释步骤)

目录 1. excel文件的初始化与保存2. 配置管道使用运行测试总结 欢迎关注 『scrapy爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『scrapy爬虫』 专栏&#xff0c;持续更新中 1. excel文件的初始化与保存 安装操作excel文件的库 pip install openpyxl钩子函数&#xff08;Hook…

C++面试问题收集

0 持续更新中 目录 0 持续更新中 1 C语言相关 1.1 malloc/free和new/delete区别 1.2 内存泄漏 1.3 堆区和栈区的区别 1.4 宏定义和const的区别 1.5 多态 1.6 类中的静态成员变量 2 操作系统相关 2.1 进程和&#xff08;用户&#xff09;线程的区别 2.2 系统调用 2.3…

Rockchip android10.1默认开启虚拟键盘

Rockchip android10.1默认开启虚拟键盘 问题描述解决方法 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip OS:Android 10.1 Kernel: 4.19 问题描述 客户需要在插上外接实体键盘的时候&#xff…

QT使用dumpcpp为COM生成h及cpp的方式,COM是C#的dll注册的

目录 1.C#的dll注册为COM&#xff0c;采用bat的方式 2.通过qt的dumpcpp来生成h及cpp文件 3.h文件和cpp文件处理。 台达数控系统的C#的dll dumpcpp用的tlb文件 dumpcpp生成的原生h文件 dumpcpp生成的原生cpp dump生成后的的原生cpp文件修改后的cpp文资源 dump生成后的的…

Element-Plus: Select组件实现滚动分页加载

Element-Plus的select组件并没有自带滚动分页加载的功能&#xff0c;其虽然提供了自定义下拉菜单的底部的方式可以自定义上一页及下一页操作按钮的方式进行分页加载切换&#xff1a; 但如果不想通过点击分页按钮的方式&#xff0c;利用滚动触底进行下一页加载的话&#xff0c;…

近视用什么灯对眼睛好?多款防近视护眼台灯推荐

随着社会竞争愈发激烈&#xff0c;对于办公族、学生党而言&#xff0c;用眼过度是最频繁不过的事情了&#xff0c;不少低年级的学生都已经早早佩戴上了近视眼镜。所以想要保护眼睛健康&#xff0c;一款光源舒适的台灯是必不可少的&#xff0c;不过市面上也有很多劣质台灯&#…

注意力机制Attention、CA注意力机制

一、注意力机制 产生背景&#xff1a; 大数据时代&#xff0c;有很多数据提供给我们。对于人来说&#xff0c;可以利用重要的数据&#xff0c;过滤掉不重要的数据。那对于模型来说&#xff08;CNN、LSTM&#xff09;&#xff0c;很难决定什么重要、什么不重要&#xff0c;因此…

案例分析篇06:数据库设计相关28个考点(17~22)(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Kafka-生产者报错javax.management.InstanceAlreadyExistsException

生产者发送消息到 kafka 中,然后控制台报错 然后根据日志查看 kafka 的源码发现了问题原因 说的是MBean已经注册了,然后报异常了,这样就会导致生产者的kafka注册失败, 原因是项目上生产者没有配置clientId,默认都是空导致的, 多个生产者(项目)注册到kafka集群中的 id 都相同。 …

Spring Boot 中@Scheduled是单线程还是多线程?

在开发Spring Boot应用程序时&#xff0c;定时任务是一项常见的需求。Spring Boot提供了Scheduled注解&#xff0c;可用于将方法标记为定时任务&#xff0c;并在预定的时间间隔内执行。那么Scheduled注解的执行方式是单线程执行&#xff0c;还是多线程执行&#xff1f;Schedule…

Python爬虫实战入门:豆瓣电影Top250(保你会,不会来打我)

文章目录 需求所需第三方库requests模块lxml模块了解 lxml模块和xpath语法xpath语法-基础节点选择语法 实战教程完整代码 需求 目标网站: https://movie.douban.com/top250 需求: 爬取电影中文名、英文名、电影详情页链接、导演、主演、上映年份、国籍、类型、评分、评分人数, …

振弦采集仪的操作方法及数据处理技术的一般步骤

振弦采集仪的操作方法及数据处理技术的一般步骤 岩土工程监测中&#xff0c;河北稳控科技振弦采集仪是用来测量土壤或岩石中的振动特性的仪器。下面是振弦采集仪的操作方法及数据处理技术的一般步骤&#xff1a; 1. 准备工作&#xff1a;安装振弦采集仪的支架或支架&#xff0…