当前位置: 首页 > article >正文

Java:类和对象

今天在我们了解类之前,我们需要了解什么是对象和面向对象。

一.对象

对象其实是一个真实存在的实体,在Java中,一切事物皆是对象,所以Java是一个面向对象的语言。

二.面向对象

面向对象其实是将一个过程拆分成不同对象,让对象和对象之间相互协作,完成这件事情。

比如我们说一个例子

我们洗衣服的时候,我们需要接水->放入衣服->放洗衣液->搓衣服->过清水->拧干。

这是我们洗衣服的过程,但是在现在其实我们可以利用洗衣机来洗衣服,所以我们这时候可以将洗衣服的过程看做人,衣服,洗衣液,洗衣机,四个对象的协作,人将衣服和洗衣液放入洗衣机中,至于洗衣机是如何洗衣服的我们不需要关系,洗衣机会自己会完成,这就是一个面向对象的过程。

 三.类定义和使用

1.什么是类

类是用来对一个对象来进行描述的,描述对象的属性和功能,比如猫的名字,颜色和吃饭的行为。

2.类的定义格式

class ClassName{
        field;//字段(属性)或成员变量;
        method;//行为或成员方法;
    }

我们以猫类为例:

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

注意事项:

  • 类名注意采用大驼峰定义
  • 此处写的方法不带 static 关键字
  • 一般一个文件定义一个类
  • public修饰的类要与文件同名

 四.类的实例化

1.什么是类的实例化

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

比如我们实例化一个猫类 

class Cat{
    public String name;
    public String color;

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

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.name = "小猫";
        cat.eat();

    }
}

我们对他进行调用,将名字赋为“小猫”,同时调用Cat类中的eat()方法

408ebfcec9a346a3ba22bad3bb7477be.png

注意事项 

  • new 关键字用于创建一个对象的实例.     类名 对象名=new 类名()
  • 使用 . 来访问对象中的属性和方法   对象名.属性或方法
  • 同一个类可以创建多个实例.

五.类和对象的说明

  • 类只是一个模型,用来对一个实体进行描述,限定了类有哪些成员
  • 类是一种自定义的类型,可以用来定义变量.
  • 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

六. this引用

1.什么是this引用

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

2.为什么要有this引用

我们先来看下面图片中代码的过程

350d2dd13ea1469dab4191ba29c3b29f.png

我们发现,我们将值传给了Cat类中的setCat方法中的n和c,并且成功为name和color赋值,并且正确打印,但是这时后如果我们将n和c变成name和color会发生什么呢?那么我们来看下面这张图片

93e15f1bbae3470da4fb3fb8f952d2de.png

我们发现我们最后所打印的值的名字为null,这是为什么呢,其实我已经在图中画出来了,这时因为,我们传入的值,并没有赋给我们的成员变量,而是赋给了自己,所以当我们进行调用并打印的时候,我们的成语变量其实,并没有值,这就导致了我们打印了null。那么我们该如何防止这种情况的发生呢,这就需要用到我们的this关键字了。让我们看下面这张图片

a5bb2cd54f964a18879b0f1f24eb7da7.png

我们发现,我们并没有改变我们变量的名字,只是在要赋值的变量前加上了(this.),这时我们发现我们成功的打印了正确的值,这就是this关键字的作用它所引用的是调用成员方法的对象。简单来说就this调用的是成语变量

 3.this引用的特性

  • this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  • this只能在"成员方法"中使用
  • 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
  • 可以通过this访问当前对象的非静态成员方法,不可以访问静态成员方法

29b31dd7a92049bf8ce6e0f5c1c8d39e.png

七.对象的构造及初始化

1.构造方法

什么是构造方法

构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。

为什么要使用构造方法 

 

我们知道在java类内部定义一个局部变量,要进行初始化。

而成员变量变量或方法会有自己的默认值。那我每实例化一个对象,就要进行初始化,我们应该怎么进行初始化?

所以我们就要用到构造方法,构造方法的作用就是初始化对象当中的成员 

 构造方法定义的格式 

修饰符 方法名称(参数类型形参){

           方法体代码;

}

例如

public Cat (String name , String color){

      this.name = name;

      this.color = color;

}

注意:

  • 构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

特性 

1. 名字必须与类名相同

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

3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)

f0a98a173c73449ba51b49310a0b507a.png

4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法

cfe0723889564809b5b542be6d2f10a6.png

5.如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。

cbe749f0de714facbcc58379ef03f62a.png

6.可以通过this()调用其他构造方法,但不要形成环,两个构造方法相互调用; 

f200eb3fa2a242529813a47e468b19ff.png

我们发现,我们对this进行传值,成功的给了带参的构造方法,并且我们其实还有一个小的知识点就是,一旦我们加载了对象,就会执行构造方法,所以我们发现我们先打印了”Cat的带参构造方法”,然后再打印方法。

注意:我们不能形成闭环

1f95e9c36353453a90100f3aa929d756.png

7.this调用当前对象的其他构造方法的时候一定要放在第一排。 

 如果我们不放在第一排就会报错5c2a7f990e214cee9a7d221c2a40af7e.png

 放在第一排就没有任何问题a5cbf5c84f2b4ae2a9cb8430d1a3ed9b.png

 2.默认初始化

我们知道在Java中变量必须进行初始化,才能使用,同样的我们对象也需要进行初始化,例如我们上面例子中的setCat这个方法就进行了初始化

0531997dec5948a8bf82fc6c369389b3.png

但是我们发现如果我们没有进行初始化,我们也可以正常运行 ,这是为什么呢,这其实是因为声明成员变量中,没有赋值的时候,编译器会默认给成员变量一个值。

3214a28c94b646b698e01ec52ee4d2d2.png

 我们发现我们所打印的值是null,而这个null就是编译器默认给的一个值,当然不同的类型有不同的值

  • byte -- 0
  • short -- 0
  • int   -- 0
  • long -- 0L
  • char -- '\u0000'
  • flost -- 0.0f
  • double -- 0.0
  • String -- null
  • boolean -- false
  • reference(引用类型) -- null

 3.就地初始化

在成员变量声明或成员方法中,直接初始化 。

5ad924942a9943088dd079cf6ff84b02.png

 好了今天的分享就到这里了,我们下一篇见!

 


http://www.kler.cn/news/353788.html

相关文章:

  • Mysql—高可用集群MHA
  • C++设计模式——装饰器模式
  • 2024年10款超好用的图纸加密软件推荐|企业图纸加密必备!
  • IntelliJ IDEA如何安装插件
  • 胤娲科技:AI短视频——创意无界,即梦启航
  • C++笔记之静态多态和动态多态
  • Java日常开发小结-01
  • 【C语言】占位符集合
  • PHP对Json数据格式的理解
  • 1002-补打卡-leetcode打卡,有序数组去除重复出现超过2次的元素
  • 《vue leaflet学习实践笔记》
  • openpose二维骨架搭建介绍及代码撰写详解(总结4)
  • Linux下内核空间和用户空间内存映射图详解
  • CesiumJS 案例 P3:清空默认图层、添加纯色图层、创建圆点、创建矩形
  • C++之默认拷贝函数
  • 护眼台灯哪个牌子最好?当心劣质护眼灯三大缺陷
  • [Git] Git下载及使用 从入门到精通 详解(附下载链接)
  • React组件传值方法
  • gbase8s的事务、并发控制、锁机制、隔离级别
  • MD5 在数据库中的应用与安全性分析