【Day7:JAVA面向对象的初级使用】

目录

  • 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 +
                '}';
    }
}

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

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

相关文章

Python 新手最容易踩的坑

Python新手最容易踩的坑 缩进错误忘记引入模块使用未定义的变量不理解变量作用域字符串格式化错误乱用关键字多余的符号本期图书推荐&#xff1a;Python算法小讲堂---39个算法案例带你玩转Python内容简介获取方式 在学习 Python 的过程中&#xff0c;新手往往会遇到一些常见的陷…

【四、性能测试】Linux stress 压力模拟测试工具

在做 CPU 问题解析之前&#xff0c;需要先了解一下压力模拟工具&#xff0c;可以将 CPU、MEM、IO 等进行压力模拟&#xff0c;可以在模拟压力的过程中进行问题解析 一、STRESS 模拟对CPU、Memory、IO、磁盘进行压力测试。可以使用 stress 工具&#xff0c;它是专门针对 linux…

部署yum仓库及NFS共享

yum概述 yum 1&#xff09;基于RPM包构建的软件更新机制 2&#xff09;可以自动解决依赖关系 3&#xff09;所有软件包由集中的YUM软件仓库提供 准备安装源 一键安装软件包的工具&#xff1a; RHEL、CentOS yum dnf Ubuntu、Debian apt apt-get 好处&#xff1a;…

GitKraken克隆Git仓库

克隆Git仓库 修改本地仓库 在此新增了一个test.txt文件 GitKraken提醒有一处改变 暂存&#xff08;Stage&#xff09;该文件&#xff0c;添加描述后提交修改&#xff1a; 修改成功&#xff1a;

(一)vForm 动态表单设计器之使用

系列文章目录 &#xff08;一&#xff09;vForm 动态表单设计器之使用 文章目录 前言 一、VForm是什么&#xff1f; 二、使用步骤 1.引入库 2.使用VFormDesigner组件 3.使用VFormRender组件 4.持久化表单设计 总结 前言 前段时间在研究Activiti工作流引擎&#xff0c;结合业务…

2023年数维杯国际大学生数学建模挑战赛D题洗衣房清洁计算解题全过程论文及程序

2023年数维杯国际大学生数学建模挑战赛 D题 洗衣房清洁计算 原题再现&#xff1a; 洗衣房清洁是人们每天都要做的事情。洗衣粉的去污作用来源于一些表面活性剂。它们可以增加水的渗透性&#xff0c;并利用分子间静电排斥机制去除污垢颗粒。由于表面活性剂分子的存在&#xff…

关于基础的流量分析(1)

1.对于流量分析基本认识 1&#xff09;简介&#xff1a;网络流量分析是指捕捉网络中流动的数据包&#xff0c;并通过查看包内部数据以及进行相关的协议、流量分析、统计等来发现网络运行过程中出现的问题。 2&#xff09;在我们平时的考核和CTF比赛中&#xff0c;基本每次都有…

电脑实时监控软件哪个好?这三款电脑监控软件都是万里挑一

网络安全事故的频发为我们敲响了警钟&#xff0c;企业必须普及电脑监控软件才能有效防止数据泄密和懒散的工作状态&#xff0c;在这里为你盘点三款万里挑一的电脑实时监控软件。 域智盾软件&#xff1a; 特点&#xff1a;域智盾软件是一款功能全面且强大的电脑实时监控软件。它…

利用神经网络学习语言(六)——总结与常见面试问题

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 文章列表&#xff1a; 利用神经网络学习语言&#xff08;一&#xff09;——自然语言处理的基本要素利用神经网络学习语言&…

力扣刷题---283.移动0【简单】

题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums …

2024年AI发展的四大趋势

近日&#xff0c;OpenAI发布首个视频生成模型“Sora”——通过接收文本指令&#xff0c;即可生成60秒短视频。一年前&#xff0c;同样是OpenAI发布的语言模型ChatGPT&#xff0c;让文本创作变得易如反掌。 在2023年&#xff0c;随着一系列AIGC的相继问世&#xff0c;我们看到A…

企业应考虑的优秀云安全措施

作为云客户&#xff0c;企业有责任确保正确使用他们提供的工具来保证数据和应用程序的安全。让德迅云安全来跟大家一起研究一些典型企业应该考虑的优秀云安全措施。 在数据安全和隐私方面&#xff0c;企业是否在努力跟上疫情的发展?企业不是一个人。就像多年以前&#xff0c;C…

【C/C++笔试练习】TCP、IP广播、ARP协议、IP路由器、MAC协议、三次握手、TCP/IP、子网划分年、会抽奖、抄送列表

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;TCP&#xff08;2&#xff09;IP广播&#xff08;3&#xff09;ARP协议&#xff08;4&#xff09;IP路由器&#xff08;5&#xff09;MAC协议&#xff08;6&#xff09;三次握手&#xff08;7&#xff09;TCP/IP&#xf…

【设计模式深度剖析】【A】【创建型】【对比】| 工厂模式重点理解产品族的概念

回 顾&#xff1a;创建型设计模式 1.单例模式&#x1f448;️ 2.工厂方法模式&#x1f448;️ 3.抽象工厂模式&#x1f448;️ 4.建造者模式&#x1f448;️ 5.原型模式&#x1f448;️ &#x1f448;️上一篇:原型模式 | &#x1f449;️下一篇:代理模式 目录…

JavaScript基础(九)

冒泡排序 用例子比较好理解: var arry[7,2,6,3,4,1,8]; //拿出第一位数7和后面依次比较&#xff0c;遇到大的8就换位&#xff0c;8再与后面依次比较&#xff0c;没有能和8换位的数&#xff0c;再从下一位2依次与下面的数比较。 console.log(排列之前&#xff1a;arry); for (…

Unity Render入门

概述 在unity中渲染相关的组件是和Render关联的&#xff0c;比如我们常见的3D模型中的MeshRender&#xff0c;UI中的RenderCanvas等都是和Render相关联的&#xff0c;相信在unity的学习过程中&#xff0c;一定看到过非常多和Render相关的内容&#xff0c;那让我们学习一下这部…

GRPC服务使用

目标&#xff1a; 1.什么是GRPC服务&#xff1f; 2.安卓客户端怎么不熟GRPC服务&#xff1f; 3.怎么生成GRPC的java类&#xff1f; 一、什么是GRPC服务&#xff1f; GRPC 一开始由 google 开发&#xff0c;是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。 支持长…

【Linux】-Tomcat安装部署[12]

目录 简介 安装 安装部署JDK环境 解压并安装Tomcat 简介 Tomcat是由Apache开发的一个Servlet容器&#xff0c;实现了对Servlet和JSP的支持&#xff0c;并提供了作为Web服务器的一些特有功能&#xff0c;如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说&#…

vscode 插件-02 html

open in brower 安装后可以在vscode中,使用浏览器打开编辑的.html文件,以查看效果。 Live Preview 实现网页的实时渲染显示功能&#xff0c;即实时预览。

K8S认证|CKA题库+答案| 1. 权限控制RBAC

1、权限控制RBAC 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s master …