方法
为解决代码重复编写的问题,可以将重复的代码提取出来放在一个{}中,并为这段代码起个名字。这样每次在调用该功能是,只需要通过这个名字来调用代码就可以了。上述过程中,所提取出来的代码可以被看做是程序中定义的一个方法。程序在需要调用该功能时调用该方法即可。
简单的说:方法就是完成特定功能的模块化,模块化使得代码易于维护和调试,并且使得代码可以被重用。
- 在很多语言里面都有函数的定义
- 函数在Java中被称为方法
格式:
权限修饰符 状态修饰符 返回值类型 方法名 (参数类型 参数名1,参数类型 参数名2,…){
函数体;
return 返回值;
}
详细解释:
-
修饰符:
- 访问修饰符:public private protected (空默认)
- 状态修饰符:static final
- 抽象修饰符:abstract
-
返回值类型:就是功能结果的数据类型
-
方法名:符合命名规则
-
参数:
- 实际参数:就是实际参与运算的(方法中定义的参数)
- 形式参数:就是方法定义上的,用于接收实际参数的(在方法中声明的参数)
-
参数类型:就是参数的数据类型
-
方法体:就是完成功能的代码
-
return:结束函数,如果函数没有返回值可以不写,但是不写不代表没有
-
返回值:就是功能的结果,由return返回给调用者
-
返回值类型:返回值的数据类型(兼容即可),没有返回值写void
有返回值的方法调用
有明确返回值的方法调用:
- 单独调用,没有意义
- 输出调用,有意义,但是我们不一定要把结果输出
- 赋值调用,推荐方式
方法的注意事项
- 方法不调用不执行
- 方法与方法是平级关系,不能嵌套定义
- 方法定义的时候参数之间用逗号隔开
- 方法调用的时候不用在传递数据类型
- 如果有明确的返回值,一定要return带回一个值
无返回值方法的定义和调用
- 只能调用
- 不能输出
- 不能赋值
- 不能运算
方法重载概述和使用
方法重载概述:
-
在调用一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
-
重载方法可以使得程序更加清楚,以及更加具有可读性。执行同样功能但是具有不同参数类型的方法应该使用同样的名字。
-
被重载的方法必须具有不同的参数列表。不能基于不同修饰符或返回值类型来重载方法。
-
有时调用一个方法时,会有两个或更多可能的匹配,但是,编译器无法判断哪个时最精确的匹配。这称为歧义调用。歧义调用会产生一个编译错误。
- 如:
public class AmbiguousOverloading { public static void main(String[] args){ System.out.println(max(1,2)); } public static double max(int num1, double num2){ if (numl > num2) return numl; else return num2; } public static double max(double num1,int num2){ If (num1> num2) return num1; else return num2; } }
方法重载特点:
- 与返回值,权限修饰符无关,只看方法名和参数类型
- 在调用时,虚拟机通过参数列表的不同来区分同名方法
习题
1.输入一个数,判断是否是回文素数
import java.util.Scanner;
class Home26{
public static void main(String[] args){
//1.提示用户输入一个数字
int number=initData();
//2.判断是否是回文素数
if(isHuiWenSuShu(number)){
System.out.println("是");
}else{
System.out.println("不是");
}
}
public static int initData(){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
return scanner.nextInt();
}
public static boolean isHuiWenSuShu(int num){
//3.判断是否是素数且回文
return isHuiWen(num)&&isSuShu(num);
}
public static boolean isHuiWen(int num){
//4.计算翻转数字
int revNum=reverse(num);
return revNum==num;
}
public static int reverse(int num){
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10;
if(num==0){
break;
}
}
return sum;
}
public static boolean isSuShu(int num){
//5.计算素数
boolean flag=true;//是素数
for(int i=2;i<=num/2;i++){
if(num%i==0){
flag=false;
break;
}
}
return flag;
}
}
import java.util.Scanner;
class Class27{
public static void main(String[] args){
String pass = systemIn();
if(detection(pass)){
System.out.println("密码设置成功");
}else{
System.out.println("密码设置失败");
}
}
public static String systemIn(){
System.out.println("请输入密码");
Scanner s = new Scanner(System.in);
return s.next();
}
public static boolean detection(String pass){
boolean flag = true;
String str = strg();
if(!panduanBH(pass,str)){
flag = false;
System.out.println("密码存在非法字符");
}
if(!panduanCS(pass,str)){
flag = false;
System.out.println("数字不到两位");
}
if(!panduanCD(pass)){
flag = false;
System.out.println("密码长度不足");
}
return flag;
}
//通过遍历码表,将A-Z;a-z;0-9;添加到strg里
public static String strg(){
String strg = "";
//A-Z
for(char i = 65; i <= 90; i++){
strg = i + strg;
}
//a-z
for(char i = 97; i <= 122; i++){
strg = i + strg;
}
//0-9
for(char i = 48; i <= 57; i++){
strg = i + strg;
}
return strg;
}
//判断密码里是否有不包含数字和字母的内容
public static boolean panduanBH(String pass,String strg){
String[] pas = new String[pass.length()]; //将密码转为数组
String str = strg;
boolean flag = true;
for(int i = 0; i <pass.length(); i++){
pas[i] = pass.charAt(i)+"";
}
for(int i = 0; i < pas.length ; i++){
if(str.indexOf(pas[i]) == -1){
flag = false;
}
}
return flag;
}
//判断密码里的数字是否达到了两位数
public static boolean panduanCS(String pass,String strg){
String[] arr = new String[strg.length()];
boolean flag = true;
String[] pas = new String[pass.length()];
for(int i = 0; i < pass.length(); i++){
pas[i] = pass.charAt(i)+"";
}
for(int i = 0; i < strg.length(); i++){
arr[i] = strg.charAt(i)+"";
}
int count = 0; //记录数字出现的次数
for(int i = strg.indexOf("9"); i <= strg.indexOf("0"); i++){
for(int j = 0; j < pas.length ; j++){
if(arr[i].equals(pas[j])){
count++;
}
}
}
if(count < 2){
flag = false;
}
return flag;
}
//判断密码的长度是否达到了8位
public static boolean panduanCD(String pass){
if(pass.length()<8){
return false;
}
return true;
}
}