JAVA新手学习篇之类和对象详解

 更新时间:2024年10月26日 09:31:14   作者:爱编程的小新☆  
这篇文章主要给大家介绍了关于JAVA新手学习篇之类和对象的相关资料,Java是面向对象的编程语言,主旨在于通过对象封装属性和方法实现功能,面向对象与面向过程的区别在于关注点的不同,需要的朋友可以参考下

一. 面向对象

Java 是一门面向对象的编程语言 (Object Oriented Program ,简称OOP),面向对象编程的核心思想是将数据(属性)和操作数据的方法封装成一个整体,即对象。对象之间通过信息传递来相互协作,从而实现特定的功能。

1.1 面向对象和面向过程

面向过程注重解决问题的步骤和操作,面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

举例说明:将大象装进冰箱

(1) 面向过程

第一步:打开冰箱

第二步:将大象塞进冰箱

第三步:关上冰箱

那么以上三个步骤就是就是把大象塞进冰箱的过程,我们注重这一件事的过程,那么这种解决问题的方法我们就叫做面向过程。

(2) 面向对象

那么此时只有人、大象、冰箱三个对象,将大象装进冰箱的整个过程是:人、大象、冰箱三个对象之间交互完成的,我们不需要关心大象是如何被装进冰箱的,那么这种不关注过程,通过对象之间的交互完成的解决问题的方式我们叫做面向对象。

注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

二. 类的定义和使用

什么是类呢?我们一起来简单认识一下

2.1 什么是类

类就是用来对一个对象进行描述的,主要描述该对象有哪些属性,哪些功能等

例如:学生

属性:年龄、姓名、性别......

行为:上学、吃饭、考试......

 那么我们知道了类的作用,那么该如何定义类呢?

2.2 类的定义格式

在JAVA中定义类的时候需要用到class关键字,语法格式如下:

class ClassName {    //ClassName表示类的名称

        field;       //表示成员变量(属性)

        method;      //表示行为或者成员方法
}

 那么我们来创建一个上述提到的学生类:

public class Student {
    public String name;//学生姓名
    public int age ;//学生年龄
    public int score ;//学生成绩

    public void eat()
    {
        System.out.println("正在吃饭......");
    }

    public void exam()
    {
        System.out.println("正在考试......");
    }
    
}

那么一个简单的学生类就创建好了,里面描述了学生的属性和行为。

定义类的注意事项:

1. 类型采用大驼峰定义

2.成员前写法统一为public ,后面会介绍其他的访问修饰限定符

 三. 类的实例化

通过上述描述我们知道 类 只是用来对一个实体进行描述的,通过实例化才能够创造出对象,那么在JAVA中我们该如何实例化出一个对象呢?这时候就要用到new这个关键字来进行实例化

以上述的学生类示范:

public class Student {
    public String name;//学生姓名
    public int age ;//学生年龄
    public int score ;//学生成绩

    public void eat()
    {
        System.out.println(name+"正在吃饭......");
    }

    public void exam()
    {
        System.out.println(name+"正在考试......");
    }
    
    public static void main(String[] args) {
        Student student1=new Student();
        student1.name="张三";
        student1.age=10;
        student1.score=99;
        student1.eat();
        student1.exam();
    }
}​

 类实例化的注意事项:

1. new 关键字用于创建一个对象的实例 .

2. 使用 . 来访问对象中的属性和方法 .

3. 同一个类可以创建多个实例对象

四. this引用 

接下来我们看看这个日期类的代码和运行结果,让我们带着问题来探索this的用法。

public class Day {
    public int year;
    public int month;
    public int day;
    public void setDay(int year, int month, int day){
        year = year;
        month = month;
        day = day;
    }
    public void printDay(){
        System.out.println(year + "/" + month + "/" + day);
    }

    public static void main(String[] args) {
        Day d1 = new Day();
        Day d2 = new Day();
        Day d3 = new Day();
        d1.setDay(2020,9,15);
        d2.setDay(2020,9,16);
        d3.setDay(2020,9,17);
        d1.printDay();
        d2.printDay();
        d3.printDay();
    }
}

 通过运行结果可以看见,我们明明利用setDay方法d1、d2、d3都进行的赋值,那么打印出来的结果为什么还是0/0/0呢?

第一个问题:形参名与成员变量名相同时,形参究竟是给成员变量赋值呢还是形参自己对自己赋值呢?

第二个问题:此时我们的d1、d2、d3都在调用printDay方法,该方法是如何知道打印的是哪个对象的数据呢?

那么带着这两个问题,我们一起来探索一下this的用法。

4.1 this引用的作用

this 引用指向当前对象 ( 成员方法运行时调用该成员方法的对象),那么我们来看一下this是怎么解决上述问题的:

问题一:

public void setDay(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }

通过运行结果可以看见此时的结果是正确的,这是因为之前的代码中没有加上this引用,那时的赋值操作是 形参自己对自己进行赋值,成员变量的值还是默认值。而此时我们加上了this引用,那么此时带this引用的year、month、day就是当前类的成员变量, 此时的赋值操作就是形参对成员变量进行赋值。

