1、方法的定义及格式
概念:方法的定义由方法名称、参数、返回值类型以及方法体组成。
语法格式:
修饰符 返回值类型 方法名(参数列表){
...
方法体
...
return 返回值;
}
方法头及方法体:
分类:
无参无返回值方法
无参有返回值方法
有参无返回值方法
有参有返回值方法
注意事项:
定义方法和声明变量有细微的差别,定义指被定义的条目是什么,而声明通常是指为被声明的条目分配内存来存储数据。
2、调用方法
分类:单独调用,赋值调用,语句调用
说明:当程序调用一个方法时,程序控制就转移到被调用的方法。当执行完return语句或执行到表示方法结束的右括号时,被调用的方法将程序控制返还给调用者
注意事项:
对带返回值的方法而言,return语句是 必须的。
每当调用一个方法时,系统会创建一个活动记录(也称活动框架),用户保存方法中的参数和变量。活动记录置于一个内存区域中,称为调用堆栈(call stack)。调用堆栈也称为执行堆栈、运行时堆栈,或者一个机器堆栈,常简称为“堆栈”。当一个方法调用另一个方法时,调用者的活动记录保持不动,一个新的活动记录被创建用于被调用的新方法。T一个方法结束返回到调用者时,其相应的活动记录也被释放。
3、重载方法
引入:
两个数相加,需要一个函数名字getSum,三个数相加需要一个函数名字getSum2,那么有100个数相加,是不是需要getSum100了?那是不是在调用函数时还需要去记住哪个函数名对应多少个参数?这显然是不可能的,所以使用重载这个功能就可以解决问题。
概念:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可,这时就形成了重载。重载与返回值类型无关。
void show(int a,float b,char c){}
下面哪些函数和给定函数重载了:
(1)int show(int x,float y,char z)//没有重载,这个函数不允许和给定函数存在于同一个类中。因为会产生调用的不确定性。
(2)void show(float b,int a,char c)//重载了,参数类型不同。
(3)void show(int c,float a,char b)//没有重载,和给定函数一样。不允许存在。
(4)void show(int a,int b,int c)//重载了,因为类型不同。
(5)double show()//重载了,因为个数不同。
4、经典例题
(1)编写一个程序,提示用户输入一个社保号码,它的格式是DDD-DD-DDDD,其中D是一个数字。你的程序应该判断输入是否合法。
import java.util.Scanner;
class Class21{
public static void main(String[] args){
/*
for(int i=0;i<10;i++)
System.out.println(i);
*/
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a SSN:");
String ssn=scanner.nextLine();
if(ssn.length()!=11){
System.out.println("非法!");
return;
}
for(int i=0;i<ssn.length();i++){
char c=ssn.charAt(i);
if(i==3||i==6){
if(c!='-'){
System.out.println("非法!");
return;
}
}else{
if(c<'0'||c>'9'){
System.out.println("非法!");
return;
}
}
}
System.out.println("合法!");
}
}
解题思路:对这11个字符进行遍历,第4个和第7个是-,字符必须是11个,除了第4个和第7个字符,其他的必须是0-9的整数。
(2)一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。假定密码规则如下:
密码必须至少8位字符。
密码仅能包含字母和数字。
密码必须包含至少两个数字。
编写一个程序,提示用户输入一个密码,如果符号规则,则显示Valid Password,否则显示Invalid Passward。
import java.util.*;
class Class27{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个密码:");
String pwd=scanner.nextLine();
if(isValid(pwd)){
System.out.println("合法!");
}else{
System.out.println("不合法!");
}
}
public static boolean isValid(String pwd){
return isRight1(pwd)&&isRight2(pwd)&&isRight3(pwd);
}
public static boolean isRight1(String pwd){
return pwd.length()>=8;
}
public static boolean isRight2(String pwd){
for(int i=0;i<pwd.length();i++){
char c=pwd.charAt(i);
if(isDight(c)&&isLetter(c)){
return false;
}
}
return true;
}
public static boolean isRight3(String pwd){
int dightCount=0;
for(int i=0;i<pwd.length();i++){
char c=pwd.charAt(i);
if(isDight(c)){
dightCount++;
}
}
return dightCount>=2;
}
public static boolean isDight(char c){
return c>'0'&&c<'9';
}
public static boolean isLetter(char c){
return (c>'a'&&c<'z')||(c>'A'&&c<'Z');
}
}
(3)求100以内的回文素数,一个数字既是回文数字又是素数。
class Demo15{
public static void main(String[] args){
int count=0;
int num=2;
while(count!=100){
if(isWeNeed(num)){
System.out.print(num+" ");
count++;
if(count%10==0){
System.out.println();
}
}
num++;
}
}
public static boolean isWeNeed(int num){
return isSuShu(num)&&isPalindrome(num);
}
public static boolean isSuShu(int num){
for(int i=2;i<=num/2;i++){
if(num%i==0){
return false;
}
}
return true;
}
public static boolean isPalindrome(int num){
return num==reverse(num);
}
public static int reverse(int num){
int sum=0;
while(num!=0){
sum=sum*10+num%10;
num/=10;
}
return sum;
}
}