/*
定义有具体返回值类型的方法的定义的注意事项!
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]) ;
}
}