【基础篇-Day7:JAVA面向对象的初级使用】

news2024/11/19 6:29:23

目录

  • 1、类和对象
    • 1.1 类的介绍
    • 1.2 类和对象的关系
    • 1.3 类的组成
  • 2、对象内存图
    • 2.1 单个对象内存图
    • 2.2 两个对象内存图
    • 2.3 两个引用指向相同内存图
  • 3、成员变量和局部变量
    • 3.1 成员变量和局部变量的区别
  • 4、this关键字
    • 4.1 this可以解决的问题
    • 4.2 this介绍
    • 4.3 this内存图
    • 4.4 this总结
  • 5、构造方法
    • 5.1 构造方法概述
    • 5.2 构造方法的作用
    • 5.3 构造方法的注意事项
    • 5. 4 构造方法的执行流程
  • 6、封装
    • 6.1 面向对象三大特征
    • 6.2 封装的设计规范
    • 6.3 权限修饰符
  • 7、标准JavaBean
  • 8、综合案例

在这里插入图片描述

1、类和对象

1.1 类的介绍

在这里插入图片描述

1.2 类和对象的关系

在这里插入图片描述

1.3 类的组成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、对象内存图

2.1 单个对象内存图

在这里插入图片描述

注意点:一段代码要开始运行时,先将源文件编译成字节码文件,然后主方法对应的字节码文件进入方法区,接着主方法进入栈内存,当需要创建新的对象时,也就是new对象时,就会在堆内存中开辟此对象对应的空间。
面试时,需要能回答上这三个内存区域的用法。

2.2 两个对象内存图

2.3 两个引用指向相同内存图

在这里插入图片描述

3、成员变量和局部变量

3.1 成员变量和局部变量的区别

在这里插入图片描述

4、this关键字

4.1 this可以解决的问题

在这里插入图片描述

局部变量和成员变量重名了,但是还要用成员变量,那么就可以使用this关键字了。
this的作用:可以调用本类的成员(变量和方法)。
在这里插入图片描述

4.2 this介绍

在这里插入图片描述

也就是说:谁来调用我,我就代表谁。

4.3 this内存图

在这里插入图片描述

4.4 this总结

在这里插入图片描述

5、构造方法

5.1 构造方法概述

在这里插入图片描述

5.2 构造方法的作用

在这里插入图片描述

package com.itheima.oop;

public class Student {
    String name;
    int age;
    public Student(){
        System.out.println("我是无参构造方法!!!");
    }

    public Student(String name, int age){
        this.name = name;
        this.age = age;
        System.out.println("我是有参构造方法!!!");
    }
}


package com.itheima.test;
import com.itheima.oop.Student;

public class StudentTest {
    public static void main(String[] args) {
        Student s1 = new Student();//不传参数,则创建时调用无参构造
        Student s2 = new Student("马四", 16);//传参数,则创建时调用有参构造
    }
}

输出:
我是无参构造方法!!!
我是有参构造方法!!!

5.3 构造方法的注意事项

在这里插入图片描述

在这里插入图片描述

5. 4 构造方法的执行流程

在这里插入图片描述

6、封装

6.1 面向对象三大特征

在这里插入图片描述

继承和多态放后面面向对象高级课程学习。今天只学习封装。

在这里插入图片描述

  • 案例一:
    在这里插入图片描述

  • 案例二:
    在这里插入图片描述

6.2 封装的设计规范

在这里插入图片描述

注:隐藏和暴露都是针对要使用对象的使用者而言。那如何隐藏,如何暴露呢?看下面权限修饰符知识。

6.3 权限修饰符

在这里插入图片描述
在这里插入图片描述

使用set方法和get方法,合理隐藏、合理暴露:
在这里插入图片描述

7、标准JavaBean

JavaBean是指:实体类,即封装数据的类。

在这里插入图片描述

8、综合案例

在这里插入图片描述

代码:

  • Main.java
package com.itheima.movieSystem.domain;

