类与对象基本介绍

本文详细介绍了Java中的面向对象编程概念,包括类的定义、成员变量和方法、实例化对象、构造方法、this关键字的使用。同时,讲解了封装的概念,包括访问限定修饰符的作用以及静态成员变量和方法的特点。通过洗衣机类的例子,深入浅出地阐述了面向对象编程的基本思想和实践应用。
摘要由CSDN通过智能技术生成

引入

Java是面向对象的一种语言,面向对象是一种解决问题的思路。举个例子,对于洗衣服而言,如果你是采取面向过程的思想来解决问题你就会这样解决:用洗衣液泡衣服–>搓洗衣服–>涮洗衣服洗去泡沫–>搭衣服晾晒。然后考虑需要的东西就是洗衣液,衣服,水,衣架等。如果你是采取面向过程的思想解决问题你就会这样解决:洗衣服需要洗衣机、洗衣液、衣架等,然后在考虑这些对象需要怎样操作才能完成。换句话说面向过程的思路是算法是第一位的,数据结构是第二位的,面向对象的思路是数据结构是第一位的,算法是第二位的。
运用面向对象的思路解决问题我们需要抽象出有哪些类的对象,并对其进行定义和使用。也因此我们需要类这个东西。类与其他的int、double、String类似,都是对一类事物的抽象概括,只不过这些是系统自带的,而类需要我们自己去定义。

类的定义与基本组成

1.类的定义

类( class) 是构造对象的模板或蓝图。

2.类的基本组成

类的作用是对对象进行描述和使用,那既然要描述那肯定得有对象的属性,既然要使用那必须得有操作对象的行为。因此基本组成得有两样东西,那就是属性和行为,而这属性和行为在类中又叫做成员变量和成员方法。

3.类的定义格式

class ClassName{
    //成员变量
    //成员方法
}

class为定义类的关键字,ClassName为类名,类名一般采取首字母大写的方式,多个单词组成的则每个单词首字母大写。花括号内为类的主题部分。下面定义一个洗衣机的类。想大致描述洗衣机要有体积、类型、颜色等,行为有洗涤、脱水等。那下面就可以定义一个简单的洗衣机类了

class WashMachine{
    //属性
    int volume;
    String type;
    String colour;

    //行为
    public void washing(){
        System.out.println("洗涤");
        //...
    }

    public void dehydration(){
        System.out.println("脱水");
        //...
    }
}

类的实例化

1.什么是类的实例化

前面说了,类是构造对象的模板,如果已经定义好一个类了,那么对象的模板也就定义好了,那要想使用对象就需要根据这个模板构造具体的对象。这就像其他的类型int、double一样。

2.如何进行类的实例化

//类的实例化
WashMachine machine1 = new WashMachine();

这就构造了一个具体的洗衣机类的对象machine1。new关键字的作用是创建一个具体的实例对象,而后面的WashMachine()是编译器自带的构造方法(也叫作构造器),这个方法没有参数,作用是为对象的属性进行默认初始化,数字类的如int、double等被默认初始化为0,字符型被默认初始化为\u0000,引用数据类型被默认初始化为null,boolean类型被默认初始化为false。
图源自比特就业课

this关键字

此关键字的作用主要有两个。

1.

第一个是在类的非静态方法中使用(静态方法就是用static修饰的方法),用于引用当前对象。具体如下:

class WashMachine{
    //属性
    int volume;
    String type;
    String colour;

    //行为
    public void washing(){
        System.out.println("洗涤");
        //在非静态方法中使用,代表当前对象,操作符.用于访问对象的成员变量或方法
        this.volume = 1;//用this引用当前对象去访问当前对象的成员变量
        this.dehydration();//用this引用当前对象去访问当前对象的成员方法
        //...
    }

    public  void dehydration(){
        System.out.println("脱水");
        //...
    }
    
    public static void func(){
        this.volume = 1;//在静态方法中使用this会报错
    }
}
2.

this的第二个作用是引用当前类的其他构造方法,在此之前,我们先介绍一下什么是构造方法。

构造方法

首先构造方法它是一种方法,它的作用是初始化成员变量,它具有一些特性:
1.名字必须与类名相同
2.无返回值类型,void也不行。
3.创建对象时由编译器自动调用。
4.可以形成重载
5.如果不写构造方法,编译器会调用默认构造方法,如果写了构造方法,则编译器不会调用默认构造方法,必须调用自己写的构造方法。
下面为WashMachine类写构造方法:

class WashMachine{
    //属性
    int volume;
    String type;
    String colour;

