一、说说面向对象思想
1、什么是面向对象
1)面向对象是以对象为基础的,完成各种操作,强调的是对象、结果。
2)面向过程是以函数为基础的,完成各种操作,强调的是过程。
3)面向对象是基于面向过程的。
2、面向对象的思想特点
1)一种更符合人们思考习惯的思想
2)把复杂的问题简单化
3)我们从执行者变成了指挥者
举例:自己买电脑vs让朋友帮忙买电脑
(面向过程) (面向对象)
二、类与对象
1、类是相关属性和行为的集合,是抽象的概念
2、对象是某种事物的具体存在,是具体的表象形式
举例:学生 (类)
小明 (对象)
三、成员变量和局部变量的区别
1、定义位置
成员变量:类中方法外
局部变量:类中方法内,或方法上的形参
2、初始化区别
成员变量:有默认初始化值
局部变量:无
3、存储位置:
成员变量:堆中 随对象的存在而存在
局部变量:栈中 随方法的存在而存在
四、封装的概述
1、概念
隐藏对象的属性和实现细节,仅对外提供公共的访问方式(将属性私有化,并提供公有的访问方法)
2、注意
private仅仅是封装的一种体现,因为类,函数等其实也是一个封装的体现
3、为什么要写getter/setter方法(掌握)
从思想上来说,因为属性私有化,只能在本类使用,其他类要想使用就需要提供get方法和set方法
从需求上来讲,set和get方法 不一定必须出现,他俩是相互独立的
而且set方法和get方法的名字可以随便起,只不过形成一个规范了,大家通过方法给私有属性赋值的时候,形成一个默认的规则,就是给属性赋值的方法以set开头,获取属性值的方法以get开头
五、实例变量 和类变量
类变量也叫静态变量,也就是在变量前加了static 的变量
实例变量也叫对象变量,即没加 static 的变量
区别在于:
类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象
六、this关键字(掌握)
1、概念(理解或了解)
this代表其所在方法所属对象的引用,哪个对象调用方法,方法内部就有一个隐含的this代表这个对象(谁调用,this就代表谁)(重点)
简单点说:谁调用,this代表谁
2、应用场景(作用掌握)
用于解决局部变量隐藏成员变量的问题
简单点说:通过this关键字可以直接调用成员变量
七、代码块(掌握)
1、概述
由{}扩起来的代码称之为代码块,类或者方法也可认为是代码块,但是一般不这么说,我们平时所说的代码块指的是孤零零的{}
2、代码块作用
局部代码块作用
让变量尽可能早的从内存中消失,提高效率
构造代码块作用是
把所有构造方法中的共同的内容定义在构造代码块中,提高代码复用性,代码块先于构造方法执行,但是一般不用,最终目的初始化成员变量
工作中用的很少,主要应对面试
八、对象初始化过程(掌握)
Person p = new Person();
A:把 Person.class文件加载到内存 (类加载器 )
B:在栈内存开辟一个变量空间,给 p使用
C: new Person()就会在对内存中开辟空间
D:方法进方法区,有类名做标记,并且,同时成员变量进堆内存并给出了默认初始化值
E:对成员变量进行显示初始化 (是因为定义成员变量的时候给赋值了 public int age = 34;)
F:如果有构造代码块,可以在构造代码块中对成员变量赋值
G:构造函数初始化
H:到此为止,对象初始化完毕
I :把堆内存对象的首地址赋值给栈内存的 p变量
九、static关键字概述
1、概述
1)static 可以修饰成员变量和成员方法
2)被static修饰的成员有一个最大的特点,就是可以被该类下所有的对象共享
2、什么时候用
多个对象共享某一数据的时候,我们就把这个数据用static修饰.举例:小鸡吃食
3、特点(掌握)
1)被static修饰的内容随着类的加载而加载,优先于对象存在
2)可以直接通过类名调用
3)被该类下所有对象共享
4、注意事项
1)在静态方法中是没有this关键字,因为静态是随着类的加载而加载。而this是对象创建才存在的
2)静态方法只能访问静态成员变量和静态成员方法 一句话 静态只能访问静态
3)静态内容可以通过对象调用,也可以通过类名调用。推荐使用类名调用
十、继承
1、什么是继承
1)多个类中存在相同的属性和行为时,将这些内容抽取到单个类中,那么多个类无需再定义属性和行为,只需继承即可。
2)多个类成为子类或派生类,单个类称为父类或超类
3)通过extends关键字让他们产生关系
2、继承的好处及特点
好处:
1)提高代码的复用性
2)让类与类产生关系,是多态的前提
特点:
1)Java中只支持单继承,不支持多继承
2)Java中支持多层继承
3、什么时候使用继承
B类是A类的一种就用继承关系
十一、this和super的比较
1、概念上的区别
Super代表的是父类内存空间的标示
this代表所在方法所属对象的引用
2、什么时候使用
在调用父类构造方法时使用super
当子父类中出现同名成员时用super区分
十二、重写override和重载overload
1、重写override概念(掌握)
在子父类关系中,子类中存在和父类方法声明完全一样的方法叫做方法重写
2、重载overload概念
一个子类或者子父类关系中存在多个同名方法,并且参数列表不同的方法叫做重载
3、重写的作用
升级改造父类的方法
十三、子父类间成员方法注意事项(掌握)
1、父类中私有方法不能被覆盖 (因为私有的不能被继承,所以不算重写)
2、子类方法访问权限大于父类方法访问权限 (父类如果是public,子类只能是public)
十四、子父类间构造方法特点和注意事项(掌握)
1、子类中构造方法的特点(理解)
子类默认构造方法都访问了父类的无参构造方法,子类构造方法中都有默认语句super(),并且默认只能是无参的super()语句
因为子类会具备父类中非私有数据,这个初始化靠父类完成,所以先调用父类构造方法来初始化父类中的数据
2、如果父类无无参构造,子类构造如何访问父类构造(掌握)
1)通过super(参数)调用父类带参构造方法
2)通过this(..)调用本类构造方法 //知道就行,一般不用, 但是需要注意的是如果一个类中所有的构造方法第一句都调用this(..),这样是错误
3、构造方法执行完后会创建该类的对象吗?
不一定,子类的构造方法第一行调用父类的构造方法时,不会创建对象
4、注意
构造方法中的this()和super()语句必须放第一行,并且只能取其一
十五、子父类间静态代码块,代码块,构造方法执行顺序(掌握)
1、优先级
静态代码块 -> 构造代码块 ->构造方法
2、执行顺序
父类静态代码块->子类静态代码块->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法
3、静态代码块作用
初始化静态成员变量
4、构造代码块作用
1、初始化非静态成员变量
2、把所有构造方法中的共性内容抽取出来,提高了代码的复用性
版权声明:本文为博主原创文章,未经博主允许不得转载。