JAVA_SE_笔记整理(面向对象一)
java面向对象一
1、面向对象思想引入
前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码封装到方法中,需要遍历时,就调用相应的方法即可,提高代码的复用性。在对数组遍历的基础上继续增加需求,比如获取最值,数值逆序等,同样需要将这些功能封装到相应的方法中。这样继续封装会发现方法越来越多,于是就想能不能将这些方法继续进行封装呢?
通过前面的讲解我们知道类是可以存放方法的,所以,我们就考虑使用类封装来这多个方法,将来再做数组的操作时,不用去找具体的方法,先找到这个类,然后使用这个类中的方法。这就是面向对象思想的编程方式。
2、面向过程思想概述
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
面向对象思想概述
面向对象是基于面向过程的编程思想
面向对象思想特点
是一种更符合我们思想习惯的思想
可以将复杂的事情简单化
将我们从执行者变成指挥者
角色转变
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。
“面向对象”(Object Oriented,简称OO)是一种以事物为中心的编程思想。
3、面向对象思想举例
买电脑:
面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中赛格电脑--讨价还价--买回电脑
面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了
洗衣服:
面向过程:把衣服脱下--找一个盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--晾起来
面向对象:把衣服脱下--打开全自动洗衣机--扔进去--一键即可--晾起来
吃饭:
面向过程:去超市买菜--摘菜--洗菜--切菜--炒菜--盛起来--吃
面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃
家常事物,买洗衣机和去饭店太不划算了,所以,找个对象。
但是,你不跟我好好学习,你将来4000,你对象8000。
4、面向对象开发,设计,特征
面向对象开发
就是不断的创建对象,使用对象,指挥对象做事情。
面向对象设计
其实就是在管理和维护对象之间的关系。
面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
5、类与对象关系
属性 就是该事物的描述信息
行为 就是该事物能够做什么
类: 是一组相关的属性和行为的集合
对象: 是该类事物的具体体现
举例:
类:学生
对象:班长就是一个对象
类:可以理解为构筑对象的一个蓝图或者模板,是抽象的概念。
对象:是以类为模型创建的具体实例,是对类的一种具体化。
6、类的定义:
现实世界的事物
属性 人的身高,体重等
行为 人可以学习,吃饭等
Java中用class描述事物也是如此
成员变量 就是事物的属性
成员方法 就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
1、成员变量 和以前定义变量是一样的,只不过位置发了变化。 在类中,方法外。
2、成员方法 和以前定义方法是一样的,只不过把static去掉,后面再详细讲解static的作用。
7、类与对象案例
学生类
如何定义
按照事物到类的过程一步一步分析
如何使用
创建对象
类名 对象名 = new 类名();
对象名.成员变量
对象名.成员方法
定义人类:
使用人类:
8、内存图
对象变量中保存的不是真实的对象内容,而是对象内存所在堆地址,通过该地址位置,可以找到堆中的对象内。可以进行赋值,取值,操作。
9、形式参数问题:(形参问题)
基本类型作为参数 long
会将实际参数值进行赋值给形式参数。
引用类型作为参数 String
会将实际参数值(引用)赋值给形式参数(引用)。
因为引用类型参数有方式堆地址的能力,引用地址进行赋值,作用是相同的,也可以访问堆地址。
10、匿名对象
匿名对象:就是没有名字的对象
是对象的一种简化表示形式
匿名对象的两种使用情况
对象调用方法仅仅一次的时候
作为实际传递
11、封装概念
指隐藏对象的属性和实现细节,仅对外提供公共访问方式
好处:
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性
封装原则
将不需要对外提供的内容都隐藏起来。
把属性隐藏起来,提供公共方法对其访问。
private关键字
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问。
private最常见的应用:
把成员变量用private修饰
提供对应的getXxx()/setXxx()方法
一个标准的案例的使用
private仅仅是封装的一种体现,类和方法其实也是封装体
12、this
this:代表所在类的对象引用
什么时候使用this呢?
局部变量隐藏成员变量
其他用法后面和super一起讲解
13、构造方法
作用:给对象的数据进行初始化的。
构造方法格式
方法名与类名相同
没有返回值类型,连void都没有。
没有具体的返回值。
注意事项:
如果你不提供构造方法,系统会给出默认构造方法。
如果你提供了构造方法,系统将不再提供。
构造方法也是可以重载的。
虽然构造方法没有返回值,但是也是可以使用return的,在最后写return; 这种做法在任何返回值为void类型的方法最后都是没有问题的。
14、类的成员方法
成员方法就是之前讲过的普通方法。
方法具体划分:
根据返回值:有返回值的方法和返回值为void类型的方法
根据形式参数:带参方法和无参方法。
15、一个基本类的标准写法:
带参构造:带有参数的构造方法。
多参构造:一个以上参数的构造方法
不带参构造:无参构造方法。
私有构造:该类不予许创造对象。或者说不需要别的类创造构造方法,而自己可以创造构造方法。
公有构造:任何人都可以new这个类,得到该类的对象。
必写无参构造:如果不写无参构造,而写了有参构造,系统不会给默认的无参构造。这样就不能使用无参构造方法,创建对象。
给成员变量赋值的方式
无参构造方法+setXxx()
带参构造方法
16、类实例化为对象的过程。
Student s = new Student(“张三”, 18);
1、加载Student.class
2、为s开辟栈内存。
3、在堆内存中为Student类的对象开辟内存。(默认值为null, 0.0, false,\u0000)
4、调用构造方法,为对象属性赋初始值。
5、将开辟的堆内存地址(引用),赋值给s变量
17、static 关键字
可以修饰成员变量和成员方法
static关键字的特点
随着类的加载而加载
优先于对象存在
该类的所有静态资源共享
这也就是我们判断是否使用静态关键字的条件
可以通过类名调用,当然可以通过对象名调用
static关键字的注意事项
在静态方法中是没有this关键字的。
静态方法只能访问(调用,使用)静态成员变量和静态成员方法。
18、静态变量和非静态成员变量的区别
所属不同:
静态变量属于类,所以也称为类变量
非静态成员变量属于对象,所有也称为实例变量(对象变量)
内存中位置不同:
静态变量存储于方法区的静态区
成员变量存储于堆内存
内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失。
调用不同
静态变量可以通过类名调用,可以通过对象调用
成员变量只能通过对象名调用。
非静态方法可以调用静态方法,静态方法不可以调用非静态。
19、main方法是静态的
public static void main(String[] args) {}
public 公共的,访问权限最大,由于main是由虚拟机调用,所以权限够大。
static 静态的,不需要实例化该方法所在类,为了方法jvm调用。
void 方法的返回值,main是由JVM调用 ,返回内存给JVM没有意义。
main 方法名,不是关键字,但是JVM就是只认它。
String[] args:是一个参数,该参数为一个字符串数组,它可以接收在运行时传入的参数。