public class Main {
    public static void main(String[] args) {
        System.out.println("==============电影信息系统==============");
        //1、登录验证
        Login login = new Login();
        login.login();

        //2、菜单选择
        SelectMovieInfoHandler selectMovieInfoHandler = new SelectMovieInfoHandler();
        selectMovieInfoHandler.menu();
    }
}
  • SelectMovieInfoHandler.java
package com.itheima.movieSystem.domain;
import com.itheima.movieSystem.vo.Movie;
import java.util.Scanner;

public class SelectMovieInfoHandler {
    public void menu() {
        //加载数据库
        Movie[] data = getData();

        loop:
        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("1.查询全部电影信息");
            System.out.println("2.根据id查询电影信息");
            System.out.println("3.退出");
            int choose = sc.nextInt();
            switch (choose) {
                case 1:
                    queryAllMovie(data);
                    break ;
                case 2:
                    queryMovieById(data);
                    break ;
                case 3:
                    System.out.println("欢迎下次观看!");
                    break loop;
                default:
                    System.out.println("没有此选项!");
                    break ;
            }
        }
    }

    public Movie[] queryAllMovie(Movie[] data){
        System.out.println("全部电影如下:");
        for (Movie datum : data) {
            System.out.println(datum.toString());
        }
        return data;
    }

    public Movie queryMovieById(Movie[] data){
        System.out.println("请输入要查询电影的id:");
        Scanner sc = new Scanner(System.in);
        int id = sc.nextInt();
        for (Movie datum : data) {
            if (datum.getId() == id) {
                System.out.println(datum.toString());
                return datum;
            }
        }
        return null;
    }

    public Movie[] getData(){
        Movie[] arr = new Movie[2];
        Movie movie1 = new Movie();
        movie1.setId(1);
        movie1.setName("大力王");
        movie1.setScore(91);
        arr[0] = movie1;

        Movie movie2 = new Movie();
        movie2.setId(2);
        movie2.setName("魔法大师");
        movie2.setScore(95);
        arr[1] = movie2;

        return arr;
    }
}
  • Login.java
package com.itheima.movieSystem.domain;
import java.util.Random;
import java.util.Scanner;

public class Login {
    //获取验证码
    public String getVerificationCode() {
        //初始化验证码词典库
        char[] arr = getContents();

        //生成随机验证码
        Random r = new Random();
//        char[] verificationCodeArr = new char[5];
        StringBuilder verificationCodeArr = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            verificationCodeArr.append(arr[r.nextInt(arr.length)]);

        }
        return verificationCodeArr.toString();
    }

    private char[] getContents() {
        //初始化验证码词典库
        char[] arr = new char[62];
        for (int i = 0; i < arr.length; i++) {
            if (i < 26){
                arr[i] = (char)('a' + i);
            }else if (i <52){
                arr[i] = (char)('A' + i - 26);
            }else {
                arr[i] = (char)('0' + i - 52);
            }
//            System.out.print(arr[i] + " ");
        }
        return arr;
    }

    public void login(){
        while (true){
            Login login = new Login();
            String verificationCode = login.getVerificationCode();
            System.out.println("系统生成的验证码:" + verificationCode);
            System.out.println("请输入验证码:");
            Scanner sc = new Scanner(System.in);
            String printVerificationCode = sc.next();
            if (check(verificationCode, printVerificationCode)){
                System.out.println("登录成功,欢迎来到电影信息系统!");
                break;
            }else {
                System.out.println("输入的验证码错误,请重新输入!");
            }
        }
    }

    public boolean check(String verificationCode, String printVerificationCode){
        return verificationCode.equals(printVerificationCode);
    }
}
  • Movie.java
package com.itheima.movieSystem.vo;

public class Movie {
    private String name;//电影名称
    private double score;//电影评分
    private int id;//电影id

    public Movie() {
    }

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

    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 int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "电影:{" +
                "名称='" + name + '\'' +
                ", 得分=" + score +
                '}';
    }
}

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

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

