MyDiary_2020.9.28

方法关键知识举例讲解

/*
	定义有具体返回值类型的方法的定义的注意事项!
	
		1)方法和方法平级关系,不能嵌套使用!
						特殊:方法递归(IO流后面讲):方法调用方法本身的一种现象!
		2)定义方法注意两个明确
			明确返回值类型
			明确参数类型以及参数个数
		3)定义方法的时候:
				参数类型必须携带的!
			public static int add(x,y){}  错误的:
			因为Java是一种强类型语言:语法非常严谨的,以及格式是有要求的!
					
		4)定义方法的时候,()后面不要出现; (目前来说没意义的方法!) 
		5)调用方法的时候,实际参数不需要携带数据类型
			
			
*/

class FunctionDemo{

	public static void main(String[] args){
		
		
		
		//方法嵌套方法了
		/*
		public static int add(int x,int y){
			return x + y ;
		}
		*/
		
		//定义两个变量
		//实际参数
		int x = 10 ;
		int y = 20 ;
		
		//调用方法的时候,实际参数不需要携带数据类型
		//int result = add(int x,int y) ;//错误写法
		int result = add(x,y) ;
		System.out.println("两个数据之和是:"+result);
	}
	
	//定义两个数据求和的功能:默认int类型
	//public static int add(int x,int y){
	//public static boolean add(int x,int y){ //不兼容的类型: int无法转换为boolean
			//return x + y ;
	//}
	
	//public static int add(x,y){// 错误的:
	public static int add(int x,int y){//形参需要携带数据类型
		return  x + y ;
	}
	

}
/*
	没有具体返回值类型的方法 定义以及调用?
	
	方法定义:
		public static 返回值类型  方法名(形式参数列表(包含数据类型+变量名)...){
			要么 return 结果;
			
			要么没有具体结果;
		}
		
	Java的语法:
	
		方法本身的定义:需要返回值类型,但是如果需求本身就没有具体返回结果,如何定义方法呢?
				语法要求:如果没有具体返回值结果,使用void 来代替 返回值类型(位置)
				
				注意:Java中不存在void类型(替代词)
				
	没有具体返回值类型的方法的定义格式:
	public static void 方法名(形式参数类型1 变量名1,形式参数类型2 变量名2...){
		直接输出语句或者其他业务操作;
	}
	
	没有具体返回值类型的方法调用
		单独调用
		赋值调用
		输出调用
				
	需求:
		使用方法完成:打印4行5列的*

两个练习:	使用方法完成!
				1)键盘录入行数m,列数n,输出m行和n列的*
				2)键盘录入一个n数据,打印nn乘法表 (列数在变化)
*/

class FunctionDemo2{
	public static void main(String[] args){//固定格式
		//打印4行5列的*	
		for(int x = 0 ; x < 4 ; x ++){//行数
			for(int y = 0 ; y < 5 ; y ++){//列数
				System.out.print("*") ;
			}
			System.out.println() ;
		}
		System.out.println("---------------------") ;
		
		
		//赋值调用
		//void result = printStar(5,6) ;非法的表达式开始
		
		//输出调用 此处不允许使用 '空' 类型
		//System.out.println(printStar(5,6)) ;
		//单独调用
		printStar(5,6) ;
		System.out.println("---------------------") ;
		printStar(9,9) ;
	}
	
