面向对象基础(二刷黑马)

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

1.快速入门:

创建两个对象打印小明小红的总成绩与平均成绩

package com.itheima.object;

public class Text {
    public static void main(String[] args) {
        //创建一个学生对象,封装小红的数据
        Student s1=new Student();
        s1.name="小红";
        s1.math=100;
        s1.chinese=96;
        s1.printTotalScore();
        s1.printAverageScore();
        //再创建一个学生对象,封装小明的数据
        Student s2=new Student();
        s2.name="小明";
        s2.chinese=59;
        s2.math=90;
        s2.printTotalScore();
        s2.printAverageScore();
    }
}
package com.itheima.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.0);
    }
}

 

2.深刻认识

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

Student s1=new Student();

每次new Student(),就是在堆内存中开辟一块内存区域代表一个学生

s1变量里面记住的是学生对象的地址

1.如何识别引用类型的变量?

Student s1=new Student();

s1变量中存储的是对象的地址,因此变量s1也称为引用类型的变量

注意:

1.类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如Student、Car

2.类中定义的变量也称为成员变量,类中定义的方法也称为成员方法

3.成员变量本身存在默认值,定义成员变量的时候一般来说不需要赋初始值

4.一个代码文件中,可以写多个class类,但只能用一个public修饰,且public修饰的类名必须成为代码文件名

5.对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了

多个变量指向同一个对象:

 

package com.itheima.object;

public class Text2 {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.name = "xiaoming";
        Student s2 = s1;
        s2.name="xiaohong";
        System.out.println(s1.name);
    }
}

 

将s1赋值给了s2,此时s1与s2是同一个地址,在给s2赋值“xiaohong”时,该地址为被赋值为“xiaohong”,所以在输出s1的name时输出为xiaohong

6.如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象,但是Java存在自动垃圾回收机制,会自动清除掉垃圾对象,不怕占用内存

this关键字

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

package com.itheima.thisdemo;

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

}
package com.itheima.thisdemo;

public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        System.out.println(s1);
        s1.printThis();
        System.out.println("------------------");
        Student s2=new Student();
        System.out.println(s2);
        s2.printThis();

    }
}

 面向对象基础(二刷黑马),Java笔记(黑马),java,开发语言

 this应用场景:当对象的成员变量与方法内部变量的名称一样时,解决变量名字冲突问题

package com.itheima.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("落选了");
        }
    }

}

 

package com.itheima.thisdemo;

public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        System.out.println(s1);
        s1.printThis();
        System.out.println("------------------");
        Student s2=new Student();
        System.out.println(s2);
        s2.printThis();
        Student s3=new Student();
        s3.score=325;
        s3.printPass(250);

    }
}

 

 面向对象基础(二刷黑马),Java笔记(黑马),java,开发语言

 

构造器

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

Student s=new Student();

 

package com.itheima.constructor;

public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        System.out.println("-----------------");
        Student s2=new Student("xiaoming",99);

    }
}

 

package com.itheima.constructor;

public class Student {
    //无参构造器
    public Student(){
        System.out.println("无参构造器被触发执行了");

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

    }


}

 

 面向对象基础(二刷黑马),Java笔记(黑马),java,开发语言

 

构造器的常见应用场景

1.创建对象时,完成对对象成员变量的初始化赋值

 

package com.itheima.constructor;

public class Test {
    public static void main(String[] args) {
        Student s2=new Student("xiaoming",99);
        System.out.println(s2.name);
        System.out.println(s2.score);


    }
}

 

package com.itheima.constructor;

public class Student {
    String name;
    double score;
    //无参构造器
    public Student(){
        System.out.println("无参构造器被触发执行了");

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

    }


}

 

面向对象基础(二刷黑马),Java笔记(黑马),java,开发语言

 

注意事项:

类在设计时,如果不写构造器,JAVA会为类自动生成一个无参构造器

一旦定义了有参构造器,Java就不会帮我们的类自动生成无参构造器了,此时建议自己手写一个无参构造器出来

如:

package com.itheima.constructor;

public class Test {
    public static void main(String[] args) {
        Student s2=new Student("xiaoming",99);
        System.out.println(s2.name);
        System.out.println(s2.score);
        Teacher t=new Teacher();


    }
}

 

package com.itheima.constructor;

public class Teacher {
    public Teacher(String name){

    }
}

 此时会报错,因为已经构造了有参构造器,不难通过new Teacher()调用无参构造器

封装

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

2.封装的设计规范:合理隐藏,合理暴露

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

4.公开成员,可以使用public进行修饰

隐藏成员,使用private(私有)进行修饰

实体类

一种特殊形式的类,这个类中的成员变量都要私有,并且要对外提供相应的getxxx,setxxx方法,必须有无参数构造器

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

实体类:

package com.itheima.javabean;

public class Student {
    //私有化成员变量,并为每个成员变量都提供get set方法
    private String name;
    private double score;
    //必须为类提供一个公开的无参构造器


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

 操作类:

package com.itheima.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()+"学生成绩不及格");
        }
    }
}

 

package com.itheima.javabean;

public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        s1.setName("xiaohong");
        s1.setScore(99);
        System.out.println(s1.getName());
        System.out.println(s1.getScore());
        StudentOperator operator=new StudentOperator(s1);
        operator.printPass();
    }
}

 

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

需求:

1.展示系统中的全部电影(每部电影显示:名称,价格)。

2.允许用户根据电影编号(id)查询出某个电影的详细信息。

实体类:

package com.itheima.moviedemo;

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

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

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

    }
}

 操作类:

package com.itheima.moviedemo;

