黑马程序员-java基础第3、4天-函数和数组
来源:互联网 发布:apache socket框架 编辑:程序博客网 时间:2024/06/05 04:29
-------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!--------------------------
函数
函数的定义
函数就是定义在类中的,具有特定功能的一段独立的小程序,函数又称为方法。
-------------------------------------------------------------------------------------------------
函数定义的格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,、、、)
{
执行语句;
return 返回值;
}
1、修饰符:包括 private、public、static、final
当函数被private修饰时,表示此函数是私有的即只在被类中被调用,外部类不能调用。
当函数被public修饰时,表示此函数是公有的即除了可以在本类中被调用,外部类也可以直接调用此函数。
当函数被static修饰时,表示此函数为静态函数,则此函数中只能直接调用静态成员。并且静态函数随着
类的加载而加载,随着类的消失而消失。
2、返回值类型:函数运行结束之后,结果的数据类型。
3、参数类型:是形式参数的数据类型。
4、形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
5、实际参数:传递给形式参数的具体数值。
6、return :用于结束函数。当函数无返回值时,此时返回值类型用void关键字表示,并且return可以写可以
不写,不写的话系统会自动给加上。return的作用即结束函数、结束功能。
7、返回值:该值会返回给调用者。
例子:
public static int getMax(int x,int y)
{
return (x>y)?x:y;
}
-------------------------------------------------------------------------------------------------------
函数的分类
1、主函数:保证一个类能够独立运行,是一个程序运行的入口,被jvm调用,主要用来调用函数。
2、构造函数:给类的对象进行初始化。此函数名和类名一样。
3、函数(方法):定义在类中,并且当被别的函数调用时才能执行。注意,函数中不能再定义函数,只能是函
数调用函数。
--------------------------------------------------------------------------------------------------------
函数的作用
1、用于定义一个功能。
2、将代码进行封装,提高代码的复用性。
---------------------------------------------------------------------------------------------------------
函数的重载和复写
1、函数的重载:在一个类中,如果出现了一个或多个同名函数时,只要他们的参数列表(参数个数或者参数类型)不
同即为该函数的重载。
2、什么时候使用重载呢?
当函数的功能相同,但是参数运算的未知内容不同,那么,这时就定义一个函数名称以表示其功能,方便阅读,
而通过参数列表(参数个数或者参数类型)的不同,来区分多个同名函数。
3、区分函数的重载:当同名函数时,只看函数的参数列表而不看函数的返回值类型。
4、函数的复写:函数的复写出现在继承中,即子类和父类有相同的函数(即函数名、参数列表以及返回值都相同),
那么就叫做子类中的函数复写了父类中的函数。
5、复写的注意事项:
静态函数只能覆盖静态函数;
复写时子类的函数权限要等于或者大于父类中函数的权限。
例子
class OverLoadDemo {public static void main(String[] args) {//print99(6);print99();}//打印所指定的num阶乘法表,具有扩展性。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+"="+y*x+"\t");}System.out.println();//换行}}//只能打印9阶乘法表。public static void print99(){for (int x=1;x<=9 ;x++ ){for (int y=1;y<=x ;y++ ){System.out.print(y+"*"+x+"="+y*x+"\t");}System.out.println();}}}
---------------------------------------------------------------------------------------------------------数组
1、定义:同一种类型数据的集合,其实数组就是一个容器。一次装起来的数据的类型必须一样。
2、特点:自动给元素进行编号,且从0开始编号。
数组一旦被定义,其数组的长度固定,不可变,所以给数组增加元素的动作要小心。
数组中元素的类型一样。
3、数组的分类:一维数组、二维数组。
----------------------------------------------------------------------------------------------------------
数组定义格式
1、一维数组
元素类型[] 数组名=new 元素类型[元素个数或数组长度];
int[] arr=new int[3];
元素类型[] 数组名=new 元素类型[]{元素1,元素2,、、、};
int arr=new int[]{1,3,5};
元素类型[] 数组名={元素1,元素2,、、、};
int[] arr={1,3,5,7};
2、二维数组
元素类型[][] 数组名=new 元素类型[二维数组长度][二维数组中每一个一维数组的长度];
int[][] arr=new int[3][4];
元素类型[][] 数组名={{1,3,5,2},{4,3,1},{5,9,8,0}};
------------------------------------------------------------------------------------------------------
内存情况
arr 是变量,所以是存放在栈内存中的。当变量在范围内使用完了之后,自动释放内存,
new 即创建对象,是存放在堆内存中的。当对象使用完了之后,变成垃圾,并通过垃圾回收机制来释放内存空间。
-------------------------------------------------------------------------------------------------------
遍历数组
1、遍历一维数组
第一种遍历方式:利用普通for循环
for (int x=0;x<arr.length ;x++ )
{
System.out.println(arr[x]);
}
第二种遍历方式:利用高级for循环
for (int arrs:arr )
{
System.out.println(arrs);
}
2、遍历二维数组
for (int x=0;x<arr.length ;x++ )
{
for (int y=0;y<arr[x].length ;y++ )
{
System.out.println(arr[x][y]);
}
}
---------------------------------------------------------------------------------------------------------
数组的应用
包括:求最大值,最小值,冒泡排序,选择排序,折半查找,进制转换
/**对数组的各种操作封装成类,以方便以后方便对数组的操作。@author 贺利英@version V1.1*/class ArrayTool {/**获取整型数组中元素的最大值,获取最大值是通过遍历数组比较得到的,所以每次比较之后最大值存起来,所以每次的最大值并不确定,所以最大值用一个变量来存储,将每次比较得到的最大值存放在此变量中。@param arr 接收一个int类型的数组。@return 会返回该数组中的最大值。*/public static int getMax(int[] arr){int max=0;for (int x=1;x<arr.length ;x++){if (arr[x]>arr[max]){swap(arr,x,max);}}return arr[max];}/**获取整型数组中元素的最大值。@param arr 接收一个int类型的数组。@return 返回此数组中元素的最小值。*/public static int getMin(int[] arr){//定义一个变量,将每次比较的最小值得角标付给min来保存。int min=0;for (int x=1;x<arr.length;x++ ){if (arr[x]<arr[min]){swap(arr,x,min);}}return arr[min];}/**对int类型的数组进行选择排序。每次用数组中的元素以此与此元素后面的元素进行比较,将最值放在此元素处。@param arr 接收一个int类型的数组。*/public static void selectSort(int[] arr){//外循环表示总共比较多少次for (int x=0;x<arr.length-1;x++ ){//内循环表示每次外循环需要进行多少次的比较for (int y=x+1;y<arr.length;y++ ){if (arr[x]>arr[y]){swap(arr,x,y);}}}}/**对数组进行冒泡排序。此排序原理,将数组中相邻的两个元素进行比较,每比较一圈之后,其最值都会出现在数组的最后的位置。@param arr 接收一个int类型的数组。*/public static void bubbleSort(int[] arr){//外循环表示总共比较多少次for (int x=0;x<arr.length-1 ;x++ ){//内循环表示每次外循环需要进行多少次的比较for (int y=0;y<arr.length-x-1 ;y++ ){if (arr[y]>arr[y+1]){swap(arr,y,y+1);}}}}/**对数组中的元素进行位置置换。@param arr 接收一个int类型的数组。@param x 要置换的位置。@param y 要置换的位置。*/private static void swap(int[] arr,int x,int y){int temp=arr[x];arr[x]=arr[y];arr[y]=temp;}/**给定一个元素,查找此数组中是否有此元素,若有的话则给出此元素在数组中的角标,否则的话,返回-1。利用折半查找法进行查找,前提:此数组是有序的。@param arr 接收一个int类型的数组。@param key 要进行查找的元素。*/public static int halfSearch(int[] arr,int key){int min=0,max=arr.length-1,mid;//前提是min角标不能大于max角标while (min<=max){//每次比较的时候找到中间位置mid=(min+max)/2;//让key和中间位置的元素进行比较if (key>arr[mid]){min=mid+1;}else if (key<arr[mid]){max=mid-1;}elsereturn mid;}return -1;//若此处写成return min;则代表此函数的功能是在数组中插入一个给定的元素, //插入之后,依然保持此数组是有序的,所以利用折半查找的方法,找出要插入此 //元素的位置。}/**利用查表法对数进行进制转换。@param num 要进行进制转换的数。@param base 在进制转换中要进行&的数@param offset 对num进行无条件右移的位数。*/public static void trans(int num,int base,int offset){//定义一个数组,用来存放在数组转化的过程中出现的各种值。char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//定义一个数组,用来存放每次进行进制转换之后的值。char[] arr=new char[32];//定义一个指针,使得到的进制转换值从数组的最后位置开始存放。int pos=arr.length;while (num!=0){//每次都将右移offset之后的数和base进行与运算,来得到相应的进制值int temp=num&base;arr[--pos]=chs[temp];//将num右移offset位num=num>>>offset;}//打印得到的进制值for (int x=pos;x<arr.length ;x++ ){System.out.println(arr[x]);}}/*进行优化之后的代码,即利用字符串缓存来进行存储每次得到的数。public static void trans(int num,int base,int offset){char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};StringBuffer sb=new StringBuffer();while (num!=0){int temp=num&base;sb.append(chs[temp]);num>>>offset;}System.out.println(sb.reverse());}*/}
-------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!--------------------------
详情请查看:http://edu.csdn.net
0 0
- 黑马程序员-java基础第3、4天-函数和数组
- 黑马程序员--java基础--函数和数组
- 黑马程序员---Java基础---函数和数组
- 黑马程序员_java编程基础第3天函数 数组
- 黑马程序员--Java基础学习(循环和函数)第三天
- 【黑马程序员】-----java基础语法-----函数和数组
- 黑马程序员——java基础之函数和数组
- 黑马程序员 Java基础(函数,数组)
- [黑马程序员]2 JAVA基础-- 函数、数组
- 黑马程序员-----java基础语法 函数数组
- 黑马程序员——Java基础语法(二)---函数--第3天--第42-46集
- 黑马程序员-java基础 循环和数组
- 黑马程序员--------Java基础-----数组和类
- 黑马程序员 Java基础学习笔记3 循环和数组
- 黑马程序员——Java基础语法(三)---数组(下)--第4天--第48-61集
- 黑马程序员——Java基础语法(三)---数组(上)--第3天--第47集
- 黑马程序员---Java基础--04天(数组)
- 黑马程序员--第一阶段2.java编程基础--第4天
- Flex4 加载模块Alert弹出框背景透明问题
- 应该在什么时候使用Hadoop
- orcal sql分页
- 获得oracle存储过程以及函数的依赖对象
- usb server/虚拟化识别加密狗/集中管理加密狗/共享加密狗/远行连接加密狗
- 黑马程序员-java基础第3、4天-函数和数组
- 如何实现jQuery的Ajax文件上传
- vc 编译开关 使用详解
- MySQL外键约束
- c++内存模型一
- 时钟类型
- Linux用户空间与内核空间
- 批评孩子的六个专门小技巧
- iphone 开发中给方法上锁