面向对象1

一、面向对象的理解与类的实例化

1.面向对象内容的三条主线:

  • Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类

  • 面向对象的特征:封装、继承、多态、(抽象)

  • 其他关键字的使用:this、super、package、import、static、final、interface、abstract等

2.面向过程编程(POP) vs 面向对象编程(OOP)

2.1 简单的语言描述二者的区别

面向过程:

  • 函数为组织单位。 一种“执行者思维”,适合解决简单问题。扩展能力差、后期维护难度较大。

面向对象:

  • 为组织单位。每种事物都具备自己的属性行为/功能。 种“设计者思维”,适合解决复杂问题。代码扩展性强、可维护性高。

2.2 二者关系:

我们千万不要把面向过程和面向对象对立起来。他们是相辅相成的。面向对象离不开面向过程!

3.面向对象核心概念

面向对象编程的两个核心概念:类(Class)、对象(Object) 谈谈对这两个概念的理解? 类:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。 对象:实际存在的该类事物的每个个体,是具体的,因而也称为实例(instance)

4.类的声明与使用

4.1 体会:设计类,其实就是设计类的成员

class Person{

}

4.2 类的内部成员一、二:

成员之一:属性、成员变量、field(字段、域) 成员之二:(成员)方法、函数、method

4.3 类的实例化

等价描述:类的实例化 <=> 创建类的对象 <=> 创建类的实例 格式:类类型 对象名 = 通过new创建的对象实体 举例: Phone p1 = new Phone(); Scanner scan = new Scanner(System.in); String str = new String();

5.面向对象完成具体功能的操作的三步流程(非常重要)

步骤1:创建类,并设计类的内部成员(属性、方法) 步骤2:创建类的对象。比如:Phone p1 = new Phone(); 步骤3:通过对象,调用其内部声明的属性或方法,完成相关的功能

二、类的实例化剖析、内存解析

1.对象在内存中的分配涉及到的内存结构(理论)

  • 栈(stack): 方法内定义的变量,存储在栈中。

  • 堆(heap) : new 出来的结构(比如:数组实体、对象的实体)。包括对象中的属性

  • 方法区(method area) : 存放类的模板。比如:Person类的模板

2.类中对象的内存解析

2.1 创建类的一个对象

2.2 创建类的多个对象

强调1:创建了Person类的两个对象 Person p1 = new Person(); Person p2 = new Person();

说明:创建类的多个对象时,每个对象在堆空间中有一个对象实体。每个对象实体中保存着一份类的属性。 如果修改某一个对象的某属性值时,不会影响其他对象此属性的值。 p1.age = 10;

p2.age = 20;

p1.age = 30; System.out.println(p2.age);//20

强调2:声明类的两个变量 Person p1 = new Person(); Person p3 = p1;

说明:此时的p1,p3 两个变量指向了堆空间中的同一个对象实体。(或p1,p3保存的地址值相同) 如果通过其中某一个对象变量修改对象的属性时,会影响另一个对象变量此属性的值。

p1.age = 10; p3.age = 20; System.out.println(p1.age);//20

三、类的成员

类的成员之一:属性

1.变量的分类:
  • 角度一:按照数据类型来分:基本数据类型(8种)、引用数据类型(数组、类、接口、枚举、注解、记录)

  • 角度二:按照变量在类中声明的位置的不同:成员变量(或属性)、局部变量(方法内、方法形参、构造器内、构造器形参、代码块内等)

2.属性的几个称谓:成员变量、属性、field(字段、域)
3.区分成员变量 vs 局部变量

3.1 相同点:

变量声明的格式相同:数据类型 变量名 = 变量值 变量都有其有效的作用域。出了作用域,就失效了。 变量必须先声明,后赋值,再使用。

3.2 不同点: ① 类中声明的位置的不同: 属性:声明在类内,方法外的变量 局部变量:声明方法、构造器内部的变量

② 在内存中分配的位置不同(难): 属性:随着对象的创建,存储在堆空间中。 局部变量:存储在栈空间中

③ 生命周期: 属性:随着对象的创建而创建,随着对象的消亡而消亡。 局部变量:随着方法对应的栈帧入栈,局部变量会在栈中分配;随着方法对应的栈帧出栈,局部变量消亡。

