---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------
函数
函数的定义
• 函数就是定义在类中的具有特定功能的一段独立小程序。
• 函数也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型形式参数1,参数类型形式参数2,)
{
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。函数的特点
1. 定义函数可以将功能代码进行封装
2.便于对该功能进行复用
3.函数只有被调用才会被执行
4 .函数的出现提高了代码的复用性
5.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
• 函数中只能调用函数,不可以在函数内部定义函数。
• 定义函数时,函数的结果应该返回给调用者,交由调用者处理。
/*
*
如何定义一个函数呢?
1,既然函数是一个独立的功能,那么该功能的运算结果是什么先明确
这是在明确函数的返回值类型
2,在明确在定义该功能的过程中,是否需要未知的内容参与运算。
这是在明确参数的类型和参数个数
//需求:定义一个功能。完成3+4的运算。并将结果返给调用者
//1.明确功能的结果,是一个整数的和。
//2,在实现该功能的过程中是否有未知内容参与运算,没有。
//其实这两个功能就是在明确函数的定义
//1,是在明确函数的返回值类型。
//2,明确函数的参数列表(参数类型,参数个数)
*
*/
public class _08函数应用 {
public static void main(String[] args)
{
int sum = getSum(5,6);
System.out.print(sum);
}
//定义两个数相加的方法
public static int getSum(int x,int y)
{
return x+y;
}
//定义判断两个数是否相同的方法
//思路:1,明确结果,结果是boolean 2,功能是否有未知内容参与运算,有,两个整数
public static boolean compare(int a,int b)
{
return (a==b)? true: false;//第一种方式:三元表达式
//return a==b; 第二种方式
}
//需求:定义功能,对两个数进行比较,获取较大的数
public static int getMax(int a,int b)
{
return (a>b)? a:b;
}
}
/**
*什么时候用重载?
*当定义的功能相同时,但参与运算的未知内容不同时,
*这时就定义一个函数名称以表示其功能方便阅读,而通过参数列表的不同来区分多个不同函数
*/
package cn.jbit.output;
public class _09函数重载 {
public static void main(String[] args)
{
Add(4,5);
Add(6,5,5);
print99(5);
}
//定义两个数相加的和
public static int Add(int x,int y)
{
return x+y;
}
//定义三个数相加的和
public static int Add(int x,int y,int z)
{
return x+y+z;
}
//打印99乘法表
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();
}
}
//(提高代码的复用性)
public static void print99()
{
print99(9);//此方法为打印小九九表,简写调用上面的方法
}
}
数组
数组在内存中的结构
解析:当创建一个数组时,x 在栈中,new int[3]在堆中,并且它们每个数组元素的初始值=0,并生成一个十六进制的地址值0x0079,传给栈中的x,当栈中x拿到地址值时,再去访问堆中的数组元素。
如果将 x = null; 那么栈中的地址值和数组元素将会被视为垃圾,但是它不会立即进行清除,Java虚拟机它会不定时的启动一个垃圾回收机制,将数组实体在堆内存中清除。
注意:只要是new出来的实体东西,都不在栈里面,在堆里面,堆里面存放的是实体,实体里面包括数组和对象。
因为方便计算,每个内存区的计算方式不同,栈内存计算像x = 3;这种局部变量,当数据使用完,所占空间会自动释放,而堆内存用于计算new出来的数组对象:int[]x = new int[3]。
总结:
堆内存的特点:1. 生成16进制地址值0x0012 2. 默认化初始值为0 3.垃圾回收机制
堆与栈的不同:栈――自动释放内存空间
堆――被虚拟机不定时启动的垃圾回收机制,进行释放
</pre><pre code_snippet_id="383349" snippet_file_name="blog_20140609_4_4156700" name="code" class="java">//获取数组中的最大值,最小值
/*
思路:
1.获取最大值需要一个临时存储的变量;
2.让每一个变量值与这个临时变量进行比较
3.全部比较完成,那么该变量中存储的就是数组中最大值了
*/
public class _03遍历数组中最大值 {
public static void main(String[]args)
{
int[] arr = {5,2,5,6,7,33,22,44,11};
int max = getMax(arr);
int min = getMin(arr);
System.out.println(max);
System.out.print(min);
}
//定义一个找出数组中最大值的方法
public static int getMax(int[] arr)
{
int max=arr[0];//0 这种方式是初始化数组中任意一个角标。
for(int i=0;i<arr.length;i++)
{
if(max<arr[i])
{
max=arr[i];
}
}
return max;
}
//找出最小值
public static int getMin(int[] arr)
{
int min=0;
for(int i=0;i<arr.length;i++)
{
if(arr[i]<arr[min])
min=i;
}
return arr[min];
}
}
冒泡排序
public class _04冒泡排序 {
public static void main(String[] args)
{
int[] arr = {5,5,1,6,4,22,22,8,9};
//print(arr);//排序输出前
sumPai(arr);
print(arr);//排序输出后
//Arrays.sort(arr);//实际开发中使用系统自带的排序法
}
public static void sumPai(int[] arr)
{
//控制比较的趟数,循环一次,表示比较了一趟
for(int i=0;i<arr.length-1;i++)//另一种方法for(int x=arr.length-1;x>0;x--)
{ // for(int y=0;y<x;y++)
for(int j=0;j<arr.length-i-1;j++)//上面每循环一次,此循环就少比较一次
{
if(arr[j]<arr[j+1])//判断比较条件
{
int temp=arr[j];//使用交换法
arr[j]=arr[j+1];
arr[j+1]=temp;
//**调用交换方法为**:Swap(arr,j,j+1);//传进去一个数组,和两个角标
}
}
}
}
//排序输出功能
public static void print(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
if(i!=arr.length-1)//如果i不等于arr.length-1就加 逗号
{
System.out.print(arr[i]+",");
}
else
{
System.out.print(arr[i]);
}
}
}
二维数组
public class _10二维数组 {
public static void main(String[] args) {
//定义一个名称为arr的二维数组。里面包含三个一维数组,每个一维数组中包含4个元素。
//int[][] arr = new int[3][4];
int[][] arr = new int[3][];
//下面指定每个一维数组中的长度
arr[0]=new int[3];
arr[1]=new int[2];
arr[2]=new int[1];
System.out.println(arr.length);//打印的是二维数组中的长度:3
System.out.println(arr[1].length);//打印的是二维数组中第二个一维数组的长度
int[][]arr1 = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int sum=0;
for(int x=0;x<arr1.length;x++)
{
for(int y=0;y<arr1[x].length;y++)
{
sum = sum + arr1[x][y];
}
}
System.out.print(sum);
}
}
经典面试:练习题
class Array2Demo
{
public static void main(String[] args)
{
// int[] arr = new int[3];//一维数组。
//int[][] arr = new int[3][4];//定义了名称为arr的二维数组。二维数组中有3个一维数组。
//每一个一维数组中有四个元素。
//System.out.println(arr[0][1]);
/*
int[][] arr = new int[3][];
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
System.out.println(arr.length);//打印是二维数组的长度 3;
System.out.println(arr[0].length);//打印二维数组中第一个一维数组长度
*/
int[][] arr = {{3,5,1,7},{2,3,5,8},{6,1,8,2}};
int sum = 0;
for(int x=0; x<arr.length;x++)
{
for(int y=0; y<arr[x].length; y++)
{
sum = sum + arr[x][y];
}
}
System.out.println("sum="+sum);
}
}
/*
int[] x; int x[];
int[][] y; int y[][]; int[] y[];
int[] x,y[];//x一维,y二维。
int[] x;
int[] y[];
a.
x[0] = y;//error
b.
y[0] = x;//yes
c.
y[0][0] = x;//error
d.
x[0][0] = y;//error
e.
y[0][0] = x[0];//yes
f.
x=y;//error
*/
---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------