20200924 王维

学习总结

面向对象

1 面向过程与面向对象

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向对象是以功能来划分问题,面向过程是以步骤划分问题。

面向对象三大特征:封装、继承、多态

2 对象

万物皆对象,在面向对象的世界中认为万事万物都是对象。

从两个方向去认识对象:对象的状态 对象的行为

对象的简单理解就是真实存在的具体的个体。

3 类

具有相同状态和相同的行为的一组对象的集合

在编程的世界中,用属性表示对象的状态,用方法表示对象的行为。要

要创建对象必须先定义类,通过类实例化出对象。

类的简单理解就是代表多个对象的统称,而不是具体的个体

类是对象的模板,对象是类的具体实例。类给出他的全部对象的一个统一的定义,而他的每个对象则是符合这种定义的一个实例,因此类和对象的关系就是抽象和具体的关系。类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。

3.1 定义类

面向对象设计的过程就是抽象类的过程,也是设计类的过程,步骤如下:

①发现类,类定义了对象将会拥有的属性和方法

②发现类的属性,对象所拥有的的特性在类中的表现称为类的属性

③发现类的方法,对象执行的操作称为类的方法

[访问修饰符] class 类名{ //命名使用帕斯卡命名法,因此类名首字母需要大写

​ 成员变量声明;//属性

​ [修饰符] 数据类型 属性名;

​ 成员方法声明;//行为

​ [修饰符] 返回值类型 方法名([参数列表]){ //方法头

​ //方法体

​ }

}

3.2 创建对象

类名 对象名 = new 类名();

new是关键字,称为实例化

左边的 类名 是对象的数据类型

右边的 类名() 称为类的构造方法

Person p = new Person();

p -> 对象的指针

new Person(); ->对象的实例

一个对象是由两部分构成,一是对象的指针(也称为对象的引用),二是对象的实例

声明创建对象的整个过程就是定义了一个变量,变量名就是对象名,变量的类型就是被实例化的类,值是类实例化的对象的引用。

3.3 使用对象

在java中,要引用对象的属性和方法,需要使用成员运算度"."

对象名.属性 //引用对象的属性

对象名.方法名() //引用对象的方法

4 方法

方法是完成特定功能的、相对独立的程序段。

方法一旦定义,就可以在不同的程序段中多次调用,故方法可以增强程序结构的清晰度,提高编程效率

方法的设计要遵循功能单一原则,一个方法只干一件事

4.1 方法的声明

[修饰符] 返回值类型 方法名([参数列表]){ //方法头

​ //方法体

​ }

方法不能嵌套,不能在一个方法中声明另外一个方法。

方法不调用是不会执行的

参数列表表示要执行/调用此方法需不需要传递参数,没有参数列表的叫做无参方法。多个参数之 间用 , 隔开,参数要声明类型。方法的参数叫做形参,调用方法传递的对应的参数叫做实参。

在定义方法时,不确定的数据要设计为方法参数,不变化的设计在方法体中。

4.2 方法的调用

调用方法,即执行该方法。发出调用的方法称为主调方法,被调用的方法叫做被调方法。被调方法通过return语句将数据返回给主调方法,一个方法只能返回一个数据给主调方法,且返回值必须与方法声明的返回值类型一致,如果没有返回值,就使用void关键字声明。

方法调用时需要注意,调用的方法如果需要传递参数,就需要在调用时传入相对应的参数

在传参过程中,基本数据类型传递的是值(值传递),引用数据类型传递的是地址/引用(值传 递,只不过传递的是地址)

Java 中只有值传递

4.3 可变参

可变参表示,参数列表可以为空,也可以是任 意个当前数据类型的数据。在方法的参数列表中声明 参数类型 + ... + 变量名 。

在方法体中,可变参的使用和数组的使用是一样的。所以,不能同时存在两个同名方法且参数列表一个是数组,一个是可变参的类。 可变参只能出现在参数列表的最后一位,所以不能在一个方法的参数列表中出现多个可变参。

5 方法的重载

一个类中允许出现,方法名相同,参数个数、参数类型、顺序不同(参数列表不一样)的方法存在。这就叫 做方法的重载。方法的重载与返回值类型无关

