【Java学习笔记——面向对象(上)】

三条主线

  1. Java类及类的成员:属性、方法、构造器;代码块、内部类
  2. 面向对象的三大特征:封装性、继承性、多态性、(抽象性)
  3. 其他关键字:this、super、static、final、abstract、interface、package、import

面向过程(POP):强调的是功能行为。以函数为最小单位,考虑怎么做。
面向对象(OOP):将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做,它更强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、多态、聚合等。

思想概述

  • 程序员从面向过程的执行者转化成了面向对象的指挥者。
  • 面向对象分析方法分析问题的思路和步骤:
  1. 根据问题需要,选择问题所针对的现实世界中的实体;
  2. 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类;
  3. 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构;
  4. 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

两个要素:类和对象

类class:是对一类事物的描述,是抽象的、概念上的定义;
对象object:是实际存在的该类事物的每个个体,也成为实例。
面向对象程序设计的重点是类的设计。
设计类,就是设计类的成员。
属性:对应类中的成员变量;属性 = 成员变量 = field = 域、字段
行为:对应类中的成员方法。方法 = 成员方法 = 函数 = method
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static)

对象的内存解析

在这里插入图片描述

属性(成员变量)VS 局部变量

  1. 相同点:
    定义变量的格式;
    先声明,后使用;
    都有其对应的作用域。
  2. 不同点:
  • 在类中声明的位置不同
    属性:直接定义在类的一对{}内
    局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。
  • 权限修饰符不同
    属性:可以在声明属性时,使用权限修饰符指明其权限(常用的权限修饰符:private、public、缺省、protected)
  • 默认初始化值的情况
    属性:根据其类型,都有默认的初始化值;
    局部变量:没有初始化值,在调用之前一定要显性赋值。
  • 在内存中加载的位置
    属性:加载到堆空间(非static)
    局部变量:栈空间

类中方法的声明和使用

方法:描述类应该具有的功能。
public viod 方法名()——viod:表示没有返回值的
public 数据类型 方法名()——数据类型表示该方法返回的数据类型

  • 方法声明:权限修饰符 返回值类型 方法名(形参列表){方法体}

权限修饰符

private、public、缺省、protected

返回值类型

  • 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return来返回指定类型的变量或常量。
  • 如果没有返回值,使用viod来表示,就不用使用return了。或者“return;”
  • 形参列表:方法可以声明0、1、…或多个形参。格式:数据类型1 形参1,数据类型2 形参2,…

return关键字的使用

  • 使用范围:方法体中;
  • 作用:结束方法、针对有返回值的方法,返回所要的数据。
  • return后面不能有执行语句。

方法的使用

  • 方法的使用中,可以调用当前类的属性和方法。
  • 递归:方法A中又调用方法A
  • 方法中不能定义方法

方法的重载overload

  • 在同一个类中,允许存在一个以上同名方法,只要它们的参数个数或者参数类型不同即可。
  • 特点:与返回值类型无关,只看参数列表,且参数列表必须不同(参数个数或者参数类型),调用时,根据方法参数数列表的不同来区别。
  • 判断是否重载:跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系。
  • 在通过对象调用方法时,如何确定某一个指定的方法:方法名–>参数列表。

可变形参的方法

Varargs机制:允许直接定义能和多个实参相匹配的形参。

  • 格式:数据类型 … 变量名,如:public void show(String … strs){};
  • 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载;
  • 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载;
  • 必须声明在形参列表末尾;
  • 可变个数形参在方法形参中,最多只有一个。

方法参数的值传机制

  • Java中方法的参数传递方式只有一种:值传递。即将实际参数值的副本传入方法内,而参数本身不受影响。
  • 参数是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参;
  • 参数是引用数据类型:将实参基本数据类型变量的“地址值”传递给形参;

递归方法recursion

  • 一个方法体内调用自身
  • 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无需循环控制。
  • 递归一定要向已知反向递归,否则这种递归就变成了无穷递归,类似于死循环。

匿名对象

创建的对象,没有显示的赋给一个变量名
匿名对象只能调用一次。

封装与隐藏

  • 封装性的体现:将类的属性私有化(private),同时提供公共的(public)方法来获取(getXxx)和设置(setXxx);不对外暴露的私有的方法;单例模式…
  • 权限修饰符:封装性的体现,需要权限修饰符来配合
  1. java规定的四种权限:private、缺省、protected、public

在这里插入图片描述
2. 四种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类;
3. 修饰类的话,只能使用:缺省、public。

构造器(或构造方法、constructor)

  • 作用:创建对象或者初始化对象的信息,new + 构造器
  • 如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器;
  • 定义构造器的格式:权限修饰符 类名(形参列表){}
  • 一个类中定义多个构造器,彼此构成重载;
  • 一旦显式的定义了类的构造器之后,系统就不再提供默认的空参构造器;
  • 一个类中,至少会有一个构造器。

属性赋值的先后顺序

属性赋值的几种方法:

  1. 默认初始化;
  2. 显式初始化;
  3. 构造器中赋值;
  4. 通过“对象.方法”或“对象.属性”的方式赋值。
    顺序:1234

JavaBean

是一种java语言写成的可重用组件。
是指符号以下标准的java类:

  • 类是公共的;
  • 有一个无参的构造器;
  • 有属性,且有对应的get、set方法。

UML类图

在这里插入图片描述

this关键字

表示当前对象,或 当前正在创建的对象。

  • 可以用来修饰:属性(理解为当前对象的属性)、方法、构造器。
  • 通常情况下,都省略this.,特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用“this.变量”的方式,表明此变量是属性,而非形参。
  • 调用构造器:this(形参列表),调用本类中指定的其他构造器,不能调用自己,不能成环。规定:必须放在当前构造器的首行。

package、import关键字

  • package
    为了更好的实现项目中类的管理,提供包的概念。
    使用package声明类或接口所属的包,声明在源文件的首行。
    每“.”一次,代表一层文件目录。
    同一个包下,不能命名同名的接口、类。
  • import:
    导入指定包下的类、接口。
    声明在包的声明和类的声明之间。
    如果使用的类或接口时java.lang包下定义的,可以省略import。
    如果使用的类或接口是本包下定义的,则可以省略。
    如果在源文件中,使用了不同包下的同名的类,则除了第一个,其他必须使用全类名的方式显示。
    使用“xxx.*”方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要import显式全类名。
    import static:导入指定类或接口中的静态结构。

MVC设计模式

将整个程序分为三个层次:视图模型层、控制器层、数据模型层

  1. 模型层model
  • 数据对象封装;model.bean/domain
  • 数据库操作类;model.dao
  • 数据库。 model.db
  1. 视图层view
  • 相关工具类;vew.utils
  • 自定义view。view.ui
  1. 控制层controller
  • 应用界面相关;controller.activity
  • 存放fragment;controller.fragment
  • 显示列表的适配器;controller.adapter
  • 服务相关的;controller.service
  • 抽取的基类。controller.base
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值