初始Java篇(JavaSE基础语法)(5)(类和对象(上))

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

个人主页(找往期文章包括但不限于本期文章中不懂的知识点):我要学编程(ಥ_ಥ)-CSDN博客

目录

面向对象的初步认知

面向对象与面向过程的区别

类的定义和使用 

类的定义格式

类的实例化

this引用

什么是this引用?

this引用的特性

对象的构造及初始化

如何初始化对象(的成员变量)

构造方法 


本期我们就来学习面向对象。

面向对象的初步认知

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

面向对象与面向过程的区别

面向过程:注重的是过程;面向对象:注重的是对象。

例如:我们要吃饭了。首先,得找一个饭馆子,再点菜,最后再吃饭。

如果是面向过程的话,就需要关注这些过程:找饭馆子的过程,点菜,吃饭。

如果是面向对象的话,就需要关注这些对象:我们自己,饭馆子,菜。不需要关注过程了。

从这里就可以简单看出对象比过程要简单。

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

类的定义和使用 

类是用来描述对象的。

例如:一个学生就是一个对象(Java中一切皆对象),我们现在如果想要来描述这个学生的话,就得用类来描述。

类的定义格式

//class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
//类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。
//方法主要说明类具有哪些功能,称为类的成员方法。

// 创建类
class ClassName{
    field; // 字段(属性) 或者 成员变量 :定义再类当中,方法外部的变量
    method; // 行为 或者 成员方法
}

 成员变量分为两种:一种是普通成员变量,一种是静态成员变量。

普通成员变量:public int age;      静态成员变量:public static int age;  

成员方法也分为两种:一种是普通成员方法,一种是静态成员方法。

普通成员方法:public void func()     静态成员方法:public static void func()

我们现在就来描述一个学生对象。

class Student {
    public String name;//名字
    public int age;//年龄

    public void func(){
        System.out.println("姓名:"+name+" 年龄:"+age);
    }
}

注意事项:类名注意采用大驼峰。定义成员前写法统一为public,后面会详细解释。此处写的方法不带 static 关键字,后面会详细解释。

练习:定义一个类:狗

class Dog{
    public String name;//名字
    public int age;//年龄
    public void func(){
        System.out.println(name+" :汪汪汪~~~");
    }
}