	/*
		将上面n行n列的*形 方法改进
		public static void 方法名(形式参数类型1 变量名1,形式参数类型2 变量名2...){
		直接输出语句或者其他业务操作;
	}
	
	两个明确:
		1)明确返回值类型: 没有具体返回值类型---使用 void代替
		2)明确参数类型以及参数个数
			int类型 2个
				
	*/
	public static void printStar(int m,int n){//m:行数,n表示列数
			for(int x = 0 ; x < m; x ++){
				for(int y = 0 ; y < n ; y ++){
					System.out.print("*") ;
				}
				System.out.println() ;
			}
		
	}
}
/*
	需求:求数据之和! (方法完成)
	
	分析:
			可以求两个数据之和
			三个数据之和
			四个数据之和...
			
	按照上面要求:定义了三个方法以及分别调用了三个方法
	
	问题:
	方法的定义要遵循标识符的规则:见名知意!
	目前这个方法的功能都是求和,如果一些方法的功能相同的,那么定义方法的时候:见名知意!
	
		方法名可以不可以相同呢?
		可以!
		
	技术:方法重载 (overLoad)
			方法名相同,参数列表不同,与返回值无关!		
						参数列表不同:
							1)数据类型一样的,参数个数不同
							2)参数个数一样,类型不同!
							参数个数不一样,参数类型不同
							
		
	sum(int a,int b)		1
	sum(double a ,int b) 	2
	sun(int a,double b)		3
	sum(int a,int b)		4
	SUM(int a ,float b)     5
	
	1和4:重复定义
	1,2,3属于方法重载
	
	5:不是:方法名不同
	
*/

class FunctionDemo3{
	public static void main(String[] args){
		//使用实际参数
		//输出调用
		System.out.println(sum(10,20)) ;
		System.out.println("------------------") ;
		//System.out.println(sum2(10,20,30)) ;
		System.out.println(sum(10,20,30)) ;
		
		System.out.println("------------------") ;
		//System.out.println(sum3(10,20,30,40)) ;
		System.out.println(sum(10,20,30,40)) ;
		System.out.println(sum(1.34,2.35)) ;
	}
	
	//定义两个数据之和的方法
	public static int sum(int a ,int b){
		return a + b ;
	}
	
	
	
	//一模一样的方法:方法名相同,参数类型都一样:重复定义!
	/*
	public static int sum(int a ,int b){
		return a + b ;
	}
	*/
	
	public static double sum(double a,double b){
		return a + b ;
	}
	
	//定义三个数据求和的方法
	//public static int sum2(int a,int b,int c){
	public static int sum(int a,int b,int c){
		return a + b + c ;
	}
	
	//定义四个数据求和的方法
	//public static int sum3(int a,int b,int c ,int d){
	public static int sum(int a,int b,int c ,int d){	
		return a + b +c + d ;
	}
}
/*
	需求:(使用方法完成)
		键盘录入两个数据,求两个数据中的最大值
		键盘录入两个数据,比较两个数据是否相等
		键盘录入三个数据,求三个数据中的最大值
*/
//导包
import java.util.Scanner ;
class FunctionTest{
	public static void main(String[] args){
		
		//键盘录入两个数据,求两个数据中的最大值
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并录入两个数据
		System.out.println("请输入第一个数据:") ;
		int a = sc.nextInt();
		
		System.out.println("请输入第二个数据:") ;
		int b = sc.nextInt();
		
		//调用求两个数据最大值的方法
		int  max = getMax(a,b) ;
		//输出
		System.out.println("两个数据中的最大值是:"+max) ;
		
		System.out.println("-------------------------------") ;
		
		int max2 = getMax2(a,b) ;
		System.out.println("两个数据中的最大值是:"+max2) ;
		
		System.out.println("-------------------------------") ;
		
		
		//键盘录入两个数据,比较两个数据是否相等
		//分析:结果:相等:true,不相等:false
		
		System.out.println("请输入第一个数据:") ;
		int firstNum = sc.nextInt();
		
		System.out.println("请输入第二个数据:") ;
		int secNum = sc.nextInt();
		
		//调用方法
		boolean flag = compare(firstNum,secNum) ;
		System.out.println("flag:"+flag) ;
		
		
	}
	
