JAVA SE基础《八》 ---- 面对对象编程

这篇具有很好参考价值的文章主要介绍了JAVA SE基础《八》 ---- 面对对象编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、面向对象编程快速入门

二、深刻认识面向对象

三、对象在计算机中的执行原理

四、类和对象的一些注意事项

五、其他语法:this

六、其他语法:构造器

七、其他语法:封装

八、其他语法:实体JavaBean

九、面向对象编程综合案例

十、补充知识:成员变量、局部变量的区别小结

 文章来源地址https://www.toymoban.com/news/detail-626404.html

前言

 

JAVA SE基础《八》 ---- 面对对象编程

 Student类

package com.ctgu.object;

public class Student {
    String name;
    double chinese;
    double math;

    public void printTotalScore(){
        System.out.println(name + "的总成绩是:" + (chinese + math));
    }

    public void printAverageScore(){
        System.out.println(name + "的平均成绩是:" + (chinese + math) / 2);
    }
}

Test类

package com.ctgu.object;

public class Test {
    public static void main(String[] args) {
        // 目标:面向对象编程快速入门
        // 1、创建一个学生对象,封装波妞的数据
        Student s1 = new Student();
        s1.name = "波妞";
        s1.chinese = 100;
        s1.math = 100;
        s1.printTotalScore();
        s1.printAverageScore();

        // 2、再创建一个学生对象,封装波仔的数据
        Student s2 = new Student();
        s2.name = "波仔";
        s2.chinese = 59;
        s2.math = 100;
        s2.printTotalScore();
        s2.printAverageScore();
    }
}

 一、面向对象编程快速入门

  • 开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。

JAVA SE基础《八》 ---- 面对对象编程

JAVA SE基础《八》 ---- 面对对象编程

 

二、深刻认识面向对象

1、面向对象编程有啥好处?

JAVA SE基础《八》 ---- 面对对象编程

  •  汽车的数据 找汽车对象处理
  • 手机的数据 找手机对象处理
  • 学生的数据 找学生对象处理
  • 符合人类思维习惯,编程更简单、更直观

2、程序中的对象到底是个啥?

  • 对象本质上是一种特殊的数据结构

JAVA SE基础《八》 ---- 面对对象编程

  •  class也就是,也称为对象的设计图(或者对象的模板)。

JAVA SE基础《八》 ---- 面对对象编程

 总结

1、面对对象编程有啥好处?

  • 凡事找对象的编程思路,更加符合人类思维习惯,编程也会更直观。

2、对象是啥?如何得到?

  • 对象是一种特殊的数据结构。
  • 对象是用类new出来的,有了类就可以创建出对象。

JAVA SE基础《八》 ---- 面对对象编程

 3、面向对象编程这种套路是咋回事?

  • 祖师爷认为万物皆对象,谁的数据谁处理。

 

三、对象在计算机中的执行原理

多个对象在计算机中的执行原理

JAVA SE基础《八》 ---- 面对对象编程

 总结

1、对象在计算机中的执行原理是怎么回事?

  • Student s1 = new Student();
  • 每次new Student(),就是在堆内存中开辟一块区域代表一个学生对象。
  • s1变量里面记住的是学生对象的地址。

 

四、类和对象的一些注意事项

类和对象的一些注意事项

  • 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car...
  • 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
  • 成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。

JAVA SE基础《八》 ---- 面对对象编程

  •  一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
  • 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
  • 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。

如果某个对象没有任何变量指向它,需要注意说明?

JAVA SE基础《八》 ---- 面对对象编程

 注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。

java存在自动垃圾回收机制,会自动清除掉垃圾对象,程序员不用操心。

 

五、this

this是什么

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

Student类

package com.ctgu.thisdemo;

public class Student {
    public void printThis(){
        System.out.println(this);
    }
}

Test类

package com.ctgu.thisdemo;

public class Test {
    public static void main(String[] args) {
        // 目标:认识this,掌握this的应用场景。
        Student s1 = new Student();
        System.out.println(s1);
        s1.printThis();
        System.out.println("---------------------");

        Student s2 = new Student();
        System.out.println(s2);
        s2.printThis();
    }
}

This的执行原理

JAVA SE基础《八》 ---- 面对对象编程

 this有啥应用场景呢?

  • this主要用来解决:变量名称冲突问题的
