您的当前位置:首页正文

《嗨 Java》第三章:类和对象

2024-11-30 来源:个人技术集锦

类和对象

什么是面向对象?

面向对象其实就是只关注类和方法的形式,不会关注方法的实现和类里面有什么,只关注类和方法的交互。

**例子:**比如写一个送快递软件,在这里面我们可以把商家、快递和客户员当成一个类,我们只关注客户下单的行为、商家发货的行为和快递员运送的行为,只会关注它们三个之间的交互不会看具体如何送、如何下单和如何发货的过程,这就是面向对象快递员是一个对象、客户还有商家也是一个对象。

什么是类?

类是一种统称叫法,比如人我们知道有很多个不同的人但是他们本身都是人这个类,所以类是一种类型或复杂的事物等等的统称。

具体的一个人就是通过一个类实列化出来的对象,而这个实列化出来的对象就是一个具体的人。

创建类的方法

我们可以通过class关键字来创建一个类。

使用方法: class 类名 {类成员};

class Date {
    //类成员变量
    private int _day;
    private int _month;
    private int _year;
    
    //类成员方法
    public int GetDay() {
        return _day;
    }
}

静态成员

静态成员方法

静态成员方法通过static修饰来定义,静态方法没有this且只能调用静态方法。

静态方法无法在类里面创建静态变量,我们可以发现main函数本身也是一个静态方法,其实main函数可以不是静态的方法,但是Java的JVM中规定main方法必须定义为静态的否则无法调用。

静态成员变量

静态成员变量属于类不属于某个方法同时不过实列化多少个对象都只有一个静态成员变量,每个对象能看到的静态成员都是同一个。

普通成员

普通成员方法

普通成员方法能调用静态成员方法,同时也能定义静态变量,因为普通成员方法在调用静态方法时属于一种“权限的缩小”。

普通成员变量

普通成员变量属于具体的某个对象,当一个对象实列化出来时都有一个属于自己的普通成员变量,每个对象的普通成员变量只能看到自己看不到其它对象的同时不能共用。

默认成员方法

默认构造方法

默认构造方法的定义是:

默认构造方法有多种,可以通过方法重载来实现不同效果的构造方法。

默认构造方法即使没写编译器也会自动生成一个不过编译器自动生成的默认构造方法什么都不会做,默认构造方法一般使用来初始化成员变量的。

匿名对象

有时候我们想用该类的某个方法用一次就不用了,如果直接实列化一个对象来使用,这样就显得有点麻烦了所以Java当中支持一个叫匿名对象的语法,匿名对象就是来满足此类需求的,匿名对象的生命周期是在当前行一但执行完当前行就会自动销毁。

匿名对象的定义: new 类名();

例子:

class Date {
    //类成员变量
    private int _day;
    private int _month;
    private int _year;
    
    //类成员方法
    public int GetDay() {
        return _day;
    }
}

public static void main(String[] argv) {
    new Date().GetDay();//匿名对象
}

封装

封装就是指开放公有的方法,一些数据不开放出来外面的人看不到就不会对数据造成安全隐患。

C语言中没有封装一个结构体的数据可以在任意地方被更改,这就使得数据很不安全任意出错。

而Java中提供了publicprivate这两个关键字来保证数据的安全,在Java当中类中的成员变量都不会给外部随意访问的所以绝大部分的成员变量都会被private修饰,而private的作用是私有。

当一个成员变量是一个私有成员那么对外部是不可见的,子要外部不可见就不可以随意修改该成员变量的值,从而保证数据的安全。

public是公有的意思,当一个成员变量或成员方法被此关键字修饰类外就可以调用这个方法或成员。

一般方法才会定义成公有的,这样Java就完成了封装,你想访问一些数据得通过公有的方法才能访问这样就可以保证数据的安全的同时也可以达到访问和修改的目的。

代码块

静态代码块

静态代码块是类里面的一种代码块,它每次都会执行一次且是在构造函数之前,从此再也不会执行即使没有试实例化对象也会执行,只要你使用了类里面的任意一种东西就会自动执行。

静态代码块的定义
class Date{
    static {
        System.out.println("静态代码块);
    }
}

实列代码块

实列化代码块和静态代码块类似不过有静态代码块存在的时候会优先调用静态的代码块。

顺序为:静态代码块->实力代码块->构造方法

实列代码块是当有一个对象实列化之后才会执行,所以有多少个实列化对象就会有执行多次实列代码块的内容。

实列代码块的定义
class Date {
    {
        System.out.println("实列代码块")
    }
}
显示全文