JavaSE知识总结(2) 面向对象 上

面向对象

面向对象分成了上中下三个部分,由浅到深循序渐进,但这并不是最终的笔记,后面关于面向对象还需要补充一下内存图和类的执行顺序(面试必问),最后再给出最终整理好的思维导图。
面向对象学好了,后面的内容都会很轻松。虽然后面每个章节的知识关联性不强,但都会涉及到对象的创建和使用。

面向对象上

一、面向对象面向过程

基本概念
面向对象概述
java语言是一种面向对象的语言,而面向对象思想(OOP)是一种程序设计思想。
这里的“对象”泛指现实中一切事物,每种事物都具备自己的“属性”和“行为”。
面向对象OOP
面向对象思想(OOP)就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。

特点:

以类/对象为最小单位,类包括:数据+方法

把软件系统看成各种对象的集合

以对象(谁)为主,考虑谁来做,谁能做

程序员是指挥者

面向对象仍然包含面向过程,只不过关注点变了,关注谁来做

软件可重用性、可维护性和可扩展性强
面向过程POP
特点:

以函数(方法)为最小单位
数据独立于函数之外
面向功能划分软件结构
以过程,步骤为主,考虑怎么做
程序员是具体执行者
制约了软件的可维护性和可扩展性
OOP和POP的区别
  • 面向过程以方法(函数)为主;
  • 面向对象以类(对象)为主。
  • 面向过程以过程(步骤)为主,考虑怎么做;
  • 面向对象以对象(谁)为主,考虑这件事让谁来做、谁能做
  • 面向过程限制了软件的可维护性和可扩展性;
  • 面向对象更注重谁去做,软件可重用性、可维护性和可扩展性强。
面向对象的好处
  • 解决中大型的问题,使用面向对象可以使代码简化,提高可复用性和可维护性
  • 以人类的思维方式思考问题

二、类和对象

万物皆对象

类(模板):是一类具有相同特征的事物的抽象描述,是一组相同属性和行为的对象的集合

格式
public class 类名 {

  //成员变量,描述这类事物的属性

  //成员方法,描述这类事物的行为

}

成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外,用于描述对象的属性特征。

成员方法:和以前写的main方法格式类似。只不过功能和形式更丰富了。在类中,方法外,用于描述对象的行为特征。	
对象

对象(具体实例):是一个具有特定属性行为特征的具体事物,是类的具体实例

格式
创建对象格式:

类名 对象名= new 类名 ();
使用对象的成员,使用“. ”操作:
使用成员变量:对象名.属性
使用成员方法:对象名.方法名()	
匿名对象
  • 没有名字的对象 (new Person())
  • 只能调用一次
  • 往往作为实参传入
类和对象的使用
  • 1.创建类,设计类的成员
  • 2.创建类的对象
  • 3.通过“对象.属性”或“对象.方法”调用对象的结构
类和对象的总结
  • 1、类是对一类事物的描述,是抽象的。
  • 2、对象是一类事物的实例,是具体的。
  • 3、类是对象的模板,对象是类的实体。
对象数组

​ 数组中存储的元素是对象,可以是同一个对象也可以是不同的对象

三、内存图解析

  • 垃圾回收机制
  • ​ 当没有任何引用指向堆中的地址,那么开辟的空间就是垃圾,等待垃圾回收器回收(GC)
  • 方法区
  • 元空间概念:不再占用虚拟机内存,直接占用物理内存

内存图会在下一篇文章单独发

四、属性

4.1 拓展:变量分类

​ 局部变量:定义在方法体内的变量

​ 成员变量

​ 类变量(静态变量):有static修饰

​ 实例变量(普通成员变量):没有static修饰的成员变量

成员变量与局部变量的区别
(1)声明的位置不一样
成员变量直接声明在类的成员的位置;
局部变量声明在方法体中或其他局部区域内(如方法参数、构造方法、代码块等)
(2)修饰符不一样
成员变量可以被public、private、static、final等;
而局部变量不能使用访问权限修饰符,但是可以用final
(3)作用域不一样
局部变量的作用域在方法体中,成员变量在整个类中
(4)内存加载位置不一样
成员变量:堆或方法区(static修饰时);
局部变量:栈
(5)初始化值不一样
成员变量有默认初始化值,和数组初始化值一样;
局部变量没有默认初始化值
(6)生命周期不一样
成员变量:同对象或类(static时)的生命周期;
局部变量:随着方法的调用而存在,方法调用完毕即消失
4.2 声明
格式
class 类名{

    【修饰符】 数据类型  属性名;    //属性有默认值

    【修饰符】 数据类型  属性名 =; //属性有初始值

}
//数据类型可以是任意基本数据类型和引用数据类型,属性名也需要遵守命名规范和命名规则

修饰符:public、缺省的、private(私有化的)、protected(受保护的)、final、static(静态)

4.3 访问
类变量变化的访问

​ 类名.静态成员变量

​ 对象名.静态成员变量(不推荐)

原因:静态变量基于类的加载而加载,如果用对象调用可能会得不到理想结果
实例变量的访问

​ 对象名.实例变量

实例变量VS类变量
相同点
  • 1.代码位置相同,都在类中的方法外
  • 2.都具有默认值,和数组默认值一样
不同点
  • 1.内部位置不同。静态变量在方法区中,非静态变量在堆中
  • 2.调用方式不同
    • 1.静态成员变量:类名.属性名、对象名.属性名
    • 2.非静态成员变量:对象名.属性名
  • 3.在内存中的存储不同:静态成员变量只会开辟一块空间,所有的对象共享这一份内存,而非静态变量每new一次就会开辟一块新内存
  • 4.生命周期不同(在内存中开辟的时间)
    • 静态成员变量:在类加载时开辟空间,随着类的加载而加载
    • 非静态成员变量:在创建对象时开辟空间
    1. 释放内存的时间不同
    • 静态成员变量:随着类的卸载而卸载
    • 非静态成员变量 :当没有引用指向时 会被垃圾回收器回收
