9.面向对象(1)

MODULE 9 面向对象

1.会定义静态成员以及会调用静态成员

2.会使用可变参数(会给可变参数传参)

3.会二分查找(手撕)

4.会冒泡排序(手撕)

5.会debug的使用

一、static关键字

(一)static的介绍以及基本使用

1.概述:static是一个静态关键字

2.使用:

(1)修饰一个成员变量:

static 数据类型 变量名

(2)修饰一个方法:

修饰符 static 返回值类型 方法名(形参){

方法体

Return 结果

}

(3)调用静态成员方法:

类名直接调用(不用new对象)

(4)静态成员特点:

A.静态成员属于类成员,不属于对象成员(非静态的成员属于对象 成员)

B.静态成员会随着类的加载而加载

C.静态成员优先于非静态成员存在内存中

D.凡是根据静态成员所在的类创建出来的对象,都可以共享这个静 态成员

(二)static修饰成员的访问特点

1.在静态方法中能直接访问非静态成员嘛?不能

想要调用:new对象调用

2.在非静态方法中能直接访问静态成员嘛?能

(1)同类:

直接调用

类名调用

(2)不同类:

类名调用

3.在静态方法中能直接访问静态成员嘛?能

(1)同类:

直接调用

类名调用

(2)不同类:

类名调用

4.在非静态方法中能直接访问非静态成员嘛?能

(1)同类:

直接调用

new对象调用

(2)不同类:

new对象调用

总结:

(1)不管在不在同一个类中,非静态成员都可以new对象调用

(2)不管在不在同一个类中,静态成员都可以类名调用

问题一:既然static成员那么好使(类名直接调用),那么我们在实际开发中, 能不能将所有的成员都定义成静态

不能

由于静态成员会随着类的加载而加载,如果将所有的成员都变成静态 的,那么类一加载,静态成员都会进内存,会大量占用内存空间

问题二:那么静态成员啥时候定义呢?

一般情况下,我们在抽取工作类的时候可以将工具中的所有成员都定 义成静态的

问题三:啥时候定义工具类?

比如我们在写代码的过程中,发现有的功能在反复实现,代码,功能 一样,此时就可以抽取出来,形成工具类

二、可变参数

1.需求:

定义一个方法,实现n个整数相加

2.分析:

方法参数位置,只明确了参数类型,但是不明确参数个数,此时就可以定义成 可变参数

(一)介绍和基本使用

1.定义格式:

数据类型...变量名

2.注意:

(1)可变参数的本质是一个数组

(2)参数位置不能写多个可变参数,而且当可变参数和其他普通参数一起使 用时,可变参数需要放到列表最后

三、递归

1.概述:方法内部自己调用自己

2.分类:

(1)直接递归:

public static void method(){

method()

}

(2)间接递归:

A(){

B()

}

B(){

A()

}

(3)注意:

A.递归必须要有出口,否则会出现“栈内存溢出”

B.递归即使有出口,递归次数不要太多

3.练习:

输出3到1

计算n的阶乘

斐波那契数例

四、数组常见算法

(一)数组翻转

1.概述:数组对称索引位置上的元素互换

(二)冒泡排序

数组的排序,是将数组中的元素按照大小进行排序,默认都是以升序的形式进行排序,数组排序的方法很多,比如冒泡排序

排序都是要进行数组元素大小的比较,再进行位置的交换,冒泡排序是采用数组中相邻元素进行比较换位

(三)二分查找

1.前提:数组中的数据必须是有序的

2.查询思想:

A.老式查询:遍历数组,一个一个比较 -> 查询效率慢

B.二分查找:每次找中间索引对应的元素进行比较查询(每一次查询少一半数据)

五、对象数组

(一)对象数组

1.需求:定义一个长度为3的数组,存储3个Person对象,遍历数组,将三个Person对象中的属性值获取出来

六、方法参数

(一)基本数据类型作为方法参数传递

基本类型做方法参数传递,传递的是值,不是变量本身

方法运行:压栈

方法运行完毕:弹栈 -> 释放栈内存

(二)引用数据类型作为方法参数传递

引用数据类型做方法参数传递时,传递的是地址值

七、命令行参数

八、其他操作

(一)快速生成方法

1.要求先定义再调用,可以先调用

A.快捷键:Alt + 回车

2.快速将一段代码抽取到一个方法中:

A.选中要抽取的方法

B.按ctrl+alt+m

(二)debug测试

1.概述:调试代码的一种操作

2.作用:能清楚的看到每个变量在代码执行过程过中的变化去找错

posted @ 2024-09-05 19:47  dededea  阅读(3)  评论(0编辑  收藏  举报