注意事项: 1. 一般一个文件当中只定义一个类(推荐),虽然可以定义多个类,但是只能有一个类被public 修饰。 2. main方法所在的类一般(不是绝对(如下图1所示)要使用public修饰。(注意:Eclipse默认会在public修饰的类中找main方法) 3. public修饰的类必须要和文件名相同 4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改(如下图2所示)。 5. 每一个类都会生成一个对应的字节码文件(如下图3)。

 图1:初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

图2:

 当只有一个类时,就可以修改成功。

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

当有多个类时,就会修改失败。

修改同上步骤,但修改的结果不同。

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

图3:

在……out / production ……目录下。 

下面是怎么查看的视频

JavaSE篇(类和对象(上))怎么查看字节码文件-CSDN直播

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

类的实例化

我们在定义了一个类的同时就相当于创建了一种新的类型。和int,char一样,只不过int,char这些是Java的内置类型,而类是用户自定义的类型。既然创建了类型,我们就肯定会用这个类型来定义变量。举个简单的例子:我们拿到int类型,就可以使用int类型来创建一个变量 int a = 0;  同样这个类也是可以这样的,我们把用类定义一个变量的过程称为类的实例化(我们更喜欢说是用类创建对象的过程)

public class Test {
    public static void main(String[] args) {
        //java中使用new关键字,来配合类名实例化对象
        Student student = new Student();//通过new来实例化对象
        //通过 . 来访问类的属性和方法(功能)
        student.name = "张三";
        student.age = 18;
        student.func();
    }
}

//创建一个类
class Student{
    //属性
    String name;
    int age;
    //功能(方法)
    public void func(){
        System.out.println("姓名:"+name+" 年龄:"+age);
    }
}

注意:一个类可以实例化多个对象。

可能会有小伙伴发现:类有点像我们C语言学过的结构体。没错这个类和结构体是非常类似的。

this引用

public class Test{
    public static void main(String[] args) {
        //实例化三个对象
        Date date1 = new Date();
        Date date2 = new Date();
        Date date3 = new Date();

        //设置时间
        date1.SetDate(2024,3,25);
        date2.SetDate(2024,3,26);
        date3.SetDate(2024,3,27);

        //打印结果,看看是否设置成功
        date1.PrintDate();
        date2.PrintDate();
        date3.PrintDate();
    }
}

class Date{
    //属性
    public int year;
    public int month;
    public int day;

    //方法
    public void SetDate(int y, int m, int d){
        year = y;
        month = m;
        day = d;
    }
    public void PrintDate(){
        System.out.println(year+"/"+month+"/"+day);
    }

}

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

上面是最终的打印结果,由此可知我们设置的时间是对的。

但是又有一些新的问题:

1. 如果我们在设置时间的方法的参数也是year month day ,那就会发生一些错误(打印的结果是全部是0,如下图所示) 

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

这是什么原因造成的呢?其实我们在C语言阶段已经学习过了(当全局变量与局部变量的变量名一样时,全局变量会被屏蔽,遵循局部变量优先原则) ,同样Java中也是如此,这里的year,month,day都是局部变量,那么也就是局部变量给局部变量赋值,因此得不到我们想要的结果(为什么是0呢?后面会有解释)。

2. PrintDate方法怎么知道自己要打印谁的值呢?其实这个是比较好解释的,因为前面有 对象. 来说明是在哪个对象下调用这个方法。

上述的所有问题都可以用 this 来解决。我们首先来说第二点,其实上面那个解释是没问题的,但如果我们用更底层的知识来解释的话,就是用this引用来解释。

什么是this引用?

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

那上面的代码我们就可以改成下面:

public class Test{
    public static void main(String[] args) {
        //实例化三个对象
        Date date1 = new Date();
        Date date2 = new Date();
        Date date3 = new Date();

        //设置时间
        date1.SetDate(2024,3,25);
        date2.SetDate(2024,3,26);
        date3.SetDate(2024,3,27);

        //打印结果,看看是否设置成功
        date1.PrintDate();
        date2.PrintDate();
        date3.PrintDate();
    }
}

class Date{
    //属性
    public int year;
    public int month;
    public int day;

    //方法
    public void SetDate(int year, int month, int day){
        //这个也就声明了是当前对象
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void PrintDate(){
        //即使能够识别,我们也要加上this
        System.out.println(this.year+"/"+this.month+"/"+this.day);
    }

}

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

注意:this引用指向的是调用成员方法的对象 。

this引用的特性

1. this的类型:对应类的类型引用,即哪个对象调用就是哪个对象的引用类型(谁调用this所在的方法,this就指向谁)。

2. this只能在"成员方法"中使用。

3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象。

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

因此我们以后调用成员方法或者成员变量时,都应该加上this。

对象的构造及初始化

如何初始化对象(的成员变量)

通过前面知识点的学习,我们知道,在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败,但是我们用类创建的对象不初始化竟然不会报错(如下图:)。初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

这就是默认初始化。 

Date d = new Date(2021,6,9);

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:

1. 检测对象对应的类是否加载了,如果没有加载则加载。

2. 为对象分配内存空间。

3. 处理并发安全问题 比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突。

4. 初始化所分配的空间 即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值。根据不同的类型会默认初始化不同的值(如下表)。

数据类型 默认值
byte 0
char '\u0000'
short 0
int 0
long 0L
boolean false
float 0.0f
double 0.0
reference null

如果我们想重新初始化时,初始化的方式就是 . 成员变量 ,再赋值就可以了。还有一种初始化就是在创建成员变量时,就直接给予初始值,这种初始化叫就地初始化。下面就是就地初始化:初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

构造方法 

构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,没有返回值类型,即使是void也不行。在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。同样构造方法也可以对我们创建的对象进行初始化。那怎么调用这个方法呢?(如下图所示:)

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

由此可见:当我们实例化一个对象的时候,就自动地调用了这个构造方法。 那又有一个新的问题来了:当我们没有写构造方法的时候,但是我们依旧实例化了一个对象啊,那也会调用构造方法吗?没错,当我们没有提供任何构造方法时,编译器会自动给我们提供一个不带参数的构造方法;一旦我们自己写了构造方法之后,编译器就不再提供了

注意:1. 构造方法是可以被重载的。

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

2. 只有当调用完构造方法之后,对象才算被被创建成功了。 

3.在构造方法中可以通过this()来调用其它构造方法。初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

这个this()来调用其它构造方法的时候,有一些限制条件:(1)this()这条语句必须是在调用这条语句的构造方法的有效代码的第一行。初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

(2) 不能形成循环。初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

4. 绝大多数情况下使用public来修饰,特殊场景下会被private修饰(后面会学习到) 

使用IDEA快速生成构造方法的步骤:

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

初始Java篇(JavaSE基础语法)(5)(类和对象(上)),Java,java,开发语言,JavaSE

 下面是详细视频:

https://live.csdn.net/v/374793?spm=1001.2014.3001.5501

好啦!本期JavaSE类和对象(上)的学习就到此结束啦!我们下一期再一起学习吧!文章来源地址https://www.toymoban.com/news/detail-844434.html

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

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

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

相关文章

  • 【JavaSE】Java基础语法(十八):接口

    接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。 Java中接口存在的两个意义 用来定义规范 用来做功能的拓展 接口用interface修饰 类实现接口用implements表示 接口不能实例化 我们可以创建接口的实现类对象使用 接口的子类 要么重写接口中的所有抽

    2024年02月06日
    浏览(56)
  • 【JavaSE】基础笔记 - 类和对象(下)

      目录 1、this引用 1.1、为什么要有this引用 1.2、什么是this引用 1.3、 this引用的特性 2、 对象的构造及初始化 2.1、 如何初始化对象 2.2、构造方法 2.2.1、概念   2.2.2、特性  2.3、默认初始化  2.4、就地初始化   上篇: 【JavaSE】基础笔记 - 类和对象(上)-CSDN博客 https://blo

    2024年02月04日
    浏览(49)
  • 【JavaSE】基础笔记 - 类和对象(上)

      目录 1、面向对象的初步认知 1.1、什么是面向对象 1.2、面向对象与面向过程  2. 类定义和使用 2.1、简单认识类 2.2、类的定义格式 2.3、自定义类举例说明 2.3.1、定义一个狗类  2.3.2、定义一个学生类 3、类的实例化 3.1、什么是实例化 3.2、类和对象的说明   Java是一门 纯面向

    2024年02月05日
    浏览(45)
  • 【JavaSE】Java基础语法(十六):抽象类

    当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽 象类! 抽象类和抽象方法必须使用 abstract 修饰 抽象类中不一定有抽

    2024年02月07日
    浏览(51)
  • 【JavaSE】java刷题——基础语法熟练应用

    通过本篇题目,可以让初学Java的小伙伴们更加熟练Java的基础语法~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~  题述:编写程序数一下 1到 100 的所有整数中出现多少个数字9 分两步 取个位上的9  有9 19 29……99 有10个 取十位上的9  有90 91 92 93…

    2024年04月17日
    浏览(45)
  • 【JavaSE】Java基础语法(十二):ArrayList

    集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 ArrayList : 可调整大小的数组实现 是一种特殊的数据类型,泛型。 怎么用呢 ? 在出现E的地方我们使用引用数据类型替换即可 举例:ArrayList, ArrayList 成员方法 : 案例需求

    2024年02月06日
    浏览(58)
  • 【JavaSE】Java基础语法(二十五):异常

    异常的概述 异常就是程序出现了不正常的情况 异常的体系结构 编译时异常 都是Exception类及其子类 必须显示处理,否则程序就会发生错误,无法通过编译 运行时异常 都是RuntimeException类及其子类 无需显示处理,也可以和编译时异常一样处理 图示 如果程序出现了问题,我们

    2024年02月06日
    浏览(44)
  • 【JavaSE】Java基础语法(二十一):内部类

    内部类概念 在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 内部类定义格式 格式举例: 内部类的访问特点 内部类可以直接访问外部类的成员,包括私有 外部类要访问内部类的成员,必须创建对象 示例代码: 成员内部类的定义位置 在类中

    2024年02月07日
    浏览(45)
  • 【JavaSE】Java基础语法(三十一):可变参数

    可变参数介绍 可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了 方法的参数类型已经确定,个数不确定,我们可以使用可变参数 可变参数定义格式 可变参数的注意事项 这里的变量其实是一个数组 如果一个方法有多个参数,包含可变参数,可

    2024年02月08日
    浏览(54)
  • 【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

    List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。 Queue (实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。 Map (⽤ key 来搜索的专家): 使⽤键值对(key-value)存

    2024年02月10日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包