- 面向对象编程1
-1. 技能点列表
-2. 总体概述
- 面向对象和面向过程的异同
- 面向对象的思想特点
A:是一种更符合我们思考习惯的思想
B:把复杂的事情简单化
C:让我们从执行者变成了指挥者
举例:
如何造汽车(事物比较复杂, 使用简单的线性思维无法解决)
面向过程:
1. 造车轮?
2. 造发动机?
3. 造车皮?
4. 挡风玻璃? …
很难决定上面这些步骤之间的关系! 先造发动机还是先造车轮?
面向对象:
车轮
1.买橡胶
1)到马来西亚
2)找到橡胶厂
3)掏钱买
4)用船将橡胶运到国内
2.造磨具
3.将橡胶放入磨具
4.出车轮
发动机
….
车壳
….
座椅
…
挡风玻璃
….
将上面的造出的东东, 组装, 汽车造出!
- 对象和类的概念
对象:是具体的事物 xiaoming xiaohong
类:是对对象的抽象(抽象 抽出象的部分)Person
先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。
生活案例
1.类是一个图纸 对象是根据该图纸制造多个实物。
2.类是一个模具 对象是使用模具制造的多个铸件(月饼模子 )。
3.类是上海大众汽车,对象就是大家购买的一辆辆具体上海大众汽车。 - 认识类和对象
1. 需求: 使用面向对象思想表示人的日常生活
2.
(1)分析
1)由多个具体的人(小红、 小张、 老李) 抽象出所有的公共特征
2)静态特征: 姓名、 年龄、 性别
3)动态行为: 吃饭、 休息、 自我介绍
(2)实现
1)创建抽象的人-----Person类
2)创建具体的人-----对象
3. 对象和类的关系
1)特殊到一般, 具体到抽象。
2)类可以看成一类对象的模板, 对象可以看成该类的一个具体实例。
3)类是用于描述同一类形的对象的一个抽象的概念, 类中定义了这一类对象所应具有的静态和动态属性。
4)JDK提供了很多类供编程人员使用, 编程人员也可定义自己的类。 - 类
(1)定义类(类的组成)
1)属性 field
2)方法 method
3)构造方法 construtor
4)其他: 代码块 静态代码块 内部类
(2)创建对象
1)类名 对象名 = new 类名();
2)Person p1=new Person();
3)调用类的属性和方法
4)对象名.成员变量
5)对象名.成员方法 - 类的属性
1. 属性 field, 或者叫成员变量,属性用于定义该类或该类对象包含的数据或者说静态属性。
2. 属性作用范围是整个类体。
3. 属性定义格式:
[修饰符] 属性类型 属性名 = [默认值]
4. 在定义成员变量时可以对其初始化,如果不对其初始化, Java使用默认的值对其初始化。
- 局部变量和成员变量的区别
(1)在类中的位置不同
成员变量:类中方法外。
局部变量:方法定义中或者方法声明上。
(2)在内存中的位置不同
成员变量:在堆中。
局部变量:在栈中。
(3)生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失。
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。
(4)初始化值不同
成员变量:有默认值。
局部变量:没有默认值,必须定义,赋值,然后才能使用。 - 引用类型
Java 语言中除基本类型之外的变量类型都称之为引用类型。
Java中的对象和数组是通过引用对其操作的。
1. 引用可以理解为一种受限的指针
2. 指针是可以进行与整数做加减运算的, 两个指针之间也可以进行大小比较运算和相减运算。 引用不行, 只能进行赋值运算。
3. 引用就是一个变量或对象的别名(引用的本质是一个对象) ; 指针是一个段内存空间的地址(指向存储一个变量值的空间或一个对象的空间)。 - 内存分析
1. 栈:
1)存放: 局部变量
2)先进后出, 自下而上存储
3)方法执行完毕, 自动释放空间
2. 堆:
1)存放new出来的对象
2)需要垃圾回收器来回收
3. 方法区:
1)存放: 类的信息(代码)、 static变量、 字符串常量等.
- 构造器
1. 构造器定义: constructor 构造方法
一个在创建对象时被自动调用的特殊方法。
2. 构造器作用:
为对象进行初始化(成员变量) 工作。
3. 构造器是一种特殊的方法:
1)构造器的方法名必须和类名一致!
2)构造器虽然有返回值, 但是不能定义返回类型(返回值的类型肯定是本类), 不能在构造器里调用return。
3)通过new关键字调用! !
4)如果我们没有定义构造器, 则系统会自动定义一个无参的构造方法。 如果已定义则编译器不会添加无参数构造方法!
5)与普通方法一样, 构造方法也可以重载。 - 方法调用
1. 形参和实参
1)定义方法的参数是形式参数。
2)调用方法的参数是实在参数。
3)调用方法时要求参数个数相同, 类型兼容。
2.参数传递
1)基本数据类型的参数传递。
2)无法通过方法调用改变变量的值。
3)引用数据类型的参数传递。
4)可以通过方法调用改变变量的值。 - this关键字
1. this的作用:
1)this表示的是当前对象本身,
2)更准确地说, this代表当前对象的一个引用。
2. 普通方法中使用this。
1)区分类成员属性和方法的形参.
2)调用当前对象的其他方法(可以省略)
3)位置: 任意
3. 构造方法中使用this。
1)使用this来调用其它构造方法
2)位置: 必须是第一条语句
4. this不能用于static方法。 - static 关键字
1. 在类中, 用static声明的成员变量为静态成员变量 ,或者叫做: 类属性, 类变量.
1)它为该类的公用变量, 属于类, 被该类的所有实例共享, 在类被载入时被显式初始化,
2)对于该类的所有对象来说, static成员变量只有一份。 被该类的所有对象共享! !
3)可以使用” 对象.类属性” 来调用。 不过, 一般都是用“类名.类属性”
4)static变量置于方法区中!
2. 用static声明的方法为静态方法
1)不需要对象, 就可以调用(类名.方法名)
2)在调用该方法时, 不会将对象的引用传递给它, 所以在static方法中不可访问非static的成员。
3)静态方法不能以任何方式引用this和super关键字。 - 代码块
(1)用{} 括起来的代码。
(2)分类:
A:局部代码块
用于限定变量的生命周期,及早释放,提高内存利用率。
B:构造代码块
把多个构造方法中相同的代码可以放到这里, 每个构造方法执行前,首先执行构造代码块。
C:静态代码块
对类的数据进行初始化,仅仅只执行一次。
(3)静态代码块 ,构造代码块 ,构造方法的顺序问题 ?
静态代码块 > 构造代码块 > 构造方法。 - pakage
1. 为什么需要package?
1)为了解决类之间的重名问题。
2)为了便于管理类: 合适的类位于合适的包!
2. package怎么用?
1)通常是类的第一句非注释性语句。
2)包名: 域名倒着写即可, 再加上模块名, 并与内部管理类。
3. 注意事项:
1)写项目时都要加包, 不要使用默认包。
2)com.gao和com.gao.car, 这两个包没有包含关系, 是两个完全独立的包。 只是逻辑上看起来后者是前者的一部分。 - JDK中的主要包
1. java.lang
包含一些Java语言的核心类, 如String、 Math、 Integer、 System和Thread, 提供常用功能。
2. java.awt
包含了构成抽象窗口工具集(abstract window toolkits) 的多个类, 这些类被用来构建和管理应用程序的图形用户界面(GUI)。
3. java.net
包含执行与网络相关的操作的类。
4. java.io
包含能提供多种输入/输出功能的类。
5. java.util
包含一些实用工具类, 如定义系统特性、 使用与日期日历相关的函数。 - Import
1. 为什么需要import?
如果不适用import, 我们如果用到其他包的类时, 只能这么写: java.util.Date, 代码量太大, 不利于编写和维护。 通过import可以导入其他包下面的类, 从而可以在本类中直接通过类名来调用。
2. import怎么使用?
1)import java.util.Date;
2import java.util.*; //导入该包下所有的类。 会降低编译速度, 但不会降低运行速度。
3. 注意要点:
1)java会默认导入java.lang包下所有的类, 因此这些类我们可以直接使用。
2)如果导入两个同名的类, 只能用包名+类名来显示调用相关类:
3)ava.util.Date date = new java.util.Date();