- 方法对java来说是特别重要的,甚至我觉得如果方法学不好,在以后学习java的面向对象时更加学不好。
- java之所以被称为最安全的语言一大部分也是因为有方法的原因。
- 应为方法调用时用户直接看到的是方法所得到的结果,而过程则是在方法内部进行的,这样比人只能得到结果而不知道怎样得到,所以java语言是很安全的。那么接下来我们详细的来了解方法是啥。
1.什么是方法
方法(method)是将具有独立功能的代码块组织成一个整体,使其具有特殊功能的代码集。
- 注意:
方法必须是先创建才可以使用的,否者代码会报错。
方法创建后不是直接执行的,必须要手动使用才能执行,这叫代码的调用。
2.方法的格式
无参定义方法:
格式:public static void 方法名(){
//方法体;
}
有参定义方法:
格式:public static 数据类型 方法名(数据类型 变量名,数据类型 变量名 ){
//方法体
}
2.1名称解释:
public static : 固定的修饰符 ,公共的,静态的方法
返回值类型:数据类型,如果没有返回值,使用void占位;
方法名:将来调用方法的时候,需要使用这个方法名;
参数列表: 形式参数,方法体中的原材料;
方法体:一堆代码;(完成具体功能的代码)
3.方法的调用
格式:
无参:
方法名();
例如:isevenNumber();
有参:
方法名();
例如:isevenNumber(int a,int b);
注意:
方法的调用必须是在main方法内调用(主方法)实现的。
4.方法中的形参和实参的区分
1.形参是形式参数,定义方法的时候用,由数据类型和变量名组成
2.实参是实际参数,调用方法的时候用,可以直接写常量也可以是一个已经定义好的变量名。
5.方法的注意事项
1.方法不能嵌套定义;
2.方法的定义不分先后,定义后,不调用不会执行
3.如果方法没有返回值类型,需要使用void关键字,同时方法体中可以省略return
4.如果方法有返回值类型,方法体中必须写return数据值;
6.方法的重载
1.同一个类中,方法名相同,参数列表不同就是重载
2.好处是方便了方法的调用者
注意:
1.方法重载与方法的返回值无关,仅仅与名称和参数列表有关。
2.参数列表不同包括3种情况;1:类型不同,2:个数不同;3:类型不同的情况下,顺序不同;
学习方法时还需要知道引用类型和基本数据类型:
参数传递:
基本数据类型参数传递 特点:传递的是数据值,对原来的方法的变量没有影响
引用数据类型参数传递 特点:传递的地址值,对原来方法的变量影响
7.方法练习题
第一题
第二题:分析以下需求,并用代码实现(每个小需求都需要封装成方法)
1.求两个整数之和
2.求两个小数之和
3.判断两个整数是否相等
4.判断两个小数是否相等
5.获取两个整数中较大的值
6.获取两个小数中较大的值
7.获取两个整数中较小的值
8.获取两个小数中较小的值
9.用一个方法获取两个整数中较大的值或较小的值
/*
第二题:分析以下需求,并用代码实现(每个小需求都需要封装成方法)
1.求两个整数之和
2.求两个小数之和
3.判断两个整数是否相等
4.判断两个小数是否相等
5.获取两个整数中较大的值
6.获取两个小数中较大的值
7.获取两个整数中较小的值
8.获取两个小数中较小的值
9.用一个方法获取两个整数中较大的值或较小的值
* */
public class zuoye_01 {
public static void main(String[] args) {
int i = huoQuMinMax(15, 2, "大");
System.out.println(i);
int sum1 = sum(1, 2);
System.out.println(sum1);
double sum2 = sum(1.2, 1.3);
System.out.println(sum2);
boolean judeg = judeg(1, 2);
System.out.println(judeg);
boolean judeg1 = judeg(1.1, 1.2);
System.out.println(judeg1);
int i1 = huoQuMax(1, 2);
System.out.println(i1);
double v = huoQuMax(1.1, 2.2);
System.out.println(v);
int i2 = huoQuMin(1, 2);
System.out.println(i2);
int i3 = huoQuMin(1, 1);
System.out.println(i3);
}
//1.求两个整数之和
public static int sum(int a,int b){
return a+b;
}
//2.求两个小数之和
public static double sum(double a,double b){
return a+b;
}
//3.判断两个整数是否相等
public static boolean judeg(int a,int b){
if(a==b){
return true;
}else{
return false;
}
}
//4.判断两个小数是否相等
public static boolean judeg(double a,double b){
if(a==b){
return true;
}else{
return false;
}
}
// 5.获取两个整数中较大的值
public static int huoQuMax(int a,int b){
return a>b?a:b;
}
//6.获取两个小数中较大的值
public static double huoQuMax(double a,double b){
return a>b?a:b;
}
//7.获取两个整数中较小的值
public static int huoQuMin(int a,int b){
return a<b?a:b;
}
//8.获取两个小数中较小的值
public static double huoQuMin(double a,double b){
return a<b?a:b;
}
// 9.用一个方法获取两个整数中较大的值或较小的值
public static int huoQuMinMax(int a,int b,String c) {
switch (c) {
case "大":
return a > b ? a : b;
case "小":
return a < b ? a : b;
default:
System.out.println("lsd");
return 0;
}
}
}
第二题
3、定义一个方法getNumSum,功能是计算1到100所有整数和,并打印输出。在main方法中调用getNumSum方法。(无参数无返回值)
/*
3、定义一个方法getNumSum,功能是计算1到100所有整数和,
并打印输出。在main方法中调用getNumSum方法。(无参数无返回值)
* */
public class zuoye_05 {
public static void main(String[] args) {
getNumSum();
}
public static void getNumSum() {
int sum = 0;
for (int i = 1; i <=100; i++) {
sum += i;
}
System.out.println(sum);
}
}
第三题
6、定义一个方法,该方法可以求出1到100之间所有偶数之和,
并将和返回。在main方法中调用该方法,并在控制台打印出结果。(无参数有返回值)
7、定义一个方法,该方法可以求出1到100之间所有奇数的个数,
并将个数返回。在main方法中调用该方法,并在控制台打印出结果。
/*
6、定义一个方法,该方法可以求出1到100之间所有偶数之和,
并将和返回。在main方法中调用该方法,并在控制台打印出结果。(无参数有返回值)
7、定义一个方法,该方法可以求出1到100之间所有奇数的个数,
并将个数返回。在main方法中调用该方法,并在控制台打印出结果。
* */
public class zuoye_08 {
public static void main(String[] args) {
int i = sumNumber();
System.out.println("偶数");
System.out.println(i);
System.out.println("奇数");
int i1 = sumNumber1();
System.out.println(i1);
}
public static int sumNumber(){
int sum = 0;
for (int i = 1; i <=100 ; i++) {
if(i%2==0){
sum+=i;
}
}
return sum;
}
public static int sumNumber1(){
int sum = 0;
for (int i = 0; i <=100 ; i++) {
if(i%2==1)
sum+=i;
}
return sum;
}
}
第四题
1.定义一个无返回值的方法,传入一个int类型数组,求出该数组中的最大值、最小值和平均值并输出。
2. 在main方法中定义一个int类型的数组{ 8, 3, 6, 9, 14 },调用上述方法进行测试。
/*
1.定义一个无返回值的方法,传入一个int类型数组,求出该数组中的最大值、最小值和平均值并输出。
2. 在main方法中定义一个int类型的数组{ 8, 3, 6, 9, 14 },调用上述方法进行测试。
* */
public class zuoye_15 {
public static void main(String[] args) {
int[] arr = {8,3,6,9,14};
Arr(arr);
}
public static void Arr(int[] arr){
int max = arr[0];//最大值
int min = arr[0];//最小值
int mean = 0;//平均值
for (int i = 0; i < arr.length; i++) {
if(max<=arr[i]){
max = arr[i];
}
if(min>=arr[i]){
min = arr[i];
}
mean+=arr[i];
}
mean/=arr.length;
System.out.println("最大值"+max);
System.out.println("最小值"+min);
System.out.println("平局值"+mean);
}
}
第五题
(1) 定义方法public static int getAvg(int[] arr),获取数组中的平均数并返回;
(2) 在main方法内,定义长度为10的int数组,使用随机数赋值,并调用getAvg方法获取平均分。然后遍历数组,统计高于平均分的分数有多少个。
打印结果:高于平均分:80 的个数有 5 个
import java.util.Scanner;
/*
(1) 定义方法public static int getAvg(int[] arr),获取数组中的平均数并返回;
(2) 在main方法内,定义长度为10的int数组,使用随机数赋值,并调用getAvg方法获取平均分。然后遍历数组,统计高于平均分的分数有多少个。
打印结果:高于平均分:80 的个数有 5 个
* */
public class zuoye_17 {
public static void main(String[] args) {
int[] arr = new int[10];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第"+(i+1)+"个元素");
arr[i] = sc.nextInt();
}
//avg就是数组的平均值
int avg = getAvg(arr);
//遍历循环查找比平均分高的的数
int sum1 = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]>avg){
sum1++;//用来统计比平均值高的元素的个数
}
}
System.out.println("高于平均分:"+avg+"的个数有"+sum1+"个");
}
//求数组的平均值
public static int getAvg(int [] arr){
int sum = 0;//这个是求数组的元素和
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
return sum/arr.length;
}
}
第六题
18、现有整数数组包含如下元素:{ 11 , 22 , 33 , 22 , 11 },获取一个键盘录入的整数num,
判断num在数组中最后出现的角标位置并在控制台打印输出,如元素在数组中不存在,也输出对应提示信息,演示格式如下:
import java.util.Scanner;
/*
18、现有整数数组包含如下元素:{ 11 , 22 , 33 , 22 , 11 },获取一个键盘录入的整数num,
判断num在数组中最后出现的角标位置并在控制台打印输出,如元素在数组中不存在,也输出对应提示信息,演示格式如下:
* */
public class zuoye_19 {
public static void main(String[] args) {
int [] arr ={1,22,33,22,11};
Scanner sc = new Scanner(System.in);
System.out.println("录入一个num整数");
int i = sc.nextInt();
int i2 = 0;
//因为要输出此元素在数组中最后出现的索引,所以我们把数组逆向遍历即可,第一次出现的位置就是最后一次出现的位置
for (int i1 =arr.length-1; i1 >= 0; i1--) {
//因为第一次的索引就是最后一次所以只要条件成立时就直接用break跳出循环
if(i ==arr[i1]){
System.out.println("录入的数在数组中最后的索引是:"+i1);break;
//else里面的语句是为了判断for循环执行了几次,如果执行了一遍还没有跳出循环代表是数组内没有该相同数值的元素.
}else{
i2++;
}
}
//这次是判断没有的.
if(i2==arr.length)
System.out.println("这个数不在数组中");
}
}
第七题
(1) 定义方法public static boolean isSXH(int num),功能:判断数字num是否是水仙花数,如果是返回true,如果不是返回false。
(2) 定义方法public static int getCount(),功能:借助isSXH方法,获取100到999以内水仙花个数,
(3) 定义方法public static int[] getArr(int count),根据参数值创建int数组,借助isSXH方法,获取100到999以内水仙花数,存入到数组并返回。
(4) 在main方法中调用getCount方法,获取水仙花的个数,然后调用getArr方法,将水仙花的个数作为参数传递,获取到返回值后遍历打印数组。
/*
(1) 定义方法public static boolean isSXH(int num),功能:判断数字num是否是水仙花数,如果是返回true,如果不是返回false。
(2) 定义方法public static int getCount(),功能:借助isSXH方法,获取100到999以内水仙花个数,
(3) 定义方法public static int[] getArr(int count),根据参数值创建int数组,借助isSXH方法,获取100到999以内水仙花数,存入到数组并返回。
(4) 在main方法中调用getCount方法,获取水仙花的个数,然后调用getArr方法,将水仙花的个数作为参数传递,获取到返回值后遍历打印数组。
* */
public class zuoye_20 {
public static void main(String[] args) {
//int [] arr = new int[4];
int count = getCount();//水仙花的个数
System.out.println(count);
int[] arr = getArr();
for (int i = 0; i <count ; i++) {
System.out.println(arr[i]);
}
}
//定义方法public static boolean isSXH(int num),功能:判断数字num是否是水仙花数,如果是返回true,如果不是返回false。
public static boolean isSXH(int num){
int ge = num%10;
int shi = num/10%10;
int bai = num/100;
if(num!=ge*ge*ge+shi*shi*shi+bai*bai*bai){
return false;
}
return true;
}
//定义方法public static int getCount(),功能:借助isSXH方法,获取100到999以内水仙花个数,
public static int getCount(){
int sum=0;
for (int i = 100; i <=999 ; i++) {
if(isSXH(i)){
sum++;
}
}
return sum;
}
//定义方法public static int[] getArr(int count),根据参数值创建int数组,借助isSXH方法,获取100到999以内水仙花数,存入到数组并返回。
public static int[] getArr(){
int sum = 0;
int[] arr = new int[getCount()];
for (int i = 100; i <=900 ; i++) {
if(isSXH(i)){
arr[sum++] = i;
}
}
return arr;
}
}