方法 (函数)
方法的作用:提高代码的复用性。(循环也可以提高代码的复用性,但是他只针对局部代码去重复,方法可以对全局去重复)

方法的使用1-基本使用:
			基本格式 :
				public static void 方法名(){
					方法体;//很多条语句
				}

				public static 修饰符 固定死的
				void :代表这个方法没有返回值的。
				方法名 : 标识符   
							a-zA-Z0-9$_
							不能是关键字
							不能以数字开头
							
							大驼峰 类名接口名
							小驼峰 变量名 方法名
							峡谷先锋 常量名
			
			注意事项:
				1:方法定义之后,不调用不执行的(main方法才是程序的入口,所以只能在main中直接或者间接被调用才能执行)
					public class Demo3 {
						public static void main(String[] args) {
							show();
						}
						public static void show(){
							System.out.println("hellowrold");
							method();
						}

						public static void method(){
							System.out.println("method");
						}
					}
				2:方法和方法之间是独立的 不能嵌套
				3:方法的定义 是没有前后顺序之分的
				4:main方法调用另一个方法,等待着另一个方法执行结束之后 main才继续的
					public class Demo3 {
						public static void show(){
							System.out.println(2);
							System.out.println(3);
							System.out.println(4);

						}

						public static void main(String[] args) {
							System.out.println(1);
							show();
							System.out.println(5);
							//打印结果:12345
						}
					}
				
			案例:定义一个方法,判断9这个数 是奇数 还是否书  如果是奇数 就打印奇数,如果是偶数就打印偶数
				public class Demo6 {
					public static void main(String[] args) {

						judge9OddEven();
					}

					public static void judge9OddEven(){
						/*
						if (9%2==0){
							System.out.println("偶数");
						}else {
							System.out.println("奇数");
						}
						*/

						// if else 如果否则 这个逻辑结构 和三元运算符 非常类型
						// 条件表达式 ? 表达式1 : 表达式2

						//9%2==0 ? System.out.println("偶数")  : System.out.println("奇数") ;
						// 表达式 不能单独成语句。
						//int a = 9%2==0 ? System.out.println("偶数")  : System.out.println("奇数") ;
						//String a = 9%2==0 ? System.out.println("偶数")  : System.out.println("奇数") ;
						//System.out.println(9%2==0 ? System.out.println("偶数")  : System.out.println("奇数"));

						//表达式1  表达式2 无论多么复杂 但是你必须有一个结果。

						/*
						三元的两个限制:
							1: 三元表达式 不能单独成语句
							2: 表达式1  表达式2 无论多么复杂 但是你必须有一个结果。
						 */

						/*
						if else 就没有这个限制 随便用
						 */

						// 用三元求两个数的最大值
						int a = 10;
						int b = 20;
						int max = a>b? a:b;


						int max1;
						if(a>b){
							max1 = a;
						}else {
							max1 = b;
						}

						// 总结 能用三元的地方 一定可以用ifelse, 但是 能用ifelse的地方不见得能用三元。

						//根据三元的两个限制条件, 我就想使用三元 打印奇数或者偶数。

						System.out.println(9%2==0 ? "偶数"  : "奇数" );
					}
				}
		
		方法的使用2-参数使用:
			参数位置 :
				public static void 方法名(数据类型 变量名,数据类型 变量名,数据类型 变量名,.... ){
					方法体;//很多条语句
				}
			
			案例演示:
				public class Demo5 {
					public static void main(String[] args) {
						//judge9JiOu();

						judge9JiOu(10);

						judge9JiOu(11);

						int c = 8;
						judge9JiOu(c);

						byte b = 3;
						judge9JiOu(b);

						long lo = 100L;
						//judge9JiOu(lo); //编译报错 8个字节的大小 不能放进去的。
						judge9JiOu((int)lo);

						int a = 5;
						judge9JiOu(a);

					}

					public static void judge9JiOu(int a){   // a就相当于是个托盘  4个单位的大小。
						System.out.println(a%2==0?"偶数":"奇数");
					}
				}
				
				public class Demo6 {
					public static void main(String[] args) {
						judgeJiOu(10,11);

						int c = 100;
						int d = 110;
						judgeJiOu(c,d);

					}
					public static void judgeJiOu(int a , int b){
						System.out.println(a+"是"+ (a%2==0?"偶数":"奇数"));
						System.out.println(b+"是"+ (b%2==0?"偶数":"奇数"));
					}
				}

			案例1:判断一个年龄 是否成年,如果成年了打印可以进入网吧,如果不成年 就说未成年人禁止入内。
				年龄不能写死,  成年年龄也不能写死
				public class Demo7 {
					public static void main(String[] args) {
						judgeAdultAge(19,18);
						judgeAdultAge(10,18);

						judgeAdultAge(10,8);
						judgeAdultAge(10,9);
					}

					//案例1:判断一个年龄 是否成年,如果成年了打印可以进入网吧,如果不成年 就说未成年人禁止入内。
					//				年龄不能写死,  成年年龄也不能写死
					public static void judgeAdultAge(int age , int adultAge){
						if (age >= adultAge){
							System.out.println("可以进入网吧");
						}else {
							System.out.println("未成年人禁止入内");
						}
					}
				}
			
			案例2:定义一个方法 打印 一个数到另一个数之间所有的奇数。
				这两个数是你传入进来的。
				public class Demo8 {
					public static void main(String[] args) {
						showJi(10,20);
						showJi(20,10);
					}

					//案例2:定义一个方法 打印 一个数到另一个数之间所有的奇数。
					//				这两个数是你传入进来的。
					public static void showJi(int m , int n){
						if (n>m){
							for (int i = m; i <= n; i++) {
								if (i%2!=0){
									System.out.println(i);
								}
							}
						}else{
							for (int i = n; i <= m; i++) {
								if (i%2!=0){
									System.out.println(i);
								}
							}
						}
					}
				}
		
			案例3:定义一个方法 判断两个数是否相等。 打印true 或者false
			
		方法的使用3-返回值使用:
			格式 :
				public static 数据类型 方法名(数据类型 变量名,数据类型 变量名,数据类型 变量名,.... ){
					方法体;//很多条语句
					return 返回值;
				}
			
			举例:
				public class Demo10 {
					public static void main(String[] args) {
						equals(10,11);  // 没有意义
						//false;

						boolean b = equals(20,21);
						System.out.println(b);

						System.out.println( equals(20,20) );

					}

					public static boolean equals(int a , int b){
						/*if (a==b){
							return true;
						}else {
							return false;
						}*/
						/*boolean c = a==b? true:false;
						return c;*/

						//return  a==b? true:false;

						return a==b;
					}
				}

				public class Demo11 {
					public static void main(String[] args) {
					   // byte method = method();
						 int c = method();
						System.out.println(c);
					}

					public static int method(){  // int 这是出去的口  这个口的大小 是可以让4个字节的数据 出去的。
						/*int a = 10;
						return a;*/

						/*byte b = 1;
						return b;*/

						double d = 3.14;
						return (int)d;

					}
				}

				public class Demo9 {
					public static void main(String[] args) {
						// 一个年龄 个 结婚年龄 比较。
						int ag = 17;
						int ag1 = 22;

						//boolean b = judgeAdultAge(17,22);
						//if (b){
						if(judgeAdultAge(17,22)){
							System.out.println("可以结婚");
						}else{
							System.out.println("玩去");
						}
					}

					public static boolean judgeAdultAge(int age , int Age1){  // 仅让这个方法 干专门的 判断的事情,
						if (age >= Age1){
							return true;
						}else {
							return false;
						}
					}
				}
			
			案例2:定义一个方法 传入三个数  返回三个数的最大的值。
				public class Demo12 {
					public static void main(String[] args) {
						int max = getMax(10, 30, 20);
						System.out.println(max);
					}

					//案例2:定义一个方法 传入三个数  返回三个数的最大的值。
					public static int getMax(int a, int b ,int c){
						/*int max = a>b ? (a>c?a:c) :(b>c?b:c);
						return max;*/
						return a>b ? (a>c?a:c) :(b>c?b:c);
					}
				}
			
		方法的完整格式:
			public static 数据类型/void 方法名(数据类型 变量名, 数据类型 变量名  ,.....){
				很多语句;
				return 返回值;
			}

			定义的时候 明确两个:
				参数:定义这个机器(方法),需要有原材料(参数) 就写参数。
				返回值类型 : 机器(方法) 直接结束之后,需要有一些产品 返回出来,那么就写返回值,否则就不用写返回值类型。

		方法的注意事项:
			1:方法不能嵌套
			2:方法和方法之间是没有先后顺序的。
			3:方法不调用不会执行的,  因为我们程序的入口都是main方法。
			4:void的方法,说明方法内是不能有返回值的,  但是你是可以写一个 单独的return的。用来强制终止方法。
				return 这个关键字的作用, 两个作用 
					第一个:return 强制终止方法的作用。
					第二个: return 返回值, 把 值扔给调用者 

			5:如果一个方法有返回值类型, 那么这个方法 则必须各个逻辑上,都应该有返回值。
				案例1:
					public static int getInt(int a ){
					  if(a> 10){
						return a ;
					  }
					} // 编译报错  因为 if 有可能不进去 当不进去的时候 这么方法就不会执行return , 然后你的方法是有返回值类型的 必须要有return 。
				
				案例2:
					public static int getInt(int a ){
						if(a> 0){
							return a ;
						}else{
							return 0-a;
						}
					} // 编译正确。 要么进入 if  要么进入else  所以这个方法是肯定会执行return的。

				案例3:
					public static int getInt(int a ){
						if(a> 0){
							return a ;
						}
						return 0-a; 
					}// 编译正确:因为return有强制终止方法的作用, 所以 一个方法要是规定了返回值类型了。那么这个方法 是肯定只有一个返回值的。
				
				案例4:
					public static int getInt(int a ){
						if(a> 0){
							return a ;
						}else if(a==0){
							return 0;
						}else if(a<0){
							return 0-a;
						}
					}  // 编译错误:虚拟机不会去看你值的逻辑, 他只看你结构语句的逻辑。
				
				案例5:
					public static int getInt(int a ){
						if(a> 0){
							return a ;
						}else if(a==0){
							return 0;
						}else{
							return 0-a;
						}
					} // 编译正确:这个结构语句的逻辑是完善的。
			
		
		方法的重载:
			概念:同一个类中,出现了方法名字相同,参数列表不同(返回值无关)这些方法之间重载了。

			举例:
				class Demo {
					public static void show(int a){
					
					}
					/*
					public static void show(int b){  // 方法重复了。  
					
					}
					*/
					/*
					public static int show(int a){  //方法重复了。
						return 0;
					}
					*/
					public static void show(double a){  // 重载   类型不同
					
					}

					public static void method(int a, double b){
					
					}
					/*
					public static void method(int b, double a){// 方法重复了
					
					}*/
					public static void method(double a, int b){ //重载  类型的顺序不同
					
					}

					public static void method( int a){ //重载  个数不同
					
					}
				}
			
			好处:给程序员减轻了记忆的压力。
				System.out.println(1);
				System.out.println(10.2);
				System.out.println(true);

			案例1:定义几个重载的方法。 方法内容是比较两个数是否相等。  要求 试用于 所有的基本类型。
				public class Demo14 {
					public static void main(String[] args) {
						char c = 'a';
						char c1 = 'a';
						System.out.println(compare(c,c1));

						boolean b = true;
						boolean d = false;
						System.out.println(compare(b,d));


					}
					//定义几个重载的方法。 方法内容是比较两个数是否相等。  要求 试用于 所有的基本类型。
					/*
						byte < short = char <int <long <float <double
						boolean
					 */
					public static boolean compare(double d, double d1){ // double d= 'a'; //97.0
						return d ==d1;
					}

					public static boolean compare(boolean d, boolean d1){
						return d ==d1;
					}
				}
				
		方法参数的传递:
			案例1:
				public class Demo14 {
					public static void main(String[] args) {
						int a = 10;
						System.out.println(a); // 10
						change(a);
						System.out.println(a); // 10

					}

					public static void change(int a){   
						a = 20;
					}
				}

			案例6:
				public class Demo14 {
					public static void main(String[] args) {
						int a = 10;
						System.out.println(a); // 10
						a = change(a);
						System.out.println(a); // 20

					}

					public static int change(int a){   
						a = 20;
						return a;
					}
				}
			
			案例2:
				public class Demo14 {
					public static void main(String[] args) {
						int[] arr = {10,20,30};
						System.out.println(arr[1]); // 20
						change(arr);
						System.out.println(arr[1]); // 200
					}

					public static void change(int[] arr){   
						arr[1] = 200;
					}
				}
			
			案例5:	
				public class Demo14 {
					public static void main(String[] args) {
						int[] arr = {10,20,30};  //0x001
						System.out.println(arr[1]); // 20
						arr = change(arr); // arr = 0x001
						System.out.println(arr[1]); // 200
					}

					public static int[] change(int[] arr){    //arr = 0x001
						arr[1] = 200;
						return arr;  //0x001
					}
				}
			
			案例3:
				public class Demo14 {
					public static void main(String[] args) {
						int[] arr = {10,20,30};
						System.out.println(arr[1]); // 20
						change(arr);
						System.out.println(arr[1]); // 20
					}

					public static void change(int[] arr){   
						arr = new int[]{100,200,300};
					}
				} // 只有引用类型 传递到另一个方法里面, 去操作了这个引用类型里面的内容的时候, 才会改变的。
			
			案例4:
				public class Demo14 {
					public static void main(String[] args) {
						int[] arr = {10,20,30};  //oo1 
						System.out.println(arr[1]); // 20
						arr = change(arr); // arr=002
						System.out.println(arr[1]); // 200
					}

					public static int[] change(int[] arr){   //001 
						arr = new int[]{100,200,300};  //002
						return arr; //002
					}
				} 

			结论:
				是不要片面理解 ,要学会自己分析。

		案例1:定义一个方法 传递一个 int[] 数组,  按照指定的格式打印出数组
						// int[] arr = {4,5,6,8};
			public static void show(int[] arr){
			
				// 显示 [4, 5, 6, 8]
			}

		   --------------------------------------------------------------
			public class Demo19 {
				public static void main(String[] args) {
					int[] arr = {6,8,3,5};
					printArr(arr);
				}

				//练习1: 定义一个方法 传入一个int[] 遍历数组。
				/*
				参数: int[] arr
				返回值类型: void
				 */
				public static void printArr(int[] arr){
					System.out.print("[");
					for (int i = 0; i < arr.length; i++) {
						if (i ==arr.length-1){
							System.out.println(arr[i]+"]");
							break;
						}
						System.out.print(arr[i]+", ");
					}
				}
			}
		练习2: 定义一个方法 传入一个int[] 返回数组的最大值。
			public class Demo20 {
				public static void main(String[] args) {
					int[] arr = {5,7,9,3,2};
					int max = getMax(arr);
					System.out.println(max);
				}

				// 定义一个方法 传入一个int[] 返回数组的最大值。
				/*
				参数: int[] arr
				返回值类型: int
				 */
				public static int getMax(int[] arr){
					int max = arr[0];
					for (int i = 1; i < arr.length; i++) {
						if (arr[i]> max){
							max = arr[i];
						}
					}
					return max;
				}
			}
		练习3: 定义一个方法 传入一个int[] 返回数组的 最大和最小值。	
			public class Demo20 {
				public static void main(String[] args) {
					int[] arr = {5,7,9,3,2};
					int[] brr = getMaxAndMin(arr);
					System.out.println(brr[0]);
					System.out.println(brr[1]);
				}

				// 定义一个方法 传入一个int[] 返回数组的最大值。
				/*
				参数: int[] arr
				返回值类型: int
				 */
				public static int[] getMaxAndMin(int[] arr){
					int max = arr[0];
					int min = arr[0];
					for (int i = 1; i < arr.length; i++) {
						if (arr[i]> max){
							max = arr[i];
						}

						if (arr[i] < min){
							min = arr[i];
						}
					}
					int[] arr1 = {max, min};
					return arr1;
				}
			}