属性赋值的顺序(先后顺序:1>2=3>4>5)
  • 1.默认赋值
  • 2.显示赋值
  • 3.代码块赋值
  • 4.构造器赋值
  • 5.对象名.属性名或set方法

五、方法

5.1 基本概念

基本概念:方法也叫函数,是一个独立功能的定义,是一个类中最基本的功能单元。把一个功能封装为方法的目的是,可以实现代码重用,从而简少代码量。(方法是用来描述类的某一特定功能)

5.2 声明和调用
5.2.1 声明

​ 位置:方法声明的位置必须在类中

格式
【修饰符】 返回值类型 方法名(【参数列表:参数类型1 参数名1,参数类型2 参数名, ......){

        方法体;

        【return 返回值;}
格式说明:
- 1.修饰符:修饰符后面详细讲,例如:publicstatic等都是修饰符
- 2.返回值类型:表示方法运行的结果的数据类型,与”return 返回值“搭配使用
    	无返回值:void
     	有返回值:可以是任意基本数据类型和引用数据类型。
- 3.方法名:给方法起一个名字,要符合标识符的命名规则,尽量见名知意,能准确代表该方法功能的名字
- 4.参数列表:方法内部需要用到其他方法中的数据,需要通过参数传递的形式将数据传递过来,可以是基本数据类型、引用数据类型、也可以没有参数,什么都不写
- 5.方法体:特定功能的代码
- 6.return:结束方法,可以返回方法的运行结果
 		可以返回不同类型的数据,对应匹配的返回值类型。
  		如果方法无返回值,可以省去return,并且返回值类型为“void
5.2.2 调用

格式:对象名.方法名

  • 方法是可以调用当前类下的属性或方法
注意
  • 1.方法只声明不调用的话是不会执行的
  • 2.方法的执行顺序只与调用的顺序有关
  • 3.方法与方法之间是兄弟关系(即在方法中不能在定义方法)
  • 4.方法执行结束会回到方法的调用处
5.3 方法分类
根据修饰符不同
  • ​ 实例方法
  • ​ 静态方法
根据返回值和参数不同
  • 无参无返回值
  • 有参无返回值
  • 无参有返回值
  • 有参有返回值
区别
  • 有无static修饰
  • 引用资源不同
    • 静态方法 [直接] 引用静态资源,若需要引用非静态资源则需要创建对象
    • 非静态方法可以直接引用所有资源
5.4 方法的参数
形参
形参:在定义方法时方法名后面括号中声明的变量称为形式参数(简称形参)即形参出现在方法定义时。

规定方法调用出传递的实参的类型、个数、顺序

实参
实参:调用方法时方法名后面括号中的使用的值/变量/表达式称为实际参数(简称实参)即实参出现在方法调用时。
  • 既可以是常量也可以是变量

  • 实参的值与形参的类型匹配即可

5.5 返回值类型
return
  • 1.使用范围:使用在方法体中
  • 2.作用
    • 结束方法
    • 针对与有返回值类型的方法,可用return返回所想要的数据
  • 3.注意:return关键字后面不可以声明执行语句。
5.6 方法参数传递
值传递机制(Java)
基本数据类型
  • 相互传递的是基本数据类型的具体的值
引用数据类型
  • 相互传递的是该对象的地址值

实参将值传给形参的过程,称为参数传递,实际上就是一个赋值的过程

5.6 方法重载

定义:在同一个类中,允许存在一个以上的同名方法,只要它们的“参数列表不同”即可,与修饰符和返回值类型无关。(同类同名参数列表不同即两同一不同)

其中参数列表不同是指参数的个数不同,数据类型不同,数据类型顺序不同

方法重载与方法重写的区别(重写时讲)

5.7 可变参数/形参

在JDK1.5之后,如果我们定义一个方法时,此时某个形参的类型可以确定,但是形参的个数不确定,那么我们可以使用可变参数。

格式
【修饰符】 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型... 形参名){

 }
注意
  • 1.一个方法最多只能有一个可变参数
  • 2.可变参数是使用数组进行数据存储
  • 3.可以接收实参的个数是[0, n]
  • 4.可变形参必须位于列表的最后
5.8 命令行参数(了解)

给main()方法传递的参数 ->>> 给** public static void main(String[] args)** 传递参数

  • 通过命令行传的参数,在args数组中
  • 命令行的参数可以使用,如args[0]
传递方式

java 包.类 参数1 参数2 参数3

  • 各个参数之间需要使用空格分隔

eclipse 或 idea

  • 在上方工具栏点击Run选项,然后会出来一个小框,点击Edit选项,在Program arguments栏输入你要输入的命令行参数,点击Run就可以了。

在这里插入图片描述

  • 快捷键实现以上操作:
    ALT + SHIFT + F10,右,Edit,回车键,Tab键,输入命令行参数,回车。
5.9 递归方法

递归:指在当前方法内调用自己本身的这种现象

递归的分类
  1. 直接递归(自己调用自己)
  2. 间接递归(A调B,B调C,C调A)
注意事项
  • 递归一定要有条件限制,必须保证递归能够停止下来,否则会发生栈内存溢出
  • 在递归中虽然要有条件限制,但是递归次数不能过多,否则也会导致内存溢出
常用递归
斐波那契数列
  • 第一项和第二项都为1,从第二项开始,下一项是等于前两项的和相加
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值