	/*
	键盘录入两个数据,比较两个数据是否相等
		两个明确:
			1)明确返回值类型:boolean类型
			2)明确参数类型以及参数个数
					int类型,2个参数
	*/
	public static boolean compare(int a,int b){//形参
		//简写方式
		//return a==b ; //== :比较两个数据值是否相等! ==
		return (a==b)? true: false ;
	}
	
	
	
	
	/*
		定义方法:
		两个明确
			1)明确返回值类型: int
			2)明确参数类型以及参数个数
			  int类型,两个参数
	*/
	//方式1:三元运算符
	public static int getMax(int a,int b){
		//业务:
		//比较a和b的最大值
		
		return (a > b) ? a: b ;
	}
	
	//方式2:if...else 语句
	public static int getMax2(int a,int b){
		//定义max变量
		int max ; 
		if(a> b){
			max = a ;
		}else{
			max = b ;
		}
		
		return max ;
	}
	
}
//键盘录入三个数据,求三个数据中的最大值


//导包
import java.util.Scanner ;
class FunctionTest2{
	public static void main(String[] args){
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并录入数据
		System.out.println("请输入第一个数据:") ;
		int a = sc.nextInt() ;
		
		System.out.println("请输入第二个数据:") ;
		int b = sc.nextInt();
		
		System.out.println("请输入第三个数据:") ;
		int c = sc.nextInt() ;
		
		//a,b,c实际参数
		//调用方法
		int max = getMax(a,b,c) ;
		System.out.println("三个数据中的最大值是:"+max) ;
		
		System.out.println("----------------------------") ;
		int max2 = getMax(a,b,c) ;
		System.out.println("三个数据中的最大值是:"+max2) ;
	}
	
	/*
		求三个数据中的最大值
		定义两个明确
			1)明确返回值类型:int
			2)明确参数类型,参数个数
			   int类型,三个参数
		
	*/
	//方式2:使用if语句实现:if嵌套
	public static int getMax2(int a,int b,int c){
		//定义一个max变量
		int max ; 
		if(a  > b ){
			if(a > c){
				max = a ;
			}else{
				max = c ;
			}
		
		}else{
			if( b > c ){
				max = b ;
			}else{
				max = c ;
			}
		}
		return max ;//返回
	}
	
	
	//方式1:使用中间变量+三元运算符
	public static int getMax(int a,int b, int c){
		//定义变量
		int temp = (a > b) ? a : b ;
		int max = (temp > c) ? temp : c ;
		return max ;
	}
	
}
/*
	个练习:	使用方法完成!
				1)键盘录入行数m,列数n,输出m行和n列的*
				2)键盘录入一个n数据,打印nn乘法表 (列数在变化)
*/
//导包
import java.util.Scanner ;
class FunctionTest3{
	public static void main(String[] args){
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并录入数据
		System.out.println("请输入行数m:") ;
		int m = sc.nextInt() ;
		
		System.out.println("请输入列数n:") ;
		int n = sc.nextInt() ;
		
		//调用方法
		printXing(m,n) ;
		System.out.println("---------------------------") ;
		
		//2)键盘录入一个n数据,打印nn乘法表 (列数在变化)
		System.out.println("请输入一个数据n:") ;
		int number = sc.nextInt() ;
		
		//调用方法
		printNN(number) ;
	}
	/*
		定义方法
			两个明确:
				明确返回值类型:没有具体---void
				明确参数类型以及参数个数
					int 1个参数
	*/
	public static void printNN(int n){
		//有效数据从1开始
		for(int x = 1 ; x <=n ; x ++){
			for(int y = 1 ; y <= x ; y ++){
				System.out.print(y+"*"+x+"="+(y*x)+"\t") ;
			}
			System.out.println() ;
		}
	}
	
	
	/*
		输出m行和n列的*
		定义方法:
			两个明确:
				1)明确返回值类型:没有具体的结果----void 代替
				2)明确参数类型以及参数个数:
					int类型,2个参数
	*/
	public static void printXing(int m,int n){
		for(int x = 0 ; x < m ; x ++){
			for(int y = 0 ; y < n ; y ++){
				System.out.print("*") ;
			}
			System.out.println() ;
		}
	}
}

