昨天花了一天时间看了面向对象初级的部分,虽然以前也怀疑30天能否学完java,但是这回开始之后我确定,这零基础30天是不太可能的。
本章对应b站韩顺平30天学会java 视频教学的192-263部分。主要讲解的是以下几个部分:
我会根据笔记及视频内容做简要摘要,方便记忆以及之后面试。
类与对象
类的介绍
- 类是自己定义的一个变量类型,是对象的抽象的表现形式。
- 类符合人们的编程逻辑,可以把事务的特征提起出来:特征–> 对象模板–> 一个一个实例。
- 类一般定义在main方法下方以 class + 类名+{}来定义。
- 在本章节中类包含3个部分:成员变量,构造器 和方法(之后还会加入如代码块内部类等)
属性的介绍
- 属性的定义语法为:访问修饰符(public。。。)+ 属性类型(String,int.可为引用类型基本类型)+属性名
- 如果不给属性赋值的话,属性会根据给的属性类型赋上默认值(int: 0, String: null, …)
关于对象和访问对象属性
Cat cat = new Cat();//创建对象,创建一个猫类并且让名为cat的索引指向这个猫类
cat.name;//使用对象,cat的名字
这里讲解了类和对象的内存分配机制。大致为以下步骤:
- 首先在方法区中加载类信息(只在new时加载一次)
- 在new 对象的过程中,先在堆中开辟一个空间,并且分配一个地址,在此空间中生成类的成员属性,如果是基本数据类型将直接保存在堆中,如果是引用数据类型如String则会继续分配地址将地址直向方法区中,在方法区中保存string本身如:小白。
- 在栈中生成一个对象名,并且将它与在堆中内存空间的地址绑定在一起。
- 进行指定初始化如 cat.name = “小白”
以上是创建一个只有成员变量对象的简单过程
成员方法
我们可以在类中添加成员方法,就像人这个类中应该不单单拥有名字等基本信息,应该也要有会吃饭睡觉。java类也是如此。
方法的调用原理
- 等程序在main方法中跑时,在new完对象之后,调用对象的方法时,程序会在栈中开辟一个新的独立空间,并在次空间中执行成员方法
- 当成员方法执行结束之后,把结果return(可以返回任何类型,但只能有一个返回)出来返回给调用方法的地方并且继续执行下去。
- 重复上面的方法直到main方法在栈中执行完毕。
成员方法的定义方式
访问修饰符 返回数据类型 方法名(形参列表){
。。。
return
}
方法调用细节
- 同类中直接调用,方法名 + 参数
- 不容类要加对象名
- 遵循访问修饰符
- 要在另一个类中创建一个对象然后+.方法名。
成员方法的传参机制
如果是基本数据类型,不会影响到实际参数,会在栈中改变或者计算。
引用数据类型传递的是地址,形参会影响到实参
递归
递归就是方法自己调用自己家,需要注意要在递归方法中设置结束条件。
会在栈中一个一个开方法,在最后开的方法执行结束后,一个一个返回。
八皇后问题,汉诺塔问题后期复习时在做。
重载
- 方法名一致,但是方法的形参不一致。
- 无关返回值和返回类型
- 可以用三个点… 加在数据类型之后代表有多个同样类型的输入(0~多个),必须放在形参列表尾部,一个方法只能有一个可变参数,并且与array的使用方法一致。(可变参数的概念)可变参数的实参可以是数组。
作用域
- java中属性分为成员变量和局部变量。没有全局变量,但是python中有(global)。
- 成员变量作用域在整个类中,局部变量是在自己的代码块中,例如方法,代码块。
- 成员变量可以不赋值直接使用,有默认的值;局部变量不行必须直接赋值在使用。
- 成员变量可加修饰符,但局部变量不行。
- 成员变量的生命周期较长,局部变量生命周期较短,因为在栈中完成成员方法后,成员方法就会结束return一个值,但类还存在。
构造方法/构造器
基本语法
【修饰符】方法名(形参列表){
方法体;
}
构造器特点
- 方法名和类名相同
- 构造器没有返回值
- 一个类可以有多个构造器,也就是构造器的重载
- 如果没有自己写构造器,系统会默认一个构造器
对象创建的流程
- 首先加载类信息,在方法区中
- 在堆中给对象分配空间(地址)
- 完成对象初始化(1. 默认初始化 属性 = 默认值 age = 0, name = null 2. 显示初始化 属性等于成员变量 3.构造器的初始化,属性等于传入的参数 )
- 把在第二步创建的地址,返回给在队中的对象名
this 关键字
- this 是用来访问本类的属性、方法、构造器
- this.变量名可以用来区分局部变量,这样他们可以同名
- 访问成员方法的格式: this.方法名(参数列表)
- 访问构造器语法:this(参数列表),只能在构造器中使用
- this不能在类的外面用。
总结
本章讲的是比较基础的面向对象的知识。讲的是关于类的调用,创建对象,成员属性,构造器等。其中在内存中,如何创建对象的过程都十分重要。