package com.ctgu.thisdemo;

public class Student {
    double score;
    public void printThis(){
        System.out.println(this);
    }

    public void printPass(double score){
        if(this.score > score){
            System.out.println("恭喜您,您成功考入了哈弗大学了~~");
        }else{
            System.out.println("落选了");
        }
    }
}

总结

1、this关键字是什么?

  • this就是一个变量,可以用在方法中,用来拿到当前对象;哪个对象调用方法,this就指向哪个对象,也就是拿到哪个对象。

2、this关键字在实际开发中常用来干啥?

  • 用来解决对象的成员变量与方法内部变量的名称一样时,导致访问冲突问题的。

 

多学一招:方法里的this到底是如何拿到调用它的对象的

JAVA SE基础《八》 ---- 面对对象编程

 

六、构造器

关于构造器,需要同学们掌握的目标

JAVA SE基础《八》 ---- 面对对象编程

 构造器是什么样子?

JAVA SE基础《八》 ---- 面对对象编程

 构造器有什么特点?

  • 创建对象时,对象会去调用构造器。
Student s = new Student();

构造器的常见应用场景

  • 创建对象时,同时完成对对象成员变量(属性)的初始化赋值。

Student类

package com.ctgu.constructor;

public class Student {
    String name;
    double score;

    // 无参构造器
    public Student(){
        System.out.println("无参数构造器被触发执行了~");
    }
    // 有参构造器
    public Student(String name,double score){
        System.out.println("有参数的构造器被触发执行了~");
    }
}

Test类

package com.ctgu.constructor;

public class Test {
    public static void main(String[] args) {
        // 目标:认识构造器,并掌握构造器的特点,应用场景,注意事项
        Student s1 = new Student();
        s1.name = "波妞";
        s1.score = 100;

        Student s2 = new Student("小黑",59);
        System.out.println(s2.name);
        System.out.println(s2.score);
    }
}

构造器的注意事项

  • 类在设计时,如果不写构造器,java是会为类自动生成一个无参构造器的。
  • 一旦定义了有参数构造器,java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。

总结

1、构造器长什么样子?

JAVA SE基础《八》 ---- 面对对象编程

2、构造器在哪里调用,我们常用它来干嘛?

  • 对象创建时,我们可以指定对象去调用哪个构造器执行。
  • 构造器常用于完成对象初始化(常见的应用场景是完成对象的成员变量的初始化赋值)

3、构造器在使用时,有哪2个注意事项?

  • 类在设计时,如果不写构造器,java是会为类自动生成一个无参构造器的。
  • 一旦定义了有参数构造器,java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。

 

七、封装

面对对象的三大特性:封装、继承、多态

什么是封装?

  • 就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。

JAVA SE基础《八》 ---- 面对对象编程

 封装的设计规范:合理隐藏、合理暴露

JAVA SE基础《八》 ---- 面对对象编程

 Student类

package com.ctgu.encapsulation;


public class Student {
    private double score;

    private void printPass(){
        System.out.println(score >= 60 ? "成绩及格" : "成绩不及格");
    }

    public void setScore(double score) {
        if(score >= 0 && score <= 100) {
            this.score = score;
        }else{
            System.out.println("数据非法");
        }
    }

    public double getScore() {
        return score;
    }
}

Test类

package com.ctgu.encapsulation;

public class Test {
    public static void main(String[] args) {
        // 目标:掌握封装的设计规范:合理隐藏、合理暴露。
        Student s1 = new Student();
        s1.setScore(-99);
    }
}

总结

1、什么是封装?

  • 就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。
  • 面向对象三大特征:封装、继承、多态。

2、封装的设计规范是什么样的?

  • 合理隐藏,合理暴露。

3、代码层面如何控制对象的成员公开或隐藏?

  • 公开成员,可以使用public(公开)进行修饰。
  • 隐藏成员,使用private(私有,隐藏)进行修饰。

 

八、实体JavaBean

什么是实体类?

  • 就是一种特殊形式的类。

JAVA SE基础《八》 ---- 面对对象编程

get、set快捷生成

  • 右键Generate..,再点击Getter and Setter,选择成员变量。

有参、无参构造器快捷生成

  • 右键Generate..,再点击Constructor,选择参数。

Student类

package com.ctgu.javabean;

