Java类和对象(七千字详解!!!带你彻底理解类和对象)(上)

简介: Java类和对象(七千字详解!!!带你彻底理解类和对象)

一、面向对象的初步认知

1、什么是面向对象

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

 

2、面向对象和面向过程

(1)传统洗衣服的过程

传统洗衣服注重的是洗衣服的过程,少了一个环节可能都不行,而且不同衣服洗的方式,时间长度,拧干方式都不同,处理起来就比较麻烦。如果将来要洗鞋子,那就是另一种放方式。按照该种方式来写代码,将来扩展或者维护起来会比较麻烦。

(2)现代洗衣服过程

总共有四个对象:人,衣服,洗衣服,洗衣机

整个洗衣服的过程就是人把衣服丢进洗衣机,加入洗衣服,启动洗衣机,洗衣机就会完成洗衣服的过程并且甩干。

整个过程主要是:人,衣服,洗衣粉,洗衣机四个对象交互完成的,人不需要关心洗衣机是如何洗衣服,如何甩干

以面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。

注意:

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

 

二、类的定义和使用

1、类的定义格式

class类名 {

       类的属性(成员变量);

       类的行为(成员方法);

}

类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法

 

例:

class WashMachine {
        //属性
        public String brand;//品牌
        public String type;//型号
        public double weight;//重量
        //行为
        public void washClothes() {
        //洗衣服
            System.out.println("洗衣功能");
        }
    }

类名注意采用大驼峰定义

注意事项:

1. 一般一个文件当中只定义一个类
2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
3. public修饰的类必须要和文件名相同
4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

 

三、类的实例化

1、什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog类和Student类。它们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。

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

例:

class PetDog {
    public String name;//姓名
    public String color;//颜色
    public void wag() {
        System.out.println("摇尾巴");
    }
    public void braks() {
        System.out.println("汪汪汪");
    }
    public void print() {
        System.out.println(this.name);
        System.out.println(this.color);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        PetDog petdog1 = new PetDog();
        PetDog petdog2 = new PetDog();
        petdog1.name = "阿黄";
        petdog1.color = "黄色";
        petdog1.wag();
        petdog1.braks();
        petdog1.print();
        petdog2.name = "阿黑";
        petdog2.color = "黑色";
        petdog2.wag();
        petdog2.braks();
        petdog2.print();
    }
}

输出结果:

注意事项

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

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

同一个类可以创建对个实例

 

2、类和对象说明

1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.

2. 类是一种自定义的类型,可以用来定义变量.

3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

四、this的使用

1、为什么要使用this

先看下列例子:

写一个日期的类

输出结果

如果我们把setDate的形参名改成和和时间成员变量一样,输出结果会变变成什么?

变成全0了

原因:

当我们把形参名改成和成员变量名一样时,这里的形参名的值和我们所期望的值就有分歧

一个是传参过来的实参,一个是成员变量,但是,在类当中,我们遵循局部变量优先的原则,这里的参数就代表的是成员变量,在下面赋值时,形参自己赋值给自己,而int类型没有赋值,其默认值是0,所以会打印全0.

解决方法:

如图:

输出结果:

2、什么是this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

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

3、this引用的特性

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

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

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

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

在代码层面来简单演示--->注意:下图右侧中的Date类也是可以通过编译的

五、对象的构造及初始化

1、如何初始化对象

通过前面知识点的学习知道,在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。

要让上述代码通过编译,非常简单,只需在正式使用a之前,给a设置一个初始值即可。

如果是对象:

需要调用之前写的SetDate方法才可以将具体的日期设置到对象中。通过上述例子发现两个问题:

1. 每次对象创建好后调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化?

2. 局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?

 

2、构造方法

(1)、概念

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

(2)特性

1. 名字必须与类名相同

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

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

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

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

上述Date类中,没有定义任何构造方法,编译器会默认生成一个不带参数的构造方法。

 

注意:一旦用户定义,编译器则不再生成。(救急不救穷)

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

注意:

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

②、不能形成环

7. 绝大多数情况下使用public来修饰,特殊场景下会被private修饰

相关文章
|
2月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
331 0
|
3月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
257 101
|
3月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
297 100
|
4月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
442 143
|
2月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
112 4
|
2月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
196 5
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
189 1
|
2月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
239 1
|
2月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
195 0
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
213 1