在存在方法重载的类中,调用哪个方法由参数列表决定。如果出现可变参与参数列表都符合要求 的情况,调用精度最高的方法(不是可变参的方法)

6 实例变量与实例方法

类的实例(也叫做no-static)包括属性和方法,也称为实例变量和实例方法

实例变量,是声明在方法之外,类里面的变量。

实例变量作用域 实例变量的作用域是整个类,在这个类的所有实例方法中都可以访问。实例变量在定义的时候可以不赋初始值,因为实例变量在实例化对象后会有默认值,默认值根据实例变量的类型决定

实例变量与局部变量的区别:①作用域不同②有无默认值③在同一个方法中不允许出现同名的局部变量,不同的方法中可以有同名的局部变量④局部变量可以和实例变量相同,使用时优先使用局部变量

实例方法,因为非本类/本类非实例方法中使用时需要使用类的对象(实例)才能调用

实例方法在同一个类中可以相互调用

7 构造方法

[访问修饰符] 方法名 ([参数列表]){ //方法头

​ //方法体

}

构造方法的作用是为实例变量的初始化

构造方法是一个特殊的方法,不属于成员方法

构造方法没有返回值,也不是void

构造方法的方法名要和类名相同,包括大小写

构造方法分为有参构造和无参构造(默认构造),他们之间是重载关系

当开发人员没有编写自定义的构造方法时,java会自动添加默认的构造方法(public 无参构造),默认构造方法没有参数,默认构造方法为所有成员变量赋默认值。如果显示的声明了构造方法(不管是否有参数),java就不会再自动添加无参构造。

8 static方法

使用static修饰的方法叫做static(静态)方法,他属于类,所以也叫做类方法

对于 static 方法的调用,我们可以使用 类名.方法名 直接调用,也可以使用 对象.方法名 调用。虽然对于 static 方法而言,两种调用方式都可以,但是推荐使用第一种方式也就是直 接使用类名来调用,因为它是属于类的。

static方法的生命周期 static 方法在类被加载的时候就加载了(并不意味着要执行),而且之加载一次。 实例方法在对象初始化的时候加载。

实例方法和static方法的区别

同:都属于成员方法

异:①由于 static 方法比实例方法的声明周期长,所以在一个类中实例方法可以直接调用 static 方 法。而 static 方法不能直接调用实例方法。 ②static 方法中不能够使用实例变量,而实例方法可以。 ③static 方法中不能够使用 this

9 this

在构造方法和实例方法中,可以使用 this 关键字。哪个对象的 this 就代表当前对象。也就是说 谁调用就是谁 。

this 其实是一个引用,对自身的一个引用。所以 this 能调用实例变量、实例方法、构造方法、类变量、类方法。不能调用局部变量。

不推荐使用 this 来调用类变量或类方法,因为它是属于类的。在本类中可以直接调用类变量和类方法,在其他类中使用 类名.类变量/类方法 调用。

10 初始化

10.1实例初始化

在类中会存在一个或多个 {} 代码块,它的作用是初始化类的实例变量。它里面可以写多行代码,也可以调用方法。如果一个类中有多个实例初始化块,执行顺序是先声明先执行。

public class Demo{
    // 实例初始化
    {
    // 代码块
    }
}

10.2 static初始化

static 初始化和实例初始化类似,作用是初始化 static 变量。只在类第一次加载的时候执行。

public class Demo{
    // static初始化
    static{
        // 代码块
    }
}

注意:类的成员不包括: 1. 构造方法 2. 实例初始化 3. static 初始化

11 实例化对象执行顺序

①static初始化 ②实例初始化 ③构造方法

心得体会

今天学习了java的核心内容——类和对象,关于这一块知识可能学习过,或者其他语言有相类似的东西,但是我们要从原来知识的习惯中脱离出来,JavaScript中没有类变量和类属性的概念,没有定义类的过程,他是通过构造函数或者其他的方式实例化出的对象,像这样的地方还很多,学习中需要多多区别,不要把两种语言弄混了。

对于对象声明和创建的过程,在内存中的是如何内存分配和完成的还有点模糊,需要再学习一下,还有对象的指针的各种变换。

标签

评论

this is is footer