Java方法
文章目录
- 1.方法
- 1.1方法概述和格式1
- 1.2方法定义格式2
- 1.3方法定义的格式3
- 1.4方法定义小结
- 1.5方法定义练习打印九九乘法表
- 1.6打印数组
- 1.7求最大值
- 1.8方法定义的通用格式
- 1.9获取数组最大值
- 1.10 方法在内存中的运行流程
- 1.11 方法重载
- 1.12 形参和实参
- 1.13 基本数据类型在方法的调用过程中,形参的改变,不影响实参
- 1.14 引用数据类型在方法的调用过程中,形参的改变,影响实参
- 1.15 获取数组最大值和最小值
学习目标:
- 了解方法的概述
- 掌握方法的定义和调用
- 熟悉方法在内存中的调用过程
- 掌握方法的重载
- 掌握debug的使用
1.方法
1.1方法概述和格式1
/*
方法的概述:
1.方法就是解决问题办法
2.编程中的方法,具有特定功能的代码块
方法定义:
格式1:
public static void 方法名(){
方法体
}
调用:
在main方法中调用格式 :方法名();
特点:
方法和方法之间是平行关系,不能嵌套定义
方法定义后不会自己执行,需要被调用后才能执行
方法定义的先后顺序和方法执行顺序无关 和方法调用的顺序有关,谁先调用谁先执行
*/
public class Demo01 {
public static void printHelloWorld(){
System.out.println("HelloWorld");
}
public static void main(String[] args) {
// sum();
// printHelloWorld();
sum2();
}
public static void sum(){
System.out.println(1+1);
}
//定义方法求1-100之间的数据和
public static void sum2(){
//定义求和变量
int sum = 0;
//使用循环遍历获取1--100之间所有数据
for (int i = 1; i <= 100; i++) {
sum+=i;
}
System.out.println("1--100之间所有数据:"+sum);
}
}
1.2方法定义格式2
/*
方法定义的格式2:
public static void 方法名(数据类型 变量名) {
}
调用:
在main方法中 : 方法名(值) :值要和方法中参数数据类型一致
传递参数过程,和变量没有关系 和数据类型有关系,要求数据类型要一致
需要几个参数,传递几个参数,需要什么数据类型的参数,就传递相匹配数据类型
*/
public class Demo02 {
public static void main(String[] args) {
//定义方法,求1 - n之间数据和
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int num = scanner.nextInt();
// sum(num);
System.out.println("请输入第二个数字:");
int num2 = scanner.nextInt();
sum2(num2,num);
}
public static void sum(int n) {
int s = 0;
for (int i = 1; i <= n; i++) {
s += i;
}
System.out.println(s);
}
//定义方法求两个数的和
public static void sum2(int a,int b){
System.out.println(a+b);
}
}
1.3方法定义的格式3
import java.util.Scanner;
/*
方法定义格式3:
public static 返回值类型 方法名(参数列表){ //参数列表:参数可以有 一个,也可以有多个,也可以没有
方法体
return 值; //返回值的类型要和 方法的返回值类型相匹配
}
// 返回值类型根据需求 定义
方法定义格式3调用:
在main方法中调用:
格式:
方法名(参数......);直接调用,无意义 不推荐
方法的返回值类型 变量名 = 方法名(参数......);//赋值调用
System.out.println(方法名(参数......)); //输出调用
*/
public class Demo03 {
public static void main(String[] args) {
//键盘录入两个数字,定义方法接收两个数字,求他们最大值并返回
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数字:");
int num2 = sc.nextInt();
//直接调用,无意义 不推荐
// getMax(num1,num2);
//赋值调用
int max = getMax(num1,num2);
System.out.println(max);
//输出调用
System.out.println(getMax(num1,num2));
}
/*
定义方法接收两个数字,求他们最大值并返回
定义方法:
参数:int a,int b
功能:求最大值
返回值:有 类型 int
*/
public static int getMax(int a,int b){
if (a>b){
return a;
}else {
return b;
}
}
}
1.4方法定义小结
/*
方法定义格式:
格式1:
public static void 方法名(){
方法体
}
调用:
在main方法中调用:方法名();
格式2:
public static void 方法名(参数列表){ //参数可以有一个也可以有多个,也可以没有,如果有多个要使用逗号隔开
方法体
}
调用:
在main方法中调用:方法名();
格式3:
public static 返回值类型 方法名(参数列表){ //参数可以有一个也可以有多个,也可以没有,如果有多个要使用逗号隔开
方法体;
return 值; //值要和方法的返回值数据类型一致
}
*/
public class Demo04 {
public static void main(String[] args) {
//格式1调用:
getNum();//直接调用
//void x = getNum();//赋值调用
// System.out.println(getNum());//输出调用
// 格式2:
getSum(100);
//格式3调用:
int sum2 = getSum2(10, 20);
System.out.println(sum2);
System.out.println(getSum2(5,10));
}
//格式1
//定义求所有水仙花数在控制台输出
public static void getNum() {
//1.循环 遍历获取所有三位数
for (int i = 100; i <= 999; i++) {
//2.求三位数各个位上的数字
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
System.out.println("水仙花数:" + i);
}
}
}
//格式2:
//定义方法 求1到n之间的所有奇数和(n>1)在控制台输出
public static void getSum(int n) {
//1.定义变量
int sum = 0;
//2.获取1--n之间的所有数据
for (int i = 1; i <= n; i++) {
//3.判断是否是奇数
if (i%2!=0){
//4.是奇数就累加求和
sum+=i;
}
}
System.out.println("sum = "+sum);
}
//格式3:
//定义方法求两个数的和 并返回
public static int getSum2(int a,int b){
return a+b;
}
}
1.5方法定义练习打印九九乘法表
/*
定义方法在控制台打印九九乘法表
分析:
1.不要返回值 返回值类型 void
2.参数:没有参数
*/
public class Demo05 {
public static void main(String[] args) {
//调用方法
print();
}
//定义方法
public static void print(){
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
}
}
1.6打印数组
/*
定义方法打印数组中的元素
输出格式:[1, 2, 3, 4, 5, 6, 7, 8, 9]
分析:
1.参数:int [] arr;
2.返回值:没有返回值
*/
public class Demo06 {
public static void main(String[] args) {
int [] brr = {1,2,3,4,5,6,7,8,9};
//调用方法
printArray(brr);
}
public static void printArray(int [] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i== arr.length-1){ //判断是否是最后一个元素 ,如果是就直接打印元素
System.out.print(arr[i]);
}else {
System.out.print(arr[i]+", ");//如果不是最后一个元素,就要打印元素拼接逗号和空格
}
}
System.out.println("]");
//System.out.println(Arrays.toString(arr));
}
}
1.7求最大值
/*
键盘录入两个数字,求最大值并返回给调用者
分析:
1.键盘录入
2.定义方法:
2.1 参数:int a,int b
2.2 返回值 :有 ,返回值类型:int
*/
public class Demo07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数字:");
int num2 = sc.nextInt();
//调用方法
int max = getMaxs(num1, num2);
System.out.println(max);
}
public static int getMaxs(int a, int b) {
return a > b ? a : b;
}
}
1.8方法定义的通用格式
/*
方法定义的通用格式:
public static 返回值类型 方法名(参数列表){
方法体;
return 值;
}
返回值类型:根据需求定义
参数列表:参数可以有一个,可以有多个,可以没有,如果有多个参数使用逗号隔开
方法体:方法的功能
return :用来返回方法最终结果,返回值的数据类型要和方法的返回值类型一致
注意事项:
1.方法不能嵌套定义
2.方法在定义完成后,不会自己执行,需要被调用才执行
3.方法名要做到见名知义,符合小驼峰的命名规范
4.如果方法没有返回值,return语句可以省略不写 ,如果一定要写,只能 return;
5.如果方法没有返回值,只能直接调用
6.如果方法有返回值,可以直接调用,没有意义不推荐,还可以赋值调用,输出调用
7.return语句下面,不能编写代码,因为永远执行不到,属于无效的代码
*/
public class Demo08方法定义的通用格式 {
public static void main(String[] args) {
}
}
1.9获取数组最大值
/*
获取数组最大值
分析:
1.数组自定义
2.方法定义:
返回值:有 int类型
参数: 有 数组
*/
public class Demo09 {
public static void main(String[] args) {
//1.定义数组
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数组的长度:");
int length = scanner.nextInt();
int [] brr = new int[length];
//生成1--100之间的随机数 填充数组
Random random = new Random();
for (int i = 0; i < brr.length; i++) {
brr[i] = random.nextInt(100)+1;
}
//打印数组
System.out.println(Arrays.toString(brr));
//调用方法
int max = getMax(brr);
System.out.println(max);
}
//求数组最大值
public static int getMax(int [] arr){
//1.定义最大值
int max = arr[0];
//2.使用循环遍历数组获取每一个元素
for (int i = 0; i < arr.length; i++) {
//3.和定义最大值比较,如果比最大值还要大,就跟新最大值
if (arr[i]>max){
max = arr[i];
}
}
//4.返回最大值
return max;
}
}
1.10 方法在内存中的运行流程
public class Demo10 {
public static void main(String[] args) {
eat();
}
public static void eat() {
System.out.println("吃饭饭!");
}
}
public class Demo11 {
public static void main(String[] args) {
eat();
}
public static void eat() {
study();
System.out.println("吃饭");
sleep();
}
public static void sleep() {
System.out.println("睡觉");
}
public static void study() {
System.out.println("学习");
}
}
1.11 方法重载
import java.util.Arrays;
/*
方法重载:
1.在同一个类中,方法名相同
2.参数不同:
参数类型不同
参数个数不同
参数类型顺序不同
3.和返回值无关
*/
public class Demo12重载 {
public static void main(String[] args) {
int [] brr = {1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.toString(brr));
double [] crr = {1.0,2.0,3.0,4,5,6,7,8,9};
System.out.println(Arrays.toString(crr));
}
public static void sum(){
}
public static void sum(int a,int b){
}
public static void sum(double a,double b){
}
public static void sum(long a,int b){
}
public static int sum(int a,long b){
return 0;
}
}
1.12 形参和实参
import java.util.Scanner;
/*
形参:形式参数
方法定义时的参数
实参:实际参数
方法调用时传递的参数,有实际的值
*/
//键盘录入一个数字,定义方法求奇偶数
public class Demo13形参和实参 {
public static void main(String[] args) {
//键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入整数:");
int num = sc.nextInt();
isEvenNum(num);
}
/*
定义方法:
返回值:void
参数:int a;
*/
public static void isEvenNum(int a){
//判断奇偶数
if (a%2==0){
System.out.println(a+"是偶数!");
}else {
System.out.println(a+"是奇数!");
}
}
}
1.13 基本数据类型在方法的调用过程中,形参的改变,不影响实参
/*
基本数据类型在方法的调用过程中,形参的改变,不影响实参
*/
public class Demo14 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a); //10
System.out.println(b); //20
changeNum(a,b);
System.out.println(a); //10
System.out.println(b); //20
}
public static void changeNum(int a, int b) {
System.out.println(a); //10
System.out.println(b); //20
a = a+b; // 30
b = a+b; // 50
System.out.println(a); //30
System.out.println(b); //50
}
}
1.14 引用数据类型在方法的调用过程中,形参的改变,影响实参
/*
引用数据类型在方法的调用过程中,形参的改变,影响实参
*/
public class Demo15 {
public static void main(String[] args) {
int [] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
System.out.println(arr);
System.out.println(arr[0]); //10
System.out.println(arr[1]); //20
System.out.println(arr[2]); //30
changeNum(arr);
System.out.println(arr);
System.out.println(arr[0]); //10 11
System.out.println(arr[1]); //20 22
System.out.println(arr[2]); //30 33
}
public static void changeNum(int[] arr) {
System.out.println(arr);
System.out.println(arr[0]);//10
System.out.println(arr[1]);//20
System.out.println(arr[2]);//30
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
System.out.println(arr);
System.out.println(arr[0]);//11
System.out.println(arr[1]);//22
System.out.println(arr[2]);//33
}
}
1.15 获取数组最大值和最小值
/*
获取数组最大值和最小值
需求:设计一个方法用于获取数组中元素的最大值,和最小值
分析:
1.参数:int [] arr
2.返回值:int []
*/
public class Demo16 {
public static void main(String[] args) {
//定义一个数组,用静态初始化完成数组元素初始化
int[] arr = {87, 10, 70, 74, 3, 18, 67, 63, 94, 37};
int[] maxAndMin = getMaxAndMin(arr);
System.out.println(maxAndMin[0]);
System.out.println(maxAndMin[1]);
System.out.println(Arrays.toString(maxAndMin));
}
public static int[] getMaxAndMin(int[] arr) {
//1.定义最大值
int max = arr[0];
//2.循环遍历
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
//2.定义最小值
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
// int [] brr = {max,min};
int[] brr = new int[2];
brr[0] = max;
brr[1] = min;
return brr;
}
}