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

news2024/11/18 16:22:59

目录

  • 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/1683754.html

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

相关文章

BOM..

区别&#xff1a;

验证码识别插件-captcha-killer

前言 想必大家都会使用burp进行爆破,当遇到带验证码的登录表单进行爆破时,基本尝试抓包后观察验证码是否主动更新,或者进行验证码绕过(我是十八期萌新,听风风说的有这个方法,但我还没学到),机缘巧合下我接触到了captcha-killer这个插件,可以提供给大家第三种爆破思路&#xff…

线程数据共享必学的3个工具类: ThreadLocal InheritableThreadLocal TransmittableThreadLocal

线程数据共享必学的3个工具类&#xff1a; ThreadLocal InheritableThreadLocal TransmittableThreadLocal 1.ThreadLocal:在当前线程中共享数据的&#xff0c;JUC 中提供的 2.InheritableThreadLocal:也是JUC中的一个工具类&#xff0c;解决 ThreadLocal 难以解决的问题 3.Tra…

MPLS原理与配置

1.MPLS概述 &#xff08;1&#xff09;传统IP路由转发 &#xff08;2&#xff09;MPLS基本概念 ⦁ MPLS起源于IPv4&#xff08;Internet Protocol version 4&#xff09;&#xff0c;其核心技术可扩展到多种网络协议&#xff0c;包括IPv6&#xff08;Internet Protocol ver…

WPF中CommandParameter用法

1. 界面样式 2. XAML中代码部分 <ButtonGrid.Row"0"Grid.Column"1"Command"{Binding BtnClick_Number}"CommandParameter"7"Content"7"Style"{StaticResource BtnStyle_Num}" /> <ButtonGrid.Row"…

我的第一个JAVA程序IDEA版

目录 第一步 新建一个空项目第二步 新建模块第三步 新建包第四步 新建类第五步 新建main方法 第一步 新建一个空项目 第二步 新建模块 第三步 新建包 第四步 新建类 然后在包文件夹下新建类 第五步 新建main方法

xlrd.biffh.XLRDError: Excel xlsx file; not supported报错原因

xlrd库读取xlsx文件时报错 xlrd.biffh.XLRDError: Excel xlsx file; not supported报错原因&#xff1a; xlrd版本为2.1版本&#xff0c;需要读取xlsx文件需要安装xlrd低一些版本1.2.0版本&#xff0c;重新安装重试即可 更换xlrd版本 重新运行

如何使用ffmpeg 实现10种特效

相关特效的名字 特效id 特效名 1 向上移动 2 向左移动 3 向下移动 4 颤抖 5 摇摆 6 雨刷 7 弹入 8 弹簧 9 轻微跳动 10 跳动 特效展示(同时汇总相关命令) pad背景显示 pad背景透明 相关命令(一会再讲这些命令&#xff0c;先往下看) # 合成特效语音 ffmpeg -y -loglevel erro…

【Linux】Linux信号产生,接受与处理机制

理解Linux信号产生&#xff0c;接受与处理机制 信号是Linux操作系统中一种用于进程间通信和异步事件处理的机制。在本文中&#xff0c;我们将结合Linux的源码&#xff0c;深入分析信号的产生、发送、接收和处理的底层原理。 文章目录 理解Linux信号产生&#xff0c;接受与处理…

Elasticsearch集群和Logstash、Kibana部署

1、 Elasticsearch集群部署 服务器 安装软件主机名IP地址系统版本配置ElasticsearchElk10.3.145.14centos7.5.18042核4GElasticsearchEs110.3.145.56centos7.5.18042核3GElasticsearchEs210.3.145.57centos7.5.18042核3G 软件版本&#xff1a;elasticsearch-7.13.2.tar.gz 示…

asp.net core接入prometheus

安装prometheus和Grafana 参考之前的文章->安装prometheus和Grafana教程 源代码 dotnet源代码 新建.net core7 web项目 修改Program.cs using Prometheus;namespace PrometheusStu01;public class Program {public static void Main(string[] args){var builder We…

Linux中ftp配置

一、ftp协议 1、端口 ftp默认使用20、21端口 20端口用于建立数据连接 21端口用于建立控制连接 2、ftp数据连接模式 主动模式&#xff1a;服务器主动发起数据连接 被动模式&#xff1a;服务器被动等待数据连接 二、ftp安装 yum install -y vsftpd #---下…

4. Java多线程面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 为什么要使用并发编程 充分利用多核CPU的计算能力&#xff1a;通过并发编程的形式可以将多核CPU的计算能力发挥到极致&#xff0c;性能得到提升方便进行业务拆分&#xff0c;提升系统并发能力和性能&#xff1a;在特殊的业务场景下&#…

cnpm 安装失败

安装淘宝镜像 //旧 证书已过期 npm config set registry https://registry.npm.taobao.org/ //运行这个会报错 //npm ERR! code CERT_HAS_EXPIRED //npm ERR! errno CERT_HAS_EXPIRED //用下边最新的安装 //新 npm config set registry https://registry.npmmirror.com这里安装…

SSE 与 SASE哪个云原生安全框架更加适合

近年来&#xff0c;随着云计算和网络技术的不断发展&#xff0c;出现了一种新的网络安全解决方案——SASE&#xff08;安全访问服务边缘&#xff09;。SASE是一种将网络和安全功能融合到单个基于云的服务中的框架&#xff0c;旨在提供更加安全、高效和便捷的网络访问体验。SASE…

【机器学习与实现】支持向量机SVM

目录 一、SVM (Support Vector Machine) 概述&#xff08;一&#xff09;支持向量机SVM的主要特点&#xff08;二&#xff09;支持向量与间隔最大化&#xff08;三&#xff09;线性可分/不可分&#xff08;四&#xff09;软间隔 (soft margin) 与核技巧 (kernel trick)&#xf…

web前端学习笔记11

11. CSS3高级特效 11.1 CSS3变形 CSS3变形是一些效果的集合, 如平移、旋转、缩放、倾斜效果 每个效果都可以称为变形(transform),它们可以分别操控元素发生平移、旋转、缩放、倾斜等变化 语法 transform:[transform-function] ; /* 设置变形函数,可以是一个,也可以是多…

vscode插件-07Java

文章目录 Extension Pack for JavaSpring Initializr Java SupportCodeSwingJdk下载JDK安装jdkWindows安装jdkLinux安装jdk&#xff08;以Ubuntu为例&#xff09; jdk环境变量在VScode中配置Windows系统中配置Linux系统中配置&#xff08;以Ubuntu为例&#xff09; Extension P…

arcgis 10.6 工具栏操作error 001143 后台服务器抛出异常

arcgis 10.6 工具栏操作error 001143 后台服务器抛出异常 环境 win10arcgis 10.6 问题 执行定义投影要素转线出现 Error: 001143:后台服务器抛出异常&#xff08;差点重装10.6&#xff09; 如下图所示&#xff1a; 解决方法 通过在菜单工具条上单击地理处理 > 地理处…

Linux进程相关查询

1、Linux下查看某些进程的启动时间和运行时长 比如查看java进程的启动时间和运行时长 # ps -ef|grep -v grep|grep -w java|awk {print $2} # ps -eo pid,lstart,etime | grep 1973 其中&#xff1a; Mon Jun 24 09:25:41 2019 为java进程的启动时间 4-00:16:55 …