    //行为
    //构造方法1
    public WashMachine() {
        this(3, "双桶", "black");//this的第二种作用,引用其他的构造方法
    }
    //构造方法2
    public WashMachine(int volume, String type, String colour) {
        this.volume = volume;
        this.type = type;
        this.colour = colour;
    }

    public void washing(){
        System.out.println("洗涤");
        this.volume = 1;
        this.dehydration();
        //...
    }

    public void dehydration(){
        System.out.println("脱水");
        //...
    }

}
public class demon1 {
    public static void main(String[] args) {
        WashMachine mc1 = new WashMachine(2, "双桶", "blue");
        WashMachine mc2 = new WashMachine();
    }
}

注:此例中构造方法有两个构成了重载,由于已经有了自己写的构造方法,所以就没有了编译器的默认构造方法,而构造方法1就是模拟编译器的默认构造方法,当实例化对象不传参数时,编译器就会调用这个构造方法1,**在构造方法1中this()的作用是引用当前类中的其他构造方法,而具体引用那个构造方法则是根据实参的顺序、个数和类型确定的。并且this()语句必须放在构造方法1的开头才行。**这样的话我们就能有两种实例化对象的方式了,一种是不传参采取自己的默认构造方法1,默认值可以由自己来定。另一种是采取传参的方式用所传参数初始化实例化对象。

封装

1. 什么是封装

封装是面向对象程序三大特性——封装、继承、多态之一。封装是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。在现实中其实有很多封装的例子,比如说计算机,计算机仅仅只给我们usb接口、鼠标、键盘、显示器等让我们与计算机进行交互,而对于计算机内部的cpu、显卡、内存以及各种电子元件和线路则被封装了起来。

2. 如何实现封装

(1)包

包就像是我们平常的文件夹一样,目的是为了方便管理java Class文件。下面是创建包的步骤
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用小数点可以分级创建包,这里创建了三个级别的包,每个包都可以创建多个java Class文件,下面我们在c包里创建一个洗衣机类的java Class文件,在b包中创建一个demon1.java文件。
在这里插入图片描述
这样我们就可以在文件中定义类并根据访问限定修饰符来限定不同包和同一包的文件的类的访问权限了。此外,如果文件在自定义包中,则应在代码开头用package语句声明出次文件的包路径,否则编译器将无法辨别此文件所在包的路径是什么。
在这里插入图片描述

(2)访问限定修饰符

访问限定修饰符是通过限制变量、方法、类的访问权限从而实现封装。访问限制修饰符有三个,分别为private、protected、public。如下图所示,其中default是默认权限,就是什么访问限定修饰符都不加的访问权限。
源自比特就业课
通过这些修饰符我们可以让限制类、方法、变量的访问权限从而实现封装。在访问权限允许的情况下如果想使用其他文件中的类则需要用import关键字在此文件开头导入类所在的包,

在这里插入图片描述

demon1文件要想使用WashMachine的类必须在开头导入包路径,或者不导入包在使用时加上包路径。
在这里插入图片描述

静态成员

前面已经介绍了类是构造对象的模板或蓝图,实例化的对象会具有不同的属性,正如前面的例子,洗衣机有各自不同的型号、体积、容量等,但是如果构造的对象是同一个品牌的,那么它们就具有了一个相同的属性——品牌。这时如果我们可以加一个表示品牌的成员变量,但是我们需要它是属于类的,而不是属于某个具体的对象的,因为这是所以对象共同的。这时我们就需要一种由static修饰的变量,它属于类,而不属于具体的对象,我们称之为静态成员变量。同样的,也有属于类的方法,要用static修饰,我们称之为静态成员方法。

1.static修饰的变量:

(1) 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
(2) 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
(3) 类变量存储在方法区当中,并没有存储在具体的对象中
源自比特就业课
(4) 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
(5) 如果想要修改静态成员变量的值最好通过静态成员方法执行

2.static修饰的方法

(1) 不属于某个具体的对象,是类方法
(2) 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
(3) 不能在静态方法中直接访问任何非静态成员变量,如果访问需在静态方法中实例化对象,再利用对象调用非静态方法。

3.静态/非静态的方法、变量以及类、对象之间的访问权限

在这里插入图片描述
总之,要想访问非静态的必须要实例化对象才行,因为非静态的变量和方法都是建立在具体的对象之上的。而要想访问静态的既可直接通过类访问也可以间接通过对象访问,但更推荐用类访问。

注:

在此声明,本文一部分图片源自比特就业课。文章若有漏洞还请广大读者指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值