public class Student {
    // 1、必须私有成员变量,并为每个成员变量都提供get、set方法。
    private String name;
    private double score;

    // 2、必须为类提供一个公开的无参构造器
    public Student(String name, double score) {
        this.name = name;
        this.score = score;
    }

    public Student() {
    }

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

Test类

package com.ctgu.javabean;


public class Test {
    public static void main(String[] args) {
        // 目标:掌握实体类的书写要求,特点,应用场景。
        Student s1 = new Student();
        s1.setName("波妞");
        s1.setScore(99);
        System.out.println(s1.getName());
        System.out.println(s1.getScore());

    }
}

StudentOpreator类

package com.ctgu.javabean;


public class StudentOperator {
    private Student student;
    public StudentOperator(Student student){
        this.student = student;
    }

    public void printPass(){
        if(student.getScore() >= 60){
            System.out.println(student.getName() + "学生成绩及格");
        }else{
            System.out.println(student.getName() + "学生成绩不及格");
        }
    }
}

 

实体类有啥应用场景?

  • 实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。

 

总结

1、什么是实体类?有啥特点?

  • 成员变量必须私有,且为他们提供get、set方法;必须有无参数构造器。
  • 实体类仅仅只是一个用来保存数据的java类,可以用它创造对象,保存某个事物的数据。

2、实体类有啥应用场景?

  • 实体类对应的是软件开发里比较流行的开发方式,数据和数据的业务处理相分离。

 

 

 

九、面向对象编程综合案例

案例 面向对象综合案例-模仿电影信息系统

需求 

  • 展示系统中的全部电影(每部电影展示:名称、价格)
  • 允许用户根据电影编号(id)查询出某个电影的详细信息。

目标

  • 使用所学的面向对象编程实现以上2个需求。

JAVA SE基础《八》 ---- 面对对象编程

 实训

 

JAVA SE基础《八》 ---- 面对对象编程

 movie类

package com.ctgu.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;
    }

    /**
     * 获取
     * @return id
     */
    public int getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return price
     */
    public double getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(double price) {
        this.price = price;
    }

    /**
     * 获取
     * @return score
     */
    public double getScore() {
        return score;
    }

    /**
     * 设置
     * @param score
     */
    public void setScore(double score) {
        this.score = score;
    }

    /**
     * 获取
     * @return director
     */
    public String getDirector() {
        return director;
    }

    /**
     * 设置
     * @param director
     */
    public void setDirector(String director) {
        this.director = director;
    }

    /**
     * 获取
     * @return actor
     */
    public String getActor() {
        return actor;
    }

    /**
     * 设置
     * @param actor
     */
    public void setActor(String actor) {
        this.actor = actor;
    }

    /**
     * 获取
     * @return info
     */
    public String getInfo() {
        return info;
    }

    /**
     * 设置
     * @param info
     */
    public void setInfo(String info) {
        this.info = info;
    }


}

MovieOperator类

package com.ctgu.demo;

public class MovieOperator {

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

    /** 1、展示系统全部电影信息 */
    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("----------------------");

            
        }
    }
    /**2、根据电影的编号查询出该电影的详细信息并展示 */
    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; //已经找到了电影信息,没有必要再执行看
            }else{
                System.out.println("查询无果");
            }
        }
    }
}

Test类

package com.ctgu.demo;


import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 1、设计一个电影类 Movie
        // 2、设计一个电影的操作类 MovieOperator
        // 3、准备 全部电影数据
        Movie[] movies = new Movie[4];
        movies[0] = new Movie(1,"水门桥",38.9,9.8,"徐克","吴京","12万人想看");
        movies[1] = new Movie(2,"出拳吧",39,7.8,"唐晓白","田雨","3.5万人想看");
        movies[2] = new Movie(3,"月球陨落",42,7.9,"罗兰","贝瑞","17.9万人想看");
        movies[3] = new Movie(4,"一点就到家",35,8.7,"徐宏宁","刘昊然","18.8万人想看");

        // 4、创建一个电影操作类的对象,接受电影数据,并对其进行业务处理
        MovieOperator operator = new MovieOperator(movies);
        operator.printAllMovies();
        operator.searchMovieById(3);

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("==电影信息系统==");
            System.out.println("1、查询全部电影信息");
            System.out.println("2、根据id查询某个电影的详细信息展示");
            int commend = sc.nextInt();
            switch (commend){
                case 1:
                    // 展示全部电影信息
                    operator.printAllMovies();
                    break;
                case 2:
                    // 根据id查询某个电影的详细信息展示
                    System.out.println("请您输入查询的电影id:");
                    int id = sc.nextInt();
                    operator.searchMovieById(id);
                    break;
                default:
                    System.out.println("您输入的命令有问题~");
            }
        }
    }
}

 

 

 

