JAVA基础(四) 面向对象编程基础

面向对象编程

面向对象编程的三大特点:封装,多态,继承。


前言

记录面向对象编程的基本概念,以及在计算机中的执行原理,所谓面向对象,个人认为是它像一个结构体,例如一个学生对象,里边可能会包含学生的一些学号,名字,籍贯等信息,也可以叫做该对象的属性。又类似于数据表的表头,我们在使用该对象时,为该对象赋予一些值,就像是数据表中各项信息的填写。


一、对象执行原理

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

二、this变量的执行原理以及应用场景

在这里插入图片描述

在这里插入图片描述
用于解决变量名称重复的问题,也就是说,该对象本来定义的参数,在进行参数接收和比较时,会出现命名冲突的问题,那么this就很好的解决了这个问题。
在这里插入图片描述

三、构造器

构造器产生的原因,是为了我们更加便捷的在使用对象的过程中进行赋值。免去属性太多,需要一个一个以 对象.属性的形式进行赋值,有了构造器,我们只需在构造器中设置对应的传递参数语句即可。如下图:
在这里插入图片描述
在这里插入图片描述
要注意的是我们在日后的开发过程中,如果有了有参构造器,还是需要写一个无参的,因为其他人在写代码时可能会用到。
在这里插入图片描述

四、封装以及实体JavaBean

1.封装

关于封装,即我们封装好一个类来供其他人来使用,但是使用的过程中要注意数据的隐私性问题,比如个人的成绩,它需要设置为私有变量,用private修饰,那么我们在调用这个对象时便不能直接访问到具体的值,但是我们可以通过设置方法的方式来开放权限,也就是所谓的set,get方法,之前开发时常常见到,但不知何意,现在才明白,实在惭愧。
在这里插入图片描述
在这里插入图片描述

2.实体JavaBean

实体类的存在是为了实现分工,仅仅作为数据的存取,而不是像之前的类中变量定义和方法混在一起写,这样更加的清晰和明了,在写实体类的过程中,IDEA为我们提供了快速生成get,set方法和构造器的方法,右键寻找generate。对于一些具体的方法可以创建操作类。
在这里插入图片描述
举例:
在这里插入图片描述

在这里插入图片描述

五、综合案例

在这里插入图片描述
一个技巧,假设有movies数组,要写循环时可以 movies.for i直接生成循环。
为实现这个案例,我们需要一个测试类,一个实体类来处理数据,一个操作类来写具体的方法
实体类:
movie.java`

package com.object.demo;
//只负责保存数据
public class movie {
    private int id;
    private String name;
    private double price;
    private double score;
    private String director;
    private String actor;
    private String info;

    public movie() {
    }

    public movie(int id, String name, double price, double score, String director, String actor, String info) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.score = score;
        this.director = director;
        this.actor = actor;
        this.info = info;
    }

    public int getId() {
        return id;
    }

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

    public double getPrice() {
        return price;
    }

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

    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 String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

方法操作类:

package com.object.demo;

public class movieOperator {
    private movie[] movies;

    public movieOperator(movie[] movies) {
        this.movies = movies;
    }

    //展示系统所有电影信息,不用返回值,故直接用void
    public void printAllMovies() {
        System.out.println("系统全部电影信息如下");
        for (int i = 0; i < movies.length; i++) {
            movie m = movies[i];
            System.out.println("编号" + m.getId());
            System.out.println("名称" + m.getName());
            System.out.println("价格" + m.getPrice());
            System.out.println("----------------");

        }
    }

    //根据电影编号查询完整电影信息
    public void searchMovieById(int id) {

        for (int i = 0; i < movies.length; i++) {

            movie m = movies[i];
            if (m.getId() == id) {
                System.out.println("该电影详情如下");
                System.out.println("编号" + m.getId());
                System.out.println("名称" + m.getName());
                System.out.println("价格" + m.getPrice());
                System.out.println("得分"+m.getScore());
                System.out.println("导演"+m.getDirector());
                System.out.println("主演"+m.getActor());
                System.out.println("其他信息"+m.getInfo());
                return;


            }
        }
        System.out.println("没有该电影信息");
    }
}

测试类:

package com.object.demo;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        movie[] movies=new movie[4];
        movies[0] =new movie(1,"水门桥",38.9,9.8,"徐克","吴京","12万人想看");
        movies[1]=new movie(2,"长津湖",37.9,9.9,"1","某某某","13万人想看");
        movies[2]=new movie(3,"血观音",39.9,9.5,"2","某某","14万人想看");
        movies[3]=new movie(4,"爆裂无声",35.9,9.3,"3","某某","15万人想看");
        //创建一个电影操作类的对象,接收电影数据,并对其进行业务处理。
        movieOperator operator=new movieOperator(movies);
        //operator.printAllMovies();
        //operator.searchMovieById(2);
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("==电影信息系统==");
            System.out.println("1、查询全部电影信息");
            System.out.println("2、根据id查询某个电影的详细信息");
            System.out.println("请你输入操作指令");
            int command =sc.nextInt();
            switch(command){
                case 1:
                    operator.printAllMovies();
                  break;
                case 2:
                    System.out.println("请你输入查询的电影id");
                    int id =sc.nextInt();
                    operator.searchMovieById(id);
                    break;
                default:
                    System.out.println("你输入的指令有问题");
            }
        }
    }
}

在这里插入图片描述
补充信息:
在这里插入图片描述
对于成员变量和局部变量的区别,个人理解,成员变量一般指我们创建对象中的属性值,此后我们在生成新的对象时,这些属性都是自带的。这些值存于堆内存中,与对象共存亡。而局部变量一般是我们在方法中定义的变量,只有我们调用这个方法时,这个变量才会使用,存于栈内存中,当我们方法调用完毕,它也随之出栈。也就是随着方法的运行结束而结束。
在这里插入图片描述

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值