相关文章

01 一文理解,Prometheus详细介绍

01 一文理解&#xff0c;Prometheus详细介绍 介绍 大家好&#xff0c;我是秋意零。 Prometheus 是一个开源的系统监控和报警工具包&#xff0c;最初由SoundCloud开发&#xff0c;并在2012年作为开源项目发布。Prometheus 目前由Cloud Native Computing Foundation&#xff08…

git 学习(一)

一、版本控制 &#xff08;一&#xff09;介绍 版本迭代 每一次更新代码 都会出现新的版本如果我们需要之前的版本的文件 我们就得需要版本控制的文件 每一次更新的结果我们都保存下来 多人开发必须要用版本控制器 否则代价会很大 &#xff08;二&#xff09;主流的版本控制…

中科驭数驭云、超低时延网络案例双双入选第七届数字中国建设峰会数字化转型典型应用案例

5月24日-25日&#xff0c;第七届数字中国建设峰会在福州召开。在“数字赋能民营经济专业工作会议”上&#xff0c;中关村云计算产业联盟发布了《2024中小企业数字化转型典型应用案例集》&#xff0c;中科驭数驭云、超低时延网络两大方案入选。 作为国内领先的DPU芯片及解决方案…

初识C语言——第二十六天

函数的递归1 什么是递归呢&#xff1f; 递归的两个必要条件 void print(unsigned int n) {if (n > 9){print(n / 10);}printf("%d ", n % 10); }int main() {unsigned int num 0;scanf("%u", &num);//123//递归-函数自己调用自己print(num);//pr…

Ubuntu20.04安装ffmpeg,并捕获视频流

工控机&#xff1a;幻影峡谷 系统&#xff1a;Ubuntu20.04 摄像头&#xff1a;杰瑞微通环星光USB摄像头记录一下使用ffmpeg拉取视频流的原因&#xff1a;刚开始用的是ubuntu系统自带的 茄子 软件&#xff0c;但是视频流很卡&#xff08;非常卡&#xff0c;基本上不能用&#xf…

nuxt3+Element Plus项目搭建过程记录

背景 本文只记录项目搭建过程中遇到的一些问题和关键点&#xff0c;nuxt框架的说明和API请参照官网学习 官网&#xff1a;https://nuxt.com/docs/getting-started/introduction 1. 初始化项目 指令如下: npx nuxilatest init <project-name>我在安装过程中出现报错&a…

前端项目上线

目录 1项目打包 2本地服务器部署 2.1具体操作步骤 2.2解决刷新 404 问题 2.3请求无法发送问题 3nginx 服务器部署 3.2nginx 配置代理练习 安装nginx nginx部署启动项目 3.3nginx 部署前端项目 4云服务器部署 本地资源上传 配置服务器与nginx 1项目打包 ●我…

lvm概述和配额

lvm概述和配额 文章目录 lvm概述和配额LVM概述1、逻辑卷的作用&#xff1a;2、lvm主要命令和实操磁盘配额创建data目录&#xff0c;进入data目录限制创建文件数 LVM概述 逻辑卷管理liunx系统下对硬盘分区的一种管理机制 lvm机制特别适合管理大储存设备&#xff0c;可以动态的…

回答篇二:测试开发高频面试题目

引用之前文章&#xff1a;测试开发高频面试题目 本篇文章是回答篇&#xff08;持续更新中&#xff09; 1. 在测试开发中使用哪些自动化测试工具和框架&#xff1f;介绍一下你对其中一个工具或框架的经验。 a. 测试中经常是用的自动化测试工具和框架有Selenium、Pytest、Postman…

【Linux】解决误操作libc.so.6导致的问题,补充:升级glibc注意事项

千万不要轻易动/usr/lib64/libc.so.6。 glibc是Linux系统中最底层的api&#xff0c;Linux几乎所有运行库都依赖glibc。/usr/lib64/libc.so.6属于glibc&#xff0c;在centos7中是个软链接。 一旦误删或误操作libc.so.6&#xff0c;或者glibc新版本不兼容等原因&#xff0c;都可…

