Java函数概念理解
在C/C++/Python当中 函数的定义必须在函数调用之前在Java当中 随便 之前 之后
函数格式
访问权限 函数类型 返回值类型 函数名(参数列表){
函数体
return 返回值;
}
- 函数名:就是程序员给这一段代码自定义的名称(标识符)
- 参数列表:参数列表有若干个 参数类型,参数名… 组成 主要用于接收外界传递给函数的一些数据
- 函数体:就是那些具有独立功能的代码块
- return:仅仅表示结束当前函数,如果有返回值,则函数结束前将返回值返回给调用者
- 返回值:指的就是这一具有独立功能的代码块的计算结果,需要传递给外界 配合return
- 返回值类型:就是返回值的数据类型(可兼容)
下来我们来解读一下Java我们写入的
public static void main(String[] args){
中各个单词所代表的含义
class Test01{
public static void main(String[] args){
//public 主函数是公开权限 最大权限
// static 主函数是静态函数
//void 该函数没有返回值
//string[] String[] 表示的是一个字符串数组(数据类型)
//args 就是这个数据类型的变量名称
System.out.println("来了老弟~");
}
}
***
注:
发现return不在,而是因为函数没有返回(void), 所以return可以忽略不写, 不代表不存在,return本身代表结束当前函数。
如果函数有返回值 return 返回值; 必须写
**1.函数定义:**函数主要解决的是那些重复的且具有独立功能的代码段,将这些具有独立功能的代码可以进行再次封装 封装出来的东西就成为是函数。
2.函数存在的意义:很明先的优势,降低了代码冗余复用函数即可,降低了主函数的代码量,将主函数进行适当的拆分,以便内存优化。就是将函数模块化。
3.访问权限:指的就是函数的使用范围(内部和外部) :
public 主函数是公开权限 最大权限,
protected ,默认不写,private ,四种从公开的到私有。
**4.函数类型:**指的就是函数类型分类,说的就是函数的具体使用场景和场合.
- static 静态函数
- 默认不写 成员函数
- abstract 抽象函数
- native 本地函数
- synchronized 同步函数
5.函数的分类:
1.有返回值有参数
2.有返回值无参数
3.无返回值有参数
4.无返回值无参数
注:有返回值的函数,参与运算、输出、赋值
无返回值的函数,仅仅调用
6.函数传参
1.实际参数-实参:就是在调用函数的时候,给函数传递的数据(常量,变量)叫做实参
2.形式参数-形参:就是定义函数的时候,参数列表当中的数据,叫做形参。
那到底实参把什么东西传递给了形参----常量在常量池中的地址,常量在常量池中的地址
3.局部变量:但凡是在函数中创建的变量 称之为是局部变量 局部变量的作用域仅仅在当前的函数当中,形式参数一定是局部变量
7.函数栈:函数的运行是基于栈内存的,
栈是一个先进后出的一个容器结构,子弹按顺序123456进栈,按顺序出栈654321。
可以将每一个函数理解为是子弹(函数帧/栈帧),位于栈顶的函数帧优先运行的,主函数绝对是第一个进栈的。
return结束当前函数 -> 当前函数弹栈。
class Demo04_01{
public static void main(String[] args){
//1.先输入一个数字
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
long num=scanner.nextLong();
//2.调用函数将num拆分求和
int sum=sumDigits(num);
System.out.println(sum);
}
public static int sumDigits(long n){
int sum=0;
while(true){
sum+=n%10;
n/=10;
if(n==0){
return sum;
}
}
}
}
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.对比反序的数字和数字本身
//pasue 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;
}
}
}
}
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;
}
}