方法的关键知识举例讲解

/*
	
	什么数组:  引用数据类型
	
	数组:是可以存储元素的一种容器!
	
	前提:元素的数据类型必须一致的!	
	
	如何定义呢?
			格式:
					数据类型[] 数组名称 ;
					数据类型 数组名称[] ;
					
			举例:
					int[] arr; (习惯于第一种) 定义了一个int类型数组arr变量
					int arr[] ;定义了一个int类型的arr数组
	数组的初始化:
			1)动态初始化:指定了数组长度,系统默认给定数组的元素值!
			2)静态初始化:指定了具体的元素的内容,系统默认指定数组的长度!
			
	动态初始化:
		数据类型[]  数组名称 =  new 数据类型[数组长度] ;
		数据类型 数组名称[] = new 数据类型[数组长度] ;
		
		举例:
			int[] arr = new int[3] ;  //创建了一个数组对象,分配3个长度
			int arr[] = new int[2] ;//.创建了一个数组对象,分配2个长度
			
			数组中元素的的访问方式:
				数组名称[角标]来访问
					角标(下标/索引):都是从0开始记录元素的!
			
*/
class ArrayDemo{
	public static void main(String[] args){
		
		//测试:创建一个数组对象:默认:int类型
		int[] arr = new int[3] ;
		
		/*
			=号左边
			int :表示当前数组是int类型:限定了元素的类型int
			[]  :是一个一维数组
			arr :变量名称(数组对象名称)
			
			=号右边
			new  :表示在内存中创建一个对象
			int  : 数据类型int类型
			[]   : 一维数组
			3    : 在内存中指定3个长度(意味着:有3个元素)
		*/
		System.out.println(arr) ;//[I@6d06d69c
		//[:一维数组    I :int类型  @:地址值标记   6d06d69c十六进制数据
	
		System.out.println(arr[0]) ; //0
		System.out.println(arr[1]) ;//0
		System.out.println(arr[2]) ;//0
		System.out.println("----------------------") ;
		
		//自己显示初始化
		//重新赋值
		arr[0]  = 100 ;
		arr[1] = 50 ;
		System.out.println(arr) ;
		System.out.println(arr[0]) ; 
		System.out.println(arr[1]) ;
		System.out.println(arr[2]) ;
	}
}
/*
	分别创建两个数组对象,
		分别输出两个数组对象名称以及各个数组的元素内容
		然后重新给两个数组的部分元素赋值,再次输出数组对象名称以及各个数组的元素内容
*/

class ArrayDemo2{
	public static void main(String[] args){
		
		//创建两个数组对象
		int[] arr1 = new int[2] ;
		int[] arr2 = new int[3] ;//
		
		System.out.println(arr1) ;//[I@6d06d69c
		System.out.println(arr1[0]) ;//0
		System.out.println(arr1[1]) ;//0
		System.out.println("---------------") ;
		System.out.println(arr2) ;//[I@7852e922
		System.out.println(arr2[0]) ;//0
		System.out.println(arr2[1]) ;//0
		System.out.println(arr2[2]) ;//0
		System.out.println("---------------") ;
		
		arr1[0] = 20 ;
		arr2[1] = 30 ;
		arr2[2] = 15 ;
		
		System.out.println(arr1) ;//[I@6d06d69c
		System.out.println(arr1[0]) ;//20
		System.out.println(arr1[1]) ;//0
		System.out.println("---------------") ;
		System.out.println(arr2) ;//[I@7852e922
		System.out.println(arr2[0]) ;//0
		System.out.println(arr2[1]) ;//30
		System.out.println(arr2[2]) ;//15
	}
}
/*
	分别创建两个数组对象,
		分别输出两个数组对象名称以及各个数组的元素内容
		然后重新给两个数组的部分元素赋值,再次输出数组对象名称以及各个数组的元素内容

		定义第三个数组,将第一个数组名称赋值给第三数组名称;
		*/
		
