------- android培训、java培训、期 待与您交 流! ----------
第二章: 方法与数组
第一部分:方法
1、函数定义和特点:
1.1、函数就是定义在类中的具有特定功能的一段小程序,函数也成为方法;1.2、函数的出现的好处为了提高代码的复用性,对代码进行抽取;1.3、函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2...){执行语句;return返回值;//就是这个函数所运行后得到的结果,把这个结果返给调用这个函数的,谁调用这个函数就返回给谁;}返回值类型:函数运行后的结果的数据类型。参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。
参数列表包括:参数类型和形式参数,说的简单点就是在定义一个变量;
1.4 函数实例
运行的结果:class FunctionDemo { // 先运行主函数; public static void main(String[] args) { // 把4传进方法里面即可;把4传给了变量的num int x = getResult(4); System.out.println("x="+x); } // 函数只有在被调用才能被执行; public static int getResult(int num) { // 把运算完的结果返给主函数; return num * 3+5; } }
1.6、函数的特点:
- 定义函数可以将功能代码进行封装
- 便于对该功能进行复用
- 函数只有被调用才会被执行
- 函数的出现提高了代码的复用性
- 对于函数没有具体返回值的情况,返回值类型用关键 字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
1.7、函数的返回值类型的说明:
- 当函数运算后,没有具体的返回值时,这时返回值类型用一个特殊的关键字来标识,该关键字就是void,
- void代表的是函数没有具体的返回值的情况;
- 当函数的返回值类型是void时,函数的return语句可以省略不写;
1.8、函数是可以调用函数的,但是函数里面是不可以定义函数的;
2、函数的应用
2.1、如何定义函数?
函数是一个独立的功能,那么要先明确该功能的运算结果;-->这个是明确返回值类型;
在明确定义该功能的过程中是否需要未知的内容参与运算。-->这个是在明确参数列表;2.2、示例:
/* 为了方便用户的需求,用用户来指定加数和被加数; 思路: 1、功能结果是一个和,返回值类型是int型 2、有未知内容参与运算,有两个,这个两个未知内容的类型是int型; */ class FunctionDemo2 { public static void main(String[] args) { int sum = getSum(7,9); System.out.println("sum="+sum); } public static int getSum(int x,int y) { return x+y; } }
运算的结果:
2.3、将一个函数封装起来,方便以后进行复用;
2.4、函数的练习:
|--定义一个功能,用于打印一个矩形;
运行后的结果:/* 语句都要定义在函数内; */ class FunctionTest { public static void main(String[] args) { // 调用已经封装好的方法; draw(4,7); printHr(); draw(5,8); printHr(); // print99(); } public static void draw(int len,int wid) { // for的嵌套循环; for(int x=0 ;x<=len ;x++) { for(int y=0;y<=wid;y++) { System.out.print("*"); } System.out.println("*"); } } // 封装一个分隔线的方法,以便复用; public static void printHr() { System.out.println("------------------"); }
|--2、定义一个九九乘法表;/* 语句都要定义在函数内; */ class FunctionTest { public static void main(String[] args) { // 调用已经封装好的方法; draw(4,7); printHr(); draw(5,8); printHr(); // print99(); } //2、定于一个九九乘法表; public static void print99() { for (int x=1;x<=9 ;x++ ) { for (int y=1 ;y<=x ;y++ ) { System.out.print(y+"*"+x+"="+x*y+"\t"); } System.out.println(); } }
运行后的结果:
3、函数的重载
3.1、定义:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
|--函数形同的情况下,我们是通过它们的参数列表的不同来区分函数的;换句话说重载是只和参数列表有关系,言外之意就是和返回值的类型的类型是没有关系的;3.2、何时用重载:当定义的功能相同,但是参与运算的未知内容不同,那么,这时就要定义一个函数名称来表示其功能,方便阅读,而通过参数列表的不同来区分函数的不同;
3.4、示例演示:
class FunctionOverload { public static void main(String[] args) { // 调用已经封装好的方法; print99(5); } // 函数的重载 public static void print99(int num) { for (int x=1;x<=num ;x++ ) { for (int y=1 ;y<=x ;y++ ) { System.out.print(y+"*"+x+"="+x*y+"\t"); } System.out.println(); } } //2、定于一个九九乘法表; public static void print99() { // 调用带有参数的函数,这样提高的代码的复用性; print99(9); } }
运算后的结果:
第二部分:
1、数组
1.1、数组的定义:
|--同一种类型数据的集合。其实数组就是一个容器。数组是用于存储数据的一种方式;
|--数组中可以装任意类型的元素,但是一次装进来的只能是同一种类型的元素;
1.2、数组的好处:
用数组存的元素可以自动的将这些元素进行编号,方便用于操作数组,编号是从0开始的;
1.3、一维数组的格式:
|--元素类型[] 数组名= new 元素类型[元素个数或数组长度];如:int[] arr = new int[5];
|--元素类型[] 数组名= new 元素类型[]{元素,元素,……};
1.4、数组类型是引用数据类型,arr是引用数据类型;
1.5、数组的内存结构:java程序在运行时,需要分配内存中的空间,分别是:栈内存、堆内存、方法区、本地方法区和寄存器;每一个空间里面处理数据的方式是不一样的;
|--栈内存的特点:数据使用完毕后,会自动释放;局部变量都是在栈内存里面;定义在方法,参数和for循环里面的变量都是局部变量;
|--堆内存的特点:
里面存放的都是实体,凡是new出来的都在堆内存里面;包括数组和对象;堆内存中的每一个实体都有一个存放位置;
堆内存中的实体都有默认的初始化值,这个默认值要根据数组的类型:int:0,double:0.0,float:0.0f,boolean:false;
1.6、数组在内存中的结构,如下图所示:
1.7、数组的异常:
class ArrayDemo2 { // 角标越界异常的演示; public static void main(String[] args) {/* int[] arr = new int[3]; System.out.println(arr[3]); */ int[] arr = null; System.out.println(arr[0]); } }
异常报错:
java.lang.ArrayIndexOutOfBoundsException:角标越界异常:操作数组时,访问到了数组中的不存在的角标;
java.lang.NullPointerException:还有一个是空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体;
1.8、二维数组:
|--顾名思义就是数组里面还有数组;
|--格式:
格式1:int[][] arr = new int[3][2];
格式2:格式2:int[][] arr = new int[3][];
第三部分:
总结:
1、函数封装的好处在于可以方便功能的复用,提高了代码的复用性;2、当函数运算时,没有具体返回值类型时,这是就用一个关键字void作为返回值类型;函数的return语句可以省略不写;3、函数的重载特性:用的是同一个函数名,只是参数列表不同,重载的好处可以方便阅读,而通过参数列表的不同来区分函数的不同;4、数组的好处:数组是通过角标来定义元素的,可以方便操作数组里面的元素;5、数组包括一维数组和二维数组;6、数组里面的异常要知道;