一.函数的定义
函数就是定义在类中的具有特定功能的一段独立小程序(主要解决的是那些重复的且具有独立功能的代码块)函数也称为方法。
函数存在的意义:降低了代码的冗余,复用函数即可,降低了主函数的代码量,将主函数进行适当地拆分,以便内存的优化。
二.函数的格式
访问权限 函数类型 返回值类型 函数名(参数列表){
函数体
return返回值;
}
访问权限:指的就是函数的使用范围(内部和外部)。
- public
- protected
- 默认不写
- private
函数类型:指的就是函数类型分类,说的就是函数的具体使用场景和场合。
函数名:就是程序员给这一段代码自定义的名称(标识符)。
参数列表:参数列表有若干个 参数类型,参数名...组成,主要用于接收外界传递给函数的一些数据(形参)。参数可选可不选例如:MMath.random()方法中就没有参数。
函数体:具有独立功能的代码块。
return:仅仅表示结束当前函数,如果有返回值(代码块的计算结果),则函数结束前将返回值返回给调用者。如果发现return不在,是因为函数没有返回值,所以return可以忽略不写。
瞥告:在方法头中,需要对每一个参数进行独立的数据类型声明。例如:max(int numl,1nt num2)是正肩的,而 max(int numl,mim2)是错误的。
三.函数的分类
- 有返回值有参数
- 有返回值无参数
- 无返回值有参数
- 无返回值无参数
注意:有返回值的函数参与运算,输出,赋值。无返回值的函数仅仅进行调用,并不能对返回结果进行额外的操作。
四.函数传参
实际参数(实参):就是在调用函数的时候给函数传递的数据(常量,变量)叫做实参。
形式参数(形参):就是定义函数的时候,参数列表当中的数据,叫做形参。
注意:实参是把常量在常量池中的地址和 对象在堆内存中的地址 传递给形参的。
解释:程序从主函数开始运行,a,b当中存的是4和6在常量池中的地址,遇到double c = pow(a,b),则先执行pow(a,b),得出结果sum,然后将sum中所存的地址传递给c,之后程序继续往下执行。
五.函数栈
函数的运行是基于栈内存的(栈是一个先进后出的一个容器结构)。
每当调用一个方法时,系统会创建一个活动记录(也称为活动框架),用于保存方法中 的参数和变量。活动记录置于一个内存区域中,称为调用堆栈(call stack)。调用堆栈也称 为执行堆栈、运行时堆栈,或者一个机器堆栈,常简称为 “堆栈”
如图1为函数栈的运行流程:
图2堆栈中用于方法调用的记录
六,程序题
1.
分析:回文素数里面再调用回文函数和素数函数分别实现对应的功能。
class Demo04_06{
public static void main(String[] args){
int count=0; //表示回文素数的个数
int num=2; //表示可能的回文素数的数字 从2开始~?
while(true){
//如果num是 回文素数
if(isHuiWenAndSuShu(num)){
count++;
System.out.print(num+" ");
if(count%10==0){ //每十个数换一行
System.out.println();
}
}
if(count==100){
break;
}
num++;
}
}
public static boolean isHuiWenAndSuShu(int num){
return isHuiWen(num)&&isSuShu(num);
}
public static boolean isHuiWen(int num){
return reverse(num)==num;
}
public static int reverse(int num){ //实现反序
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10;
if(num==0){
return sum;
}
}
}
public static boolean isSuShu(int num){//判断素数
for(int i=2;i<=num/2;i++){
if(num%i==0){
return false;
}
}
return true;
}
}
2.
分析://本身是素数
//反转之后也是素数
//不能是回文
class Demo04_07{
public static void main(String[] args){
int count=0;
int num=2;
while(true){
if(isFanZhuanSuShu(num)){
count++;
System.out.print(num+" ");
if(count%10==0){
System.out.println();
}
}
if(count==100){
return; //结束当前函数
}
num++;
}
}
//1.本身是素数
//2.反转之后也是素数
//3.不能是回文
//素数() 反转() 回文功能()
public static boolean isFanZhuanSuShu(int num){
return isSuShu(num)&&isSuShu(reverse(num))&&!isHuiWen(num);
}
//回文功能
public static boolean isHuiWen(int num){
return reverse(num)==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 int reverse(int num){
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10;
if(num==0){
return sum;
}
}
}
}
3.
import java.util.Scanner;
class Demo04_02{
public static void main(String[] args){
//1.提示用户输入一个数字
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
//2.判断该数字是否是一个回文
if(isPalindrome(num)){ // pause1
System.out.println("是回文");
}else{
System.out.println("不是回文");
}
//return ;
}
public static boolean isPalindrome(int num){
//1.先计算该数字的反序
//2.对比反序的数字和数字本身
return reverse(num)==num;
}
public static int reverse(int num){
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10;
if(num==0){
return sum;
}
}
}
}