class ArrayDemo3{
	public static void main(String[] args){
		//创建两个对象
		int[] arr = new int[3] ;
		int[] arr2 = new int[2] ;
		
		System.out.println(arr) ;
		System.out.println(arr2) ;
		
		//显示赋值
		arr[0] = 100 ;
		arr[2] = 200 ;
		
		arr2[1] = 50 ;
		
		System.out.println(arr[0]) ;
		System.out.println(arr[1]) ;
		System.out.println(arr[2]) ;
		System.out.println(arr2[0]) ;
		System.out.println(arr2[1]) ;
		System.out.println("----------------") ;
		//定义第三个数组
		int[] arr3 = arr ;  //将arr赋值给arr3 (将地址值赋值给arr3)
		//重新赋值
		arr3[0] = 70 ;
		arr3[2] = 20 ;
		System.out.println(arr[0]) ;
		System.out.println(arr[1]) ;
		System.out.println(arr[2]) ;
		System.out.println(arr2[0]) ;
		System.out.println(arr2[1]) ;
	}
}
/*
	数组的静态初始化 :指定数组的元素内容,系统给它默认长度
	
	格式:
		标准格式:
			数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3....} ;
			数据类型 数组名称[] = new 数据类型[]{元素1,元素2,元素3....} ;
			
		举例:
				int[] arr = new int[]{11,22,33} ;
				
		简化格式:
				数据类型[] 数组名称  ={元素1,元素2,元素3....} ;
				数据类型 数组名称[]  ={元素1,元素2,元素3....} ;
				
		
		举例:
				定义数组的时候:不能动,静集合(只能其中一种初始化方式!)
				int[] arr = new int[3]{1,2,3} ; //错误的!
				
			简化格式举例:
			int[] arr = {1,2,3} ;
		
*/

class ArrayDemo4{
	public static void main(String[] args){
		
		//创建一个数组:静态初始化
		int[] arr = {11,22,33,44,55} ;
		
		System.out.println(arr) ;//地址值
		System.out.println(arr[3]) ;
		System.out.println(arr[0]) ;
	}
}
/*
	
	异常: 后期Throwable:异常的总称
		程序出问题了!
	严重问题:
			error : 内存异常了 (通过一些第三方工具避免了!)
			
			举例:  一些软件通过一些特殊的操作:造成软件崩溃了!
			
	异常:
			Exception: 能够通过本身代码来解决问题
				
				编译时期异常:只要不是运行时期的异常都属于编译时期(不解决,编译通过不了)
				RuntimeExcetion:运行时期异常
							在执行过程中,由于代码结构不严谨,导致的问题!
							
		
		第一个异常:数组角标越界!
		java.lang.ArrayIndexOutOfBoundsException:
		出现的原因:访问不存在的角标!就出异常了
		解决方案:改动角标值即可!
		
		
		
		第二个异常:空指针异常:
		java.lang.NullPointerException:
		出现的原因:
			某个对象都为null,还需要使用对象访问内容或者调用其他功能!
			
		解决方案:
			只需要对某个对象做一个非空判断!(逻辑判断)
			
		
					
			
	
*/
class ArrayDemo5{
	public static void main(String[] args){
		
		//创建一个数组,静态初始化 
		
		int[] arr = {1,2,3} ;
		System.out.println(arr) ;
		System.out.println(arr[0]) ;
		System.out.println(arr[1]) ;
	    System.out.println(arr[2]) ;
		//System.out.println(arr[3]) ;//3:访问不存在的角标!就出异常了
		System.out.println("------------------") ;
		//给arr重新赋值
		arr = null ;
		//System.out.println(arr[0]) ;java.lang.NullPointerException
		
		//逻辑判断
		if(arr!=null){
			System.out.println(arr[0]) ;
		}else{
			System.out.println("数组对象为null了...") ;
		}
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值