问题二:

public void printDay(){
        System.out.println(this.year + "/" + this.month + "/" + this.day);
    }

 printDay方法通过this引用就能够知道打印的是当前对象的数据。

 总结:        1. 当形参名和成员变量名字相同时,通过this引用表示该变量是当前类的成员变量

        2. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。

五. 构造方法

构造方法是一个特殊的成员方法,方法名必须与类名相同,构造方法可以直接给成员变量进行初始化

public class Day {
    public int year;
    public int month;
    public int day;
    
    public Day(int year,int month,int day)
    {
        this.year=year;
        this.month=month;
        this.day=day;
    }
    
    public void printDay(){
        System.out.println(year + "/" + month + "/" +day);
    }

    public static void main(String[] args) {
        Day d1=new Day(2024,10,10);
        d1.printDay();
    }
}

 注意事项:

1. 名字必须与类名相同

2. 没有返回值类型,设置为 void 也不行

3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次

4. 如果不写构造方法,编译器会主动添加一个不带参数的构造方法

public class Day {
    public int year;
    public int month;
    public int day;

    public Day()
    {
        
        ......
    }
    public void printDay(){
        System.out.println(year + "/" + month + "/" +day);
    }
}

 那么如果我们自己写了一个构造方法,那么编译器就不会自动生成构造方法,正所谓救急不救穷。

5.1 构造方法重载

我们可以定义多个不同参数的构造方法,这样就实现了构造方法的重载,方便用于多种情况

public class Day {
    public int year;
    public int month;
    public int day;

    public Day()
    {
        
    }
    
    public Day(int year,int month,int day)
    {
        this.year=year;
        this.month=month;
        this.day=day;
    }
    
    public void printDay(){
        System.out.println(year + "/" + month + "/" +day);
    }
}

5.2 通过this调用其他构造方法

. 构造方法中,可以通过 this 调用其他构造方法来简化代码

public class Day {
    public int year;
    public int month;
    public int day;

    public Day()
    {
        this(2020,10,31);
    }

    public Day(int year,int month,int day)
    {
        this.year=year;
        this.month=month;
        this.day=day;
    }

    public void printDay(){
        System.out.println(year + "/" + month + "/" +day);
    }

    public static void main(String[] args) {
        Day d1=new Day();
        d1.printDay();
    }
}

注意事项:

1. this(...)必须是构造方法中第一条语句

2. 构造方法之间不能互相调用形成环

5.3 默认初始化

在使用局部变量之前是必须进行初始化的,否则会进行报错。但是使用成员变量时,可以不进行初始化,当我们实例化一个对象后,对象空间被申请好之后,对象中包含的成员其实已经设置好了初始值。

结语

以上就是部分类和对象的内容,希望大家看完本篇后能够理解类和对象的概念,在此小新感谢大家的观看!!!

到此这篇关于JAVA新手学习篇之类和对象详解的文章就介绍到这了,更多相关JAVA类和对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java序列化原理详解

    Java序列化原理详解

    这篇文章主要介绍了Java序列化原理详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • 使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

    使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

    在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析和提取JSON中的特定字段都是开发人员需要掌握的基本技能,本文将以一个实际案例为例,详细介绍如何使用Java解析JSON数据并提取其中的mailNo字段
    2025-01-01
  • SpringBoot实现单文件与多文件上传功能

    SpringBoot实现单文件与多文件上传功能

    这篇文章主要介绍了SpringBoot实现单文件与多文件上传功能,Spring MVC对文件上传做了简化,而在Spring Boot中对此做了更进一步的简化,文件上传变得更为方便,下面开始演示,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-01-01
  • Java树形菜单的创建

    Java树形菜单的创建

    这篇文章主要为大家详细介绍了Java图形用户界面中树形菜单的创建树形菜单的创建,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-10-10
  • Java Red5服务器实现流媒体视频播放

    Java Red5服务器实现流媒体视频播放

    这篇文章主要介绍了Java Red5服务器实现流媒体视频播放,对视频播放感兴趣的同学,可以参考下
    2021-04-04
  • Elasticsearch Analyzer 内置分词器使用示例详解

    Elasticsearch Analyzer 内置分词器使用示例详解

    这篇文章主要为大家介绍了Elasticsearch Analyzer 内置分词器使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 关于java中可变长参数的定义及使用方法详解

    关于java中可变长参数的定义及使用方法详解

    下面小编就为大家带来一篇关于java中可变长参数的定义及使用方法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 详解Log4j 日志文件存放位置设置

    详解Log4j 日志文件存放位置设置

    这篇文章主要介绍了详解Log4j 日志文件存放位置设置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 纯Java实现数字证书生成签名的简单实例

    纯Java实现数字证书生成签名的简单实例

    下面小编就为大家带来一篇纯Java实现数字证书生成签名的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java集合快速失败与安全失败解析

    Java集合快速失败与安全失败解析

    这篇文章主要介绍了Java集合快速失败与安全失败解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论