[TOC]
# 面向对象思想特点
面向对象是基于面向过程的编程思想
- 面向过程:强调的是每一个功能的步骤
- 面向对象:强调的是对象,然后由对象去调用功能
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备了功能的对象。
# 类与类之间的关系
- 继承关系
- 关联关系
# 类与对象的关系
- 类(class)和对象(object)是面向对象的核心概念。
- 类是对一类事物描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
~~~
“万事万物皆对象”
~~~
# java类及类的成员
属 性:对应类中的成员变量
行 为:对应类中的成员方法
Field = 属性 = 成员变量,Method = (成员)方法 = 函数
## 创建java自定义类步骤:
1.定义类(考虑修饰符、类名)
2.编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
3.编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
## 成员变量(属性)和局部变量的区别
### 成员变量
- 成员变量定义在类中,在整个类中都可以被访问。
- 成员变量分为类成员变量和实例成员变量,实例变量存在于对象所在的堆内存中。
- 成员变量有默认初始化值。
- 成员变量的权限修饰符可以根据需要,选择任意一个
### 局部变量
- 局部变量只定义在局部范围内,如:方法内,代码块内等。
- 局部变量存在于栈内存中。
- 作用的范围结束,变量空间会自动释放。
- 局部变量没有默认初始化值,每次必须显式初始化。
- 局部变量声明时不指定权限修饰符
## 类的访问机制
- 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过。)
- 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员
## 匿名对象
- 我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。如:new Person().shout();
- 使用:如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。我们经常将匿名对象作为实参传递给一个方法调用。
## 方法
- 什么是方法(函数)
- 方法只有被调用才会被执行
- 方法是类或对象行为特征的抽象,也称为函数。
- Java里的方法不能独立存在,所有的方法必须定义在类里。
~~~
修饰符 返回值类型 方法名(参数类型 形参1,参数类型 形参2,…..{
程序代码
return 返回值;
}
~~~
### 其中:
- 形式参数:在方法被调用时用于接收外部传入的数据的变量。
- 参数类型:就是该形式参数的数据类型。
- 返回值:方法在执行完毕后返还给调用它的程序的数据。
- 返回值类型:方法要返回的结果的数据类型。
- 实参:调用方法时实际传给函数形式参数的数据。
## 重载的概念
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
### 重载的特点
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
## 方法的参数传递
- 方法,必须有其所在类或对象调用才有意义。若方法含有参数:
- 形参:方法声明时的参数
- 实参:方法调用时实际传给形参的参数值
- Java的实参值如何传入方法呢?
- Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
## 体会可变参数的个数
说明:
- 1.可变参数:方法参数部分指定类型的参数个数是可变多个
- 2.声明方式:方法名(参数的类型名...参数名)
- 3.可变参数方法的使用与方法参数部分使用数组是一致的
- 4.方法的参数部分有可变形参,需要放在形参声明的最后
# 面向对象特征之一:封装和隐藏
1.Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
- 隐藏一个类中不需要对外提供的实现细节;
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
- 便于修改,增强代码的可维护性
2.将某段实现特点功能的代码放到方法中(也叫封装)
## 类的成员之三:构造器(构造方法、构造函数)
### 构造器的特征
- 它具有与类相同的名称
- 它不声明返回值类型。(与声明为void不同)
- 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
### 构造器的作用
创建对象;给对象进行初始化
### 根据参数不同,构造器可以分为以下两个类
- 隐式无参构造器(系统默认提供)
- 显式定义一个或多个构造器(无参、有参)
**注意**:
- Java语言中,每个类都至少有一个构造器
- 默认构造器的修饰符与所属类的修饰符一致
- 一旦显式定义了构造器,则系统不再提供默认构造器
- 一个类可以创建多个重载的构造器
- 父类的构造器不可被子类继承
## 构造器重载
- 构造器一般用来创建对象的同时初始化对象。
- 构造器重载使得对象的创建更加灵活,方便创建各种不同的对象。
- 构造器重载,参数列表必须不同
# 关键字——this
在java中,this关键字比较难理解,它的作用和其词义很接近。
- 它在方法内部使用,即这个方法所属对象的引用;
- 它在构造器内部使用,表示该构造器正在初始化的对象。
- this表示当前对象,可以调用类的属性、方法和构造器
# String类的构造方法
- String(String original):把字符串数据封装成字符串对象
- String(char[] value):把字符数组的数据封装成字符串对象
- String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象
## 创建字符串对象两种方式的区别
通过构造方法创建的字符串对象和直接赋值方式创建的字符串对象有什么区别呢?
- 通过构造方法创建字符串对象是在堆内存。
- 直接赋值方式创建对象是在方法区的常量池。
### ==
- 基本数据类型:比较的是基本数据类型的值是否相同
- 引用数据类型:比较的是引用数据类型的地址值是否相同
## String类的判断功能
- boolean equals(Object obj):比较字符串的内容是否相同
- boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
- boolean startsWith(String str):判断字符串对象是否以指定的str开头
- boolean endsWith(String str):判断字符串对象是否以指定的str结尾
## String类的获取功能:
- int length():获取字符串的长度,其实也就是字符个数
- char charAt(int index):获取指定索引处的字符
- int indexOf(String str):获取str在字符串对象中第一次出现的索引
- String substring(int start):从start开始截取字符串
- String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end
## 转换方法演示
- char[] toCharArray():把字符串转换为字符数组
- String toLowerCase():把字符串转换为小写字符串
- String toUpperCase():把字符串转换为大写字符串
## stringBuilder类概述
StringBuilder:是一个可变的字符串。字符串缓冲区类。
String和StringBuilder的区别:
- String的内容是固定的
- StringBuilder的内容是可变的
## StringBuilder类的常用方法
### A构造方法
~~~
new StringBuilder()
~~~
### B成员方法
~~~
public int capacity():返回当前容量 (理论值)
public int length():返回长度(已经存储的字符个数)
public StringBuilder append(任意类型):添加数据,并返回自身对象
public StringBuilder reverse():反转功能
~~~