public class MovieOperator {
    private Movie[] movies;
    public MovieOperator(Movie[] movies){
        this.movies=movies;
    }
    //展示系统全部电影信息
    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;//已经找到了电影信息,没有必要再执行了
            }

        }
        System.out.println("没有找到该电影");
    }


}

 主类:

package com.itheima.moviedemo;

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,"徐克","吴京","12万人想看",9.8);
        movies[1]=new Movie(2,"出拳吧",39,"唐晓白","田雨","3.5万人想看",7.8);
        movies[2]=new Movie(3,"月球陨落",42,"罗兰","贝瑞","17.9万人想看",7.9);
        movies[3]=new Movie(4,"一点就到家",35,"许宏宇","刘昊然","10.8万人想看",8.7);
        MovieOperator operator=new MovieOperator(movies);
        while (true) {
            System.out.println("==电影信息系统==");
            System.out.println("1.查询全部电影信息");
            System.out.println("2.根据id查询某个电影的详细信息展示");
            System.out.println("请您输入操作命令:");
            Scanner sc=new Scanner(System.in);
            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("您输入的命令有误");
            }
        }
    }
}

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

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

区别 成员变量 局部变量
类中位置不同 类中,方法外 常见于方法中
初始化值不同 有默认值,不需要初始化赋值 没有默认值,使用之前必须完成赋值
内存位置不同 堆内存 栈内存
作用域不同 整个对象 在所归属的大括号中
生命周期不同 与对象共存亡 随着方法的调用而生,随着方法的运行而结亡

到了这里,关于面向对象基础(二刷黑马)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 🔥🔥Java开发者的Python快速进修指南:面向对象基础

    当我深入学习了面向对象编程之后,我首先感受到的是代码编写的自由度大幅提升。不同于Java中严格的结构和约束,Python在面向对象的实现中展现出更加灵活和自由的特性。它使用了一些独特的,如self和cls,这些不仅增强了代码的可读性,还提供了对类和实例的明确

    2024年02月05日
    浏览(50)
  • 【Java面试题】Java基础——面向对象

    重载和重写的区别★★★ 重载(Overloading)和重写(Overriding)都是Java中面向对象编程的特性,它们都可以让子类继承父类的方法。但是它们之间有一些重要的区别: 定义方式: 重载(Overloading): 在同一个类中 ,可以有 多个方法名相同但参数列表不同的方法 。当调用一个方法时,

    2024年02月11日
    浏览(29)
  • [Java基础]面向对象

           目录 1、对象和类 2、类之间的关系 3、引用 4、对象的创建和使用 5、构造函数/构造方法 6、内存解析        在这篇文章中,我们将学习面向对象的思想,并学习如何使用面向对象思想编程。在学习面向对象编程之前,我们先了解一下编程语言的发展:机器语言,汇

    2024年02月08日
    浏览(34)
  • Java基础 --- 面向对象

    面向:拿、找 对象:能干活的东西 面向对象编程:拿东西过来坐对应的事情 类(设计图):是对象共同特征的描述; 对象:是真实存在的具体东西 在Java中,必须先设计类,才能获得对象。 如何定义类 如何得到类的对象 如何使用对象 访问属性:对象名.成员变量 访问行为

    2024年03月17日
    浏览(36)
  • Java学习笔记(三):面向对象

    类(class)和对象(object, 也被称为实例 instance)是 java面向对象的核心,可以把类理解成某种概念,对象理解为一个具体存在的实体。也就是说,日常说的人,其实都是人的实例,而不是人类。 定义类的简单语法: 修饰符可以是 public、final、abstract,或者完全省略。 对一个类而

    2024年02月11日
    浏览(40)
  • Java面向对象学习笔记-4

    当编写Java程序时,了解如何处理异常是至关重要的。异常处理可以帮助我们在程序执行过程中处理各种错误情况,以确保程序能够正常运行或者 graceful 地退出。本文将介绍一些关于Java异常处理的基本概念和最佳实践,包括自定义异常类、用户输入的处理、异常捕获与处理、

    2024年02月09日
    浏览(32)
  • Java面向对象学习笔记-3

    本文将介绍Java编程中的一些基本概念和用法,包括类、接口、抽象类、继承、多态和组合等。通过代码示例,我们将深入探讨这些概念,帮助读者更好地理解如何使用Java进行面向对象编程。 Java面向对象学习笔记-1 Java面向对象学习笔记-2 我们首先来看纸张和墨盒类,它们是

    2024年02月09日
    浏览(31)
  • 【java】面向对象的编程基础

    true false 这里输入set和get可以自动将函数补全,传参初始化在构造属性之后 cc ccccc coleak 这里说明先构造属性,再执行代码块,再初始化 静态代码块 4 4 我是静态变量初始化 我是静态代码块 我是成员变量初始化 我是普通代码块 我是构造方法 快速构造,点击生成,构造函数,

    2023年04月16日
    浏览(32)
  • Java基础练习十(面向对象)

    以下名词中哪些是对象? 猫 狗 Tom Jerry 人 帅哥 美女 迪丽热巴 胡歌 Phone iPhone 14 Pro Max 《Java面向对象》 1. 编写一个Student类,包含name、gender、age、id、score属性,分别为String、String、int、int、double类型。类中声明一个say方法,返回String类型,方法返回信息中包含所有属性值。

    2024年02月12日
    浏览(25)
  • 〔005〕Java 基础之面向对象

    对象: 是一种特殊的数据结构 对象: 使用类 new 出来的,有了类就可以创建对象,例 Random r = new Random() ,其中 r 就是一个对象 格式: public class 类名 { 变量和一些类方法 } 面向对象编程,更加符合人类的思维习惯,编程也会更直观 其实万物皆对象,如果想操作学生数据,就

    2024年02月05日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包