十、补充知识:成员变量、局部变量的区别

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

JAVA SE基础《八》 ---- 面对对象编程

 

到了这里,关于JAVA SE基础《八》 ---- 面对对象编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 7.面向对象编程(基础部分)|Java学习笔记

    java 设计者 引入 类与对象(OOP) ,根本原因就是现有的技术,不能完美的解决新的新的需求. 类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型. 对象是具体的,实际的,代表一个具体事物, 即 是实例. 类是对象的模板,对象是类的一个个体,对应一个实例

    2024年02月08日
    浏览(40)
  • 【Java入门】-- Java基础详解之 [Java面向对象编程(初级)]

    目录 1.类与对象 2.类与对象的区别与联系 3.对象在JVM内存中的存在形式(重要) 4.属性/成员变量/字段 5.如何创建对象 6.类和对象的内存分配机制 7.面向对象的三大特征? 8.面向对象和面向过程? 9.匿名对象 10.方法(method) 11.方法的重载(overload) 12.可变形参 13.递归 14.封装 15.四种访

    2024年02月12日
    浏览(26)
  • 【Java零基础入门篇】第 ③ 期 - 面向对象编程(一)

    博主:命运之光 专栏:Java零基础入门 理解面向对象三大主要特征; 掌握类与对象的区别与使用; 掌握类中构造方法以及构造方法重载的概念及使用; 掌握包的定义、包的作用等; 掌握方法的参数传递规则。 方法的定义 🍓🍓方法在很多地方被称为 函数 (在Java中英文单

    2024年02月04日
    浏览(46)
  • 【Java零基础入门篇】第 ③ 期 - 面向对象编程(二)

    博主:命运之光 专栏:Java零基础入门 学习目标 理解面向对象三大主要特征; 掌握类与对象的区别与使用; 掌握类中构造方法以及构造方法重载的概念及使用; 掌握包的定义、包的作用等; 掌握方法的参数传递规则。 什么是封装? 本意是把物体打包装到箱子里,然后封起

    2024年02月04日
    浏览(44)
  • 【Java基础教程】特别篇:面向对象合辑——掀开Java 的面向对象盖章时代,一起来发现OOP的编程秘密!~

    面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用于软件开发的编程范式 。Java是一种面向对象的编程语言,它提供了丰富的工具和特性来支持面向对象编程。本文将详细介绍Java面向对象的全部知识。 我们可以把一个Java类想象成是一个蓝图或者模具,用来创建对象。就

    2024年02月17日
    浏览(32)
  • 【Java SE语法篇】8.面向对象三大特征——封装、继承和多态

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 面向对象三大特性:封装、继承和多态。 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部

    2024年02月01日
    浏览(48)
  • Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API

    Java 是一种由 Sun Microsystems 于 1995 年首次发布的编程语言和计算平台。Java 是一种通用的、基于类的、面向对象的编程语言,旨在减少实现依赖性。它是一个应用程序开发的计算平台。Java 快速、安全、可靠,因此在笔记本电脑、数据中心、游戏机、科学超级计算机、手机等领

    2024年03月24日
    浏览(76)
  • TypeScript类与对象:面向对象编程的基础

    TypeScript 是 JavaScript 的一个超集,它为 JavaScript 添加了静态类型、类、接口和装饰器等面向对象编程的特性,并通过编译器将 TypeScript 编译成JavaScript,可以在任何 JavaScript 环境中运行,因此成为了 JavaScript 开发中不可或缺的工具。面向对象编程是现代编程语言的基础,而 Ty

    2024年02月09日
    浏览(32)
  • 【python】08.面向对象编程基础

    活在当下的程序员应该都听过\\\"面向对象编程\\\"一词,也经常有人问能不能用一句话解释下什么是\\\"面向对象编程\\\",我们先来看看比较正式的说法。 \\\"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部

    2024年01月20日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包