java面向对象基础

目录

前言

一、面向对象的执行原理

二、类与对象的注意事项

三、this关键字

四、构造器

1.什么是构造器?

2.构造器有什么特点?

3.构造函数的分类

4.构造器常见的应用场景

5.构造器的注意事项

五、封装

六、实体JavaBean

七、面向对象编程的综合案例、

八、成员变量与局部变量的区别


前言

例如:java面向对象基础复盘记录


一、面向对象的执行原理

分为:方法区、栈内存、堆内存

方法区:存放class类、成员变量和方法

栈内存:存放main方法,里面存放new出来class类

堆内存:存放new 出来class类中存放的地址,可以对new 出来class的地址里面的特有属性进行赋值操作

注:因为s1中存放的是内存总的地址,所以是引用数据类型

二、类与对象的注意事项

  1. 类名建议使用英文单词,首字母大写,满足驼峰模式
  2. 类中定义的变量也称为成员变量(对象的属性),对象的方法也称为方法(对象的行为)
  3. 成员变量本身存在默认值,在定义成员变量时一般不需要赋初始值
  4. 一个代码可以写多个class类,但只能有一个public来修饰
  5. 对象与对象之间的数据不会相互影响,但多个对象指向同一个对象时就会收到影响
  6. 如果某个对象没有引用它,则该对象无法被操作,该对象会成为所谓的“垃圾对象”,会被自动清理

三、this关键字

this就是一个变量,可以在方法中,来拿到当前的对象

注:this主要用来解决变量名称冲突的问题

四、构造器

1.什么是构造器?

public class Student{
    //构造器
    public Student(){...}
}

2.构造器有什么特点?

创建对象时,对象会去调用构造器

注:构造方法也可以进行重载

3.构造函数的分类

有参构造函数、无参构造函数【根据对应的调用执行有参或者无参的构造函数】

4.构造器常见的应用场景

节省了使用引用对象参数的赋值情况

5.构造器的注意事项

(1)类在设计时,如果不写构造器,Java会自动生成一个构造器(查询方法:在项目鼠标右键找到所在的文件目录,找到自动生成的构造器)

(2)一旦定义了有参数的构造函数,Java就不会帮我们自动创建构造器了,此时就建议手写一个无参的构造函数

所以在自己编写过程中,建议自己手动写一个无参数的构造器

五、封装

合理隐藏,合理暴露(public 和 private 合理的使用方法)

设计对象的成员时,向对象的成员变量,应该隐藏起来,并暴露合适的get set方法合理访问,根据业务需求,暴露必须暴露的合理代码就可以了

六、实体JavaBean

  1. 什么是实体类?

(1)类中的成员变量都要是私有的,外部能提供对应的get和set方法【get,set构造快捷键,右键选择generator-》getter&setter方法】

(2)类中必须要有一个无参的构造器【右键选择generator-》constructor-》(可以选择有参,或者点击select None 选择快速生成无参的构造函数)】

注:实体类就是为了保存数据,具体的操作需要另外创建一个对象来处理数据

七、面向对象编程的综合案例、

1.新建一个Movie类,用来存放电影相关的数据信息,生成对应的构造方法和getter&setter函数

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 String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

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

    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;
    }
}

2.创建一个处理数据的MovieOperator类,拿到Movie类里面的数据,编写相关可以展示出来的信息

public class MovieOperator {
    private Movie[] movies;

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

    //1.系统1显示movie的全部信息
    public void printAllMovie() {
        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 searchMovieId(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());
                System.out.println("============================================");
                return;//已经找到全部信息,不需要在执行了
            }
        }
        System.out.println("没有找到对应的电影!");
    }
}

3.新建一个Test类,用来测试movie数据信息

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //1、设计一个电影类
        //2、设计一个电影的操作类
        //3、全部电影数据
        Movie [] movies=new Movie[4];
        Movie m1=new Movie(1,"水门桥",38.9,9.8,"徐克","吴京","12万人想看");
        Movie m2=new Movie(2,"出拳吧",39,7.8,"唐晓白","田雨","3.5万人想看");
        Movie m3=new Movie(3,"月球陨落",42,7.9,"罗兰","贝瑞","17.9万人想看");
        Movie m4=new Movie(4,"一点就到家",35,8.7,"徐宏宇","刘昊然","10.8万人想看");
        movies[0]=m1;
        movies[1]=m2;
        movies[2]=m3;
        movies[3]=m4;
        MovieOperator movieOperator=new MovieOperator(movies);
/*      movieOperator.printAllMovie();
        movieOperator.searchMovieId(2);*/
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("===电影查询系统===");
            System.out.println("1.查询全部电影信息");
            System.out.println("2.根据id查询某个电影详细信息");
            System.out.print("请您输入操作命令:");
            int command=sc.nextInt();
            switch (command){
                case 1:
                    //查询全部电影信息
                    movieOperator.printAllMovie();
                    break;
                case 2:
                    //根据id查询某个电影详细信息
                    System.out.print("请输入您想要查询的电影编号:");
                    int id=sc.nextInt();
                    movieOperator.searchMovieId(id);
                    break;
                default:
                    System.out.println("很抱歉,没有查询到任何信息!");
            }
        }

    }

}

八、成员变量与局部变量的区别

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值