前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JAVA基础&高级】 面向对象篇

【JAVA基础&高级】 面向对象篇

作者头像
LCyee
发布2020-08-10 10:42:32
3350
发布2020-08-10 10:42:32
举报

写在前面

由于近期需要用到基础以及底层的一些知识点,所以借此机会找来了一些学习的资料,用于对 JAVA 面向对象相关的知识点进行复盘、巩固,并且在此将一些重点的知识点做相关的记录,在后续的实际开发工作中遇到这些知识点相关的内容都会在本篇笔记中进行记录、迭代。

“ 温故而知新 ”

  • 写在前面
  • 学习主线
  • 知识点复习
    • 阶段一
      • 0x01:编程思想:面向过程&面向对象
      • 0x02:经典案例:把大象装进冰箱
      • 0x03:理解 “万事万物皆对象”
      • 0x04:内存解析的说明
      • 0x05:匿名对象
      • 0x06:巧记 “方法的重载”
        • 一个例子
      • 0x07:可变个数的形参
        • 一个例子
      • 0x08:值传递机制
    • 阶段二
    • 阶段三
    • 总结
  • 闲谈

学习主线

对于 “面向对象” 章节的学习,划分为以下三个阶段

  • 1、Java 类及类的成员:属性、方法、构造器:代码块、内部类
  • 2、面向对象的三大特征:封装性、继承性、多态性
  • 3、其他关键字的使用:
    • thissuperstaticfinalabstractinterfacepackageimport

核心:掌握上述的概念、思想、关键字等如何在代码中进行具体实现与应用。

技巧:“大处着眼,小处着手”

具体涉及到的代码的需要特别细致的去写,否则一不小心就会出错,导致花费大量的时间去排错, 但也不能埋头去写,要关注前面以及后续的需要学习的一些知识点,区分哪些是重要的,哪些是不重要的,且如果遇到一些 "问题" 时,先花一些时间去考量这个问题的价值,如果需要花费大量的时间去完成,而到最后却不怎么用得上的话,那大可不必。

总结:抓重点去学习,将自己的时间和精力的价值最大化。

知识点复习

查阅资料的过程中发现的重点

阶段一

完善中

0x01:编程思想:面向过程&面向对象

面向过程(POP)与面向对象的区别(OOP

两者都是一种编程思想,面向对象是由面向过程延伸而来的。

  • 面向过程,强调的是功能的行为,以函数为最小的单位,重点考虑的是怎么做
  • 面向对象,将功能封装进对象,强调具备了功能的某个对象, 以类或者对象为最小的单位,考虑的是谁来做

面向对象更加强调运用人类在日常生活中的思维逻辑所采用的思想方法以及原则,如抽象、分类、继承、聚合、多态等。

聚合: 多态:

0x02:经典案例:把大象装进冰箱

面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。

  • ① 把冰箱门打开
  • ② 抬起大象,塞进冰箱
  • ② 把冰箱门关闭

面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做,以下面的伪代码来举例

代码语言:javascript
复制
人{
    打开(冰箱){
        冰箱.开开();
    }

    抬起(大象){
        大象.进入(冰箱);
    }

    关闭(冰箱){
        冰箱.闭合();
    }

}

//实体对象
冰箱{
    //对象拥有的功能
    开开(){}
    闭合(){}
}

大象{
    进入(冰箱){}
}

0x03:理解 “万事万物皆对象”

Java 语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化来使用类的具体功能。

  • 例如 ScannerStringFile

涉及到 Java 语言与前端提交的数据或者后端的数据库交互时,在 Java 层面都体现为类、对象,例如在数据库中的每一个表都被看作为一个个的类,而每个表里面的字段都是这个类的属性。

0x04:内存解析的说明

引用类型的变量,只可能储存两类值:

  • null
  • 内存地址值,包含变量(对象)的类型

例如,直接打印一个实例化后对象的值

代码语言:javascript
复制
Phone p = new Phone();
System.out.println(p)

得到的结果为

下图为对象数组在 JVM的栈和堆中的内存的解析图

对象数组的内存解析
对象数组的内存解析

图片来源自宋红康老师课程的课件

0x05:匿名对象

创建两个匿名的对象,他们的内存空间是独立的,运行结束后地址会在内存中销毁(适合一次性使用的场景,无需在栈中储存该对象的内存地址)

代码语言:javascript
复制
new Phone().price = 1999;
new Phone().getPrice(); //0.0

匿名对象的使用

代码语言:javascript
复制
public class InstanceTest {
	public static void main(String[] args) {
        PhoneMall mall = new PhoneMall();
		//匿名对象的使用
		mall.show(new Phone());
	}
}
class PhoneMall{
    public void show(Phone phone){
        //匿名对象通过形参的赋值,实现在方法中被多次调用
        phone.sendEmail(); 
        phone.playGame();
    }
}

0x06:巧记 “方法的重载”

” 两同一不同 “

  • 同一个类、相同的方法名
  • 参数的列表不同:个数不同、类型不同
一个例子

判断与 void show(int a,char b,double c){} 构成重载的有哪些?

代码语言:javascript
复制
void show(int x,char y,double z){} // no,参数的数量和类型相同

int show(int a,double c,char b){}	// yes

void show(int a,double c,char b){} 	// yes

boolean show(int c,char b){} 		// yes

void show(double c){} 		// yes

double show(int x,char y,double z){} // 参数的数量和类型相同

void shows(){double c} 		// no ,方法名不同

总结:方法的重载需要重点关注相同方法名的参数的数量以及参数的类型

0x07:可变个数的形参

jdk 5.0 中新增的内容

使用过程中需要注意的:

  • 可变形参的格式:数据类型 ... 变量名
  • 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个, X个
  • 可变形参的方法与本类中方法名相同时,形参不同的方法之间构成重载
  • 可变形参的方法与本类中方法名相同时,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。
  • 可变形参中必须声明在末尾
  • 在方法的最多只能声明一个可变形参。
一个例子
代码语言:javascript
复制
public class MethodArgsTest {
    public static void main(String[] args) {
        MethodArgsTest test = new MethodArgsTest();
        test.show(new String[]{"AA","BB","CC"});
        // 可变形参也可以接收一个数组
        test.show(new String[]{"AA","BB","CC"});
    }
    public void show(String ... strs){
        for(int i = 0;i < strs.length;i++){
            System.out.println(strs[i]);
        }
    }
}

0x08:值传递机制

形参:方法定义时,声明在小括号内的参数

实参:方法调用时,实际传递给形参的数据

  • 如果参数是基本的数据类型(例如 intfloatdouble 等)此时实参赋给形参的是真是储存的数据值。
  • 当参数的类型为引用数据类型时,传递的是数据(对象)在栈指向堆中的内存地址,所以此时对该形参进行改动,实参也会发生改变
引用类型形参
引用类型形参

阶段二

完善中

阶段三

完善中

总结

完善中

闲谈

记录在学习过程中受到的一些启发

“比较少的人是真的把知识读通了,把知识是为他所用,而有一部分的人是学得越多越陷入进了知识的深渊,最终没办法走出来。”

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 学习主线
  • 知识点复习
    • 阶段一
      • 0x01:编程思想:面向过程&面向对象
      • 0x02:经典案例:把大象装进冰箱
      • 0x03:理解 “万事万物皆对象”
      • 0x04:内存解析的说明
      • 0x05:匿名对象
      • 0x06:巧记 “方法的重载”
      • 0x07:可变个数的形参
      • 0x08:值传递机制
    • 阶段二
      • 阶段三
        • 总结
        • 闲谈
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档