Java总结二
方法
方法是什么?
- 实现一个具体的需要需要一个逻辑过程, 方法就是将这个实现过程做一个整体的封装, 方便以后直接调用
什么时候要用方法?
- 当你有段代码可能会经常用到, 而你不想重复一直写的时候
方法解决了什么问题?
- 重复代码
- 提高了可维护性
Java中怎么定义方法
-
无参数、无返回值
-
无参数、有返回值
-
有参数、无返回值
-
有参数、有返回值
-
方法通用定义语法
- public static 返回值类型 方法名称(参数列表) {
方法体;
} -
返回值
-
有返回值
-
指定类型
- 八大基本类型
- 任意的引用类型
-
-
没有返回值
- void
-
-
参数
-
形参
-
意指 形式参数
- 为了占位, 表示方法对外声明,我需要什么什么参数
-
形参 是在方法定义中存在
-
-
实参
-
意指 实际参数
- 在方法调用时,实际传入进来的,带有真实值的参数
-
实参 实在方法调用中存在
-
-
可变参数
-
定义的语法
- 数据类型… 形参名称
-
需要注意的事项
-
- 一个方法中最多只能出现一个可变参数
-
- 方法中如果有多个参数,可变参数必须放到最后
-
-
它的本质是什么?
-
可变参数底层就是通过数组来实现的
-
在方法中可以当成数组来使用
-
在调用的时候非常方便
- 不传参数
- 传一个参数
- 传n个参数
- 传个数组
-
-
-
方法重载
-
什么是方法重载
- if(名字一样 && (形参类型不一样 || 形参个数不一样)) {
是方法重载
}
- if(名字一样 && (形参类型不一样 || 形参个数不一样)) {
-
方法重载解决了什么问题?
-
- 可以有效减少方法名的数量
- 对于方法定义者来说, 不用挠头了
- 对于方法调用者来说, 不用喝六个核桃(可以少记很多方法)
-
类和对象
类的概念
- 具有相同特征和行为的事物的抽象(类就是什么类型)
对象的概念
- 万物皆对象(事物就是对象)
类的定义
-
属性
- 对象具有的各项功能
-
方法
- 对象可以执行的操作
对象的使用
-
对象的创建
- 类名 对象名 = new 类名();
-
对象的操作
-
属性
-
读
- 对象名.属性名 = 值;
-
写
- 数据类型 变量名 = 对象名.属性名;
-
-
方法
-
调用
-
对象名.方法名();
- 如果方法有参数,在小括号内写上实参。如果方法有返回值,可以用变量接收返回值。
-
-
-
-
对象和类的关系
- 类是对对象的抽象,类用于描述对象,是对象的数据类型,定义有哪些属性、行为。
- 对象是类的具体体现,是类的实例方法
对象在内存中的存储结构
-
对象名 -> 栈
-
对象本身 -> 堆
-
不同的对象名指向同一个内存空间
- 任何一个变量都可以修改对象的内容
OOP 和 POP的区别和适用场景
- 面向过程(POP):以功能为中心
- 面向对象(OOP):以事物(对象)为中心
面向对象特性
封装
-
目的
- 为了将类中的属性保护起来
-
封装的步骤
-
- 将类中的属性变成私有(private)
-
- 对外提供成对的读写方法(geter/setter)
-
读方法
-
非boolean类型
- get属性名(首字母大写)
-
boolean类型
- is属性名(首字母大写)
-
-
写方法
- 非boolean类型
- boolean类型
-
-
关键字
-
private
-
- getter、setter封装了实例的私有属性。
-
- 方法封装了功能的实现细节。
-
- 类封装了属性和方法。
-
-
this
- this修饰的变量用于指代实例变量。,调用方法的对象
-
-
构造方法
-
构造方法是一种特殊的方法
-
作用: 用来创建(new)对象
-
构造方法的定义语法
- public 类型(参数列表) {
-
}
-
Java中每一个类都有一个默认的无参构造方法
-
构造方法重载
-
构造方法的注意事项
- 一但定义了构造方法,就会覆盖系统默认添加的公开无参构造方法
-
构造方法的调用
- 在new对象时,就会隐式调用构造方法
继承
-
什么是Java中的继承
- 继承是描述类A is 类B这么个关系
-
Java中的继承特点
-
单继承
- 子类只能继承一个父类
- 多个子类类可以都继承同一个父类
-
-
什么东西可以被子类继承?
-
实例变量
- 包括私有实例变量(但是不能访问)
-
实例方法
- 包括私有实例方法(也不能调用)
-
构造方法
-
父类的构造方法只能在子类的构造方法中调用
- super()
-
父类的构造方法不能在子类new对象时直接调用
-
-
静态方法
-
静态属性
-
-
super
-
super的用途
- 用于访问父类中的方法和属性
-
super和this的区别
- this是对象,访问本类中的实例变量、方法
- super是关键字,访问父类中的实例变量、方法(非私有)
-
-
方法重写
-
什么是方法重写
- 在继承关系里,父类的实现满足不了子类的需求,子类可以重新实现父类中定义的方法
-
方法重写的要求
- 方法重写的两个方法返回值、方法名、参数列表必须完全一致
-
方法重写和方法重载的区别
- 方法重载:在同一个类中,如果多个方法具有相同的方法名,但是参数个数或者参数类型不同(或都不同),这称为方法的重载。
- 方法重写:在继承关系里,父类的实现满足不了子类的需求,子类可以重新实现父类中定义的方法,这是方法重写。
-
多态
-
多态的概念
- 指的是对象的多态性,同一对象在不同时刻表现出来的不同形态。
-
多态的要求
-
- 必须具体继承或者实现关系
-
- 必须存在方法重写
-
- 让父类引用指向具体的子类对象
-
-
多态的访问特点
-
访问变量
- 编译时、运行时看左边,
-
访问方法
- 编译时看左边,运行时看右边,
-
-
使用场景
-
- 方法参数多态化
-
- 数组元素多态化
-
- 方法返回值多态化
-
-
多态的优势和缺点
- 好处:提高了程序的扩展性,容易设计出通用的代码
- 弊端:屏蔽了子类独有的功能,但可以强转类型
数组
二维数组
-
格式::数据类型 [] [] 数组名
-
初始化
- 动态初始化:数据类型[] [] 数组名 = new 数据类型[第一维元素个数] [第二维元素个数];
- 静态初始化:数据类型[] [] 数组名 = new 数据类型[] []{ {值1,值2,值3…} ,{值1,值2,值3…} ,…};
-
二维数组遍历
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j] + " ");}} -
数组的操作
-
1、数组求值、平均数
-
2、查找数组元素
-
3、折半查找
-
4、数组排序
-
5、冒泡排序、选择排序
-
6.打印数组,数组的遍历
-
for(int i =0;i<array.length;i++){ System.out.print(array[i]+" "); };
-
数组的特点
- 数组中的元素具有相同的数据类型。
- 数组的容量是确定的。—创建数组的时候确定其容量。
数组的格式
-
动态初始化格式:
数据类型[] 变量名 = new 数据类型[数组长度]; -
静态初始化格式:
int[] ages = new int[]{3, 4, 4, 3, 2, 4, 3, 4, 3, 3};
数组的内存分配
- 栈区:用于存放局部变量的内存区域。
- 堆区:存放对象的区域
- 定义的数组赋值给新数组,两个数组在堆区的存放地址相同
数组注意事项
-
数组下标越界
- 下标的值超出了下标的取值范围
-
空指针异常
- 数组指向了一个空地址
数组的遍历
-
for(int i = 0; i < arr.length; i++) { System.out.println(arr[i]);}