============================ 大纲下载地址上传了,为方便大家学习可以去下载额: https://yunpan.cn/cky6U4jKVk8vv 访问密码 6919 (注意是360云盘额) ============================ 方法概述和定义:
方法(Method),有人称之为函数(function),表示一个功能. 定义: 程序中能完成独立功能,可重复使用的一段代码的集合; 作用: 解决了代码功能重复问题. 方法格式: [修饰符] 返回值类型 方法名字([类型 变量1,类型变量2 ,....]) { 方法体 [return 值]; } -------------------------------------- 方法中术语: 修饰符: 方法的访问权限等,静态的(static). 返回值类型: 当方法操作完毕之后,可能会给调用者返回一个结果.如果没有返回值,此时我们把返回值类型声明为void. 如果方法定义了返回类型,则方法体必须使用return返回该类型的一个值. 如果方法使用void来表示返回值类型,此时在方法体中不需要使用return. 方法名字: 命名的使用符合标识符规范,使用一个动词或者动词短语表示,首字母小写,如:sendMsg(发生信息),register(注册) 形式参数: 其实是多个变量,统称为形参,包括:参数个数,参数的类型,参数的顺序,此时参数的名字没有实质的意义. 方法签名: 方法签名 = 方法名字 + 形式参数; 在同一个类中,多个方法的签名不能相同. 推论:1)方法必须定义在类中,2)方法之间是兄弟关系(平行). 实际参数: 调用方法的时候,实际传递的参数值. 方法只有被调用才会执行!方法可以被重复调用! 如何设计方法: 1):如何确定方法的参数列表. 在完成该功能的时候,有哪些未知的元素参与,此时未知的元素就作为形式参数. 2):如何确定方法的返回值类型. 完成该功能之后是否需要给调用者返回一个结果. 如果不会返回结果,此时使用void声明. 若方法有返回,一般的,调用者都会去接收结果. 实例:求两个整数之和: 1):未知的元素:两个加数分别是啥? 2):求和,最终运算之后,必须给调用者返回一个整数结果. long getSum(int x,int y) { int ret = x + y; return ret; //返回给调用者 } 调用者: long ret = getSum(3,4);//实参 ------------------------------------------------- 方法特点-执行流程 使用2个案例解释方法执行流程如下: 发短信: 登录: 方法重载设计: 在同一个类中,分别定义两个整数,小数之和的方法. 求两个整数之和: static int getSum1(int x,int y){....} 求两个小数之和: static double getSum2(double x,double y){....} 求一个整数和一个小数之和: static double getSum3(int x,double y){....} -------------------------------------------- 如此设计,没有问题,但是调用者就很痛了,因为要去记忆getSum1表示整数之和,getSum2表示小数之和..... 分析问题:上述方法,都是求两个数之和,仅仅只是参数的类型不一样,带来了方法的名字也不一样. 解决方案:方法的重载. 方法重载(overload): 解决:同一种功能的多个方法,因为参数列表不同,带来方法名称不同的问题. 遵循的原则: 两同一不同: 两 同: 方法必须在同一个类中,并且方法的名字相同. 一不同: 方法各自的参数列表不同(参数类型,参数个数,参数顺序). 遵循了两同一不同原则的多个方法,之间就属于重载关系. 和返回类型没有关系. ------------------------------------------------------------- System.out.println的println方法可以打印出任意的数据类型,甚至不传递参数. 断言:println方法存在重载设计. 看看你是否清楚重载的概念没有,实战一下吧: 在同一个类中: void doWork(int a,char b,boolean c){} 下列方法哪些是上述doWork方法的重载方法。 a. void doWork(char b, int a, boolean c){}// YES b. int doWork(boolean a,char c ,int b){}// YES c. void doWork(int a,char b,double c){}// YES d. void doWork(int x,char y,boolean z){}// NO e. int doWork(int x,double y){} // YES f. int doWork(int x, char y,boolean z){} // NO 方法递归操作: 读高中学数列的时候,我们见过斐波纳契数列,其通项公式为: F(0)=0,F(1)=1,Fn=F(n-1) +F(n-2)(n>=3,n∈N*), 现在求F(5)的值,怎么做呢? 观察:这个数列从第三项开始,每一项都等于前两项之和。 要求F(5)的值,肯定要先求F(4)和F(3)的值,而求F(4)的值又需要求F(3)和F(2)的值... ... 解决办法1: 依次求出F(1)、F(2)、F(3)、F(4)值,再处理。 ------------------------------------------ 递归(recursion)操作:汉诺塔 递归操作得有出口,否则就是死循环.
--------------------------------------------------- 引出数组和数组定义: 为什么使用数组: 问题1: int age = 17; 声明变量时,每一个单独的变量都要对应一个变量名,但现在要处理一组相同类型的数据时,如要表示班上100个人的年龄,绝对不希望定义100个变量来表示每个人的年龄,那怎么办呢?再看下列例子。 问题2: 求两个数之和,方法得有2个参数,求5个数之和,需要重载一个方法,方法有5个参数,求100个数之和、1000个数之和、10000个数之和,方法的参数列表会很长很长,而且方法得有很多个,而且还得去记住哪个方法是两个参数的,哪个方法是三个参数的。这样总感觉很不爽,仔细分析这个功能,其实就是求一组数值的和而已,这个方法并不在乎具体是多少个加数,它只在乎需要把哪些数加起来。 ----------------------------------------- 什么是数组(array),容器: 所谓数组(一组数据),是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种数据形式。这些按一定顺序排列的同类型数据的集合称为数组。而数组中的每一个数据称之为数组元素(element),数组中的元素以索引(index)来表示其存放的位置,索引从0开始,步长是1,有点像Excel表格的行号,逐行递增。 好比宾馆的房间. Java的引用数据类型(类/接口/数组): -------------------------------------- 变量的定义: 数据类型 变量名; 只能存储一个数据 int age; 数组的定义: 元素的类型[] 变量名; 可以存储一组数据 int[] ages; 此时:可以把int[]看做是一种数据类型,int的数组类型. 此时代表含义:ages数组中可以存放多个int类型的值/变量. 定义的另外一种方式: 元素的类型 变量名 []; int ages[]; 非常不推荐 数组的初始化操作:开辟内存空间,存储数据. 数组必须先初始化才能使用. 当数组初始化之后,数组的长度就已经确定了,不能更改. 静态初始化: 程序员自己设置需要存储的数据(元素),而数组的长度由系统决定. 语法: 元素类型[] 数组名称 = new 元素类型[]{元素1,元素2,元素3,....}; 如: int[] nums = new int[]{1,3,5,7,9}; 更简单的语法: int[] nums = {1,3,5,7,9}; 动态初始化: 程序员指定数组的长度,而数组的元素的默认值由系统决定. 语法: 元素类型[] 数组名称 = new 元素类型[length]; 如: int[] nums = new int[5]; 如果事先知道需要存储哪些数据,---->使用静态初始化. 若事先不知道存储哪些数据--------->动态初始化. 注意: 不能同时使用静态和动态初始化. int[] nums = new int[5]{1,3,5,7,9}; 数组的基本操作:
数组的基本操作: 0):打印数组对象,会打印出数组的hashCode值,看不出来数组元素值. 1):获取/设置/遍历元素元素: 获取数组元素值: 数组元素类型 变量 = 数组名[index]; 设置数组元素值: 数组名[index] = 值; 迭代数组元素: 使用循环,一般的,首选for循环. 2):数组的长度(使用length属性): int len = 数组名.length;//获取当前数组有几个元素个数 3):数组的索引从0开始,逐一递增. 数组索引的范围:[0,数组长度-1] 4):操作数组常见异常(错误): ArrayIndexOutOfBoundsException:数组的索引越界,不在索引范围之内. NullPointerException:空引用异常,操作了一个为null的数组变量. 5):获取数组最大最小元素 求最大值: getMax 求最小值: getMin 6):打印数组元素: 期望:打印格式:[A, B, C, D, E] 7):逆序排列数组元素: [A, B, C, D, E]--->[E, D, C, B, A] 8):元素出现索引(第一次/最后一次) 详细数组方法可以参考我们jdk API文档额: 总结今天讲的内容如下了:
|