推荐一个 Java 开源企业级新能源汽车智能共享充电桩管理平台

文末可获取 Orise 平台源码 01 Orise 智能充电桩管理平台 奥升( Orise ) 新能源汽车充电桩管理 Saas 云平台是一个集充电设备管理、用户充电管理、线上小程序内容管理于一体的综合管理平台。Orise充电桩平台支持高并发业务、业务动态伸缩、桩通信负载均衡&#xff0c;通过Docke…

AI答题项目,无门槛答题一小时收益30+

朋友们&#xff0c;今天我想和大家探讨一个令人兴奋的副业机遇。你是否曾感觉到日常工作的枯燥乏味&#xff0c;而又渴望找到一种轻松的赚钱方式来增加你的收入&#xff1f;今天我将和你分享的这个项目正是你所期待的。 项目的核心是利用AI技术来回答网上付费用户的问题&…

哪个品种能够叫板白银现货t+d?

白银TD是在上海黄金交易所挂牌的白银投资品种&#xff0c;它可以说是国内版的现货白银交易&#xff0c;大家也可以把它理解成为白银交易的“快速通道”。通过它&#xff0c;投资者可以更加灵活地买卖白银&#xff0c;实现对内地白银价格的跟踪&#xff0c;并获得一定的杠杆化收…

vos3000外呼系统如何查询授权信息和系统并发

要查询VOS3000外呼系统的授权信息和系统并发情况&#xff0c;您可以按照以下步骤进行&#xff1a; 登录系统管理界面&#xff1a; 使用管理员账号登录VOS3000外呼系统的管理界面。 查找系统信息&#xff1a; 寻找系统信息或授权管理的相关选项或标签。 查询授权信息&#xff…

96.网络游戏逆向分析与漏洞攻防-ui界面的设计-角色管理功能的界面设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

如何让大模型更懂你?个性化与适应性学习的探索

一、引言 在人工智能技术的浪潮中&#xff0c;大模型以其强大的数据处理能力和广泛的应用场景&#xff0c;成为了推动智能化发展的重要力量。然而&#xff0c;要让大模型真正“懂你”&#xff0c;实现个性化与适应性学习&#xff0c;却是一项复杂而艰巨的任务。本文将围绕这一…

Spring Boot中如何查询PGSQL分表后的数据

数据库用的pgsql&#xff0c;在表数据超过100w条的时候执行定时任务进行了分表&#xff0c;分表后表名命名为原的表名后面拼接时间&#xff0c;如原表名是card_device_trajectory_info&#xff0c;分表后拼接时间后得到card_device_trajectory_info_20240503&#xff0c;然后分…

LangChain实战 | 3分钟学会SequentialChain怎么传多个参数

SequentialChain参数传递&#xff0c;总结了以下四种类型 参数传递入参出参一 对 一11一 对 多1n多 对 一n1多 对 多nn 0.连接大模型 先选一个llm&#xff0c;参考这篇博客选择一个国内大模型 LangChain连接国内大模型测试|智谱ai、讯飞星火、通义千问 from langchain_comm…

Jenkins的Pipeline流水线

目录 前言 流水线概念 什么是流水线 Jenkins流水线 pipeline node stage step 创建一个简单的流水线 创建Pipeline项目 选择模板 测试 前言 提到 CI 工具&#xff0c;首先想到的就是“CI 界”的大佬——Jenkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具…

【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖

【秒杀系统】从零开始打造简易秒杀系统&#xff08;一&#xff09;&#xff1a;防止超卖 前言 大家好&#xff0c;好久不发文章了。&#xff08;快一个月了- -&#xff09;最近有很多学习的新知识想和大家分享&#xff0c;但无奈最近项目蛮忙的&#xff0c;很多文章写了一半搁…