④ 作用域: 属性:在整个类的内部都是有效的 局部变量:仅限于声明此局部变量所在的方法(或构造器、代码块)中

⑤ 是否可以有权限修饰符进行修饰:(难) 都有哪些权限修饰符:public、protected、缺省、private。(用于表明所修饰的结构可调用的范围的大小)

属性,是可以使用权限修饰符进行修饰的。而局部变量,不能使用任何权限修饰符进行修饰的。

⑥ 是否有默认值:(重点) 属性:都有默认初始化值 意味着,如果没有给属性进行显式初始化赋值,则会有默认初始化值。

局部变量:都没有默认初始化值。 意味着,在使用局部变量之前,必须要显式的赋值,否则报错。

注意:对于方法的形参而言,在调用方法时,给此形参赋值即可。

类的成员之二:方法(method)

1.使用方法的好处

方法的理解:方法是类或对象行为特征的抽象,用来完成某个功能操作。 方法的好处:实现代码重用,减少冗余,简化代码

2.使用举例
  • Math.random()的random()方法

  • Math.sqrt(x)的sqrt(x)方法

  • System.out.println(x)的println(x)方法

  • new Scanner(System.in).nextInt()的nextInt()方法

  • Arrays类中的binarySearch()方法、sort()方法、equals()方法

3.声明举例

public void eat() public void sleep(int hour) public String interests(String hobby) public int getAge()

4.方法声明的格式 (重要)
权限修饰符 [其它修饰符] 返回值类型 方法名(形参列表) [throws 异常类型]{ //方法头
    //方法体
}
5.具体的方法声明的细节

5.1 权限修饰符 ① Java规定了哪些权限修饰符呢?

有四种:private \ 缺省 \ protected \ public

5.2 返回值类型:描述当调用完此方法时,是否需要返回一个结果。 分类: > 无返回值类型:使用void表示即可。比如:System.out.println(x)的println(x)方法、Arrays的sort() > 有具体的返回值类型:需要指明返回的数据的类型。可以是基本数据类型,也可以引用数据类型 > 需要在方法内部配合使用"return + 返回值类型的变量或常量" 比如:Math.random()、new Scanner(System.in).nextInt()等 [经验]我们在声明方法时,要不要提供返回值类型呢? > 根据方法具体实现的功能来决定。换句话说,具体问题具体分析 > 根据题目要求

5.3 方法名:属于标识符。需要满足标识符的规定和规范。“见名知意”

5.4 形参列表:形参,属于局部变量,且可以声明多个。 格式:(形参类型1 形参1,形参类型2 形参2,...) 分类:无形参列表 、 有形参列表 > 无形参列表:不能省略一对()。比如:Math.random()、new Scanner(System.in).nextInt() > 有形参列表:根据方法调用时,需要的不确定的变量的类型和个数,确定形参的类型和个数。 比如:Arrays类中的binarySearch()方法、sort()方法、equals()方法

[经验]我们在声明方法时,是否需要形参列表呢? > 根据方法具体实现的功能来决定。换句话说,具体问题具体分析 > 根据题目要求

5.5 方法体: 当我们调用一个方法时,真正执行的代码。体现了此方法的功能。

6.注意点

Java里的方法不能独立存在,所有的方法必须定义在类里。 Java中的方法不调用,不执行。每调用一次,就执行一次。 方法内可以调用本类中的(其它)方法或属性 方法内不能定义方法。

7.关键字:return

7.1 return的作用

  • 作用1:结束一个方法

  • 作用2:结束一个方法的同时,可以返回数据给方法的调用者 (方法声明中如果有返回值类型,则方法内需要搭配return使用)

7.2 使用注意点: return后面不能声明执行语句。

8.形参实参:
  • 形参:方法在声明时,一对()内声明的一个或多个形式参数,简称为形参。

  • 实参:方法在被调用时,实际传递给形参的变量或常量,就称为实际参数,简称实参。

四、对象数组

1.何为对象数组?如何理解? 数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用类型中的类时,我们称为对象数组。

2.举例: String[],Person[],Student[],Customer[]等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值