黑马程序员_方法与数组

------- 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、数组里面的异常要知道;
发布了40 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/java9832/article/details/46376867