//(1)方法的本质及定义
/*
1.方法的本质:
方法就是一段代码片段,并且这段代码可以完成某个特定的功能,并且可以被重复的使用。
2.方法的定义:
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
2.1、关于修饰符列表
*可选项,非必须
*目前统一为:public static【以后讲】
*方法的修饰符列表中有static关键字的话,怎么调用
-类名.方法名(实际参数列表);
-引用.方法名(实际参数列表);【可以调用,但实际执行时和引用指向的对象无关,会出现警告】
2.2、返回值类型
*方法完成某个特定的功能后返回最终执行结果,执行结果可能是一个具体的数据,数据的类型就是返回值类型
*没有返回值用void,不过不可以用【return 字面值;】,但可以用【return;】结束当前方法
*如果有返回值,在方法体里要写【return 字面值;】,并且这个值要和方法的返回值类型一致
*只要使用了return方法就会结束
2.3、方法名:
*合法的标识符
*最好是动词
*首字母小写,后面每个单词首字母大写
*见名知意
2.4、形式参数列表:简称形参
*形参是局部变量:int a;double b
*形参可以有多个,用逗号隔开
*方法在调用的时候,是寄给这个方法传递的真实数据被称为:实际参数,简称实参
*实参列表和形参列表数量和类型必须相同
3.方法怎么调用:
方法之定义不去调用时不会执行的,只有在调用的时候才会执行
语法规则(当方法的修饰符列表中有static时):
类名.方法名(实参列表); //表示调用某个类的某个方法,传递这样的实参
方法名(实参列表); //表示调用当前类下的某个方法
*/
//(2)方法的内存
/*
1.方法只定义不调用是不会执行的,并且在JVM中也不会给该方法分配内存空间
2.在JVM内存划分上有这样三块主要的内存空间:
*方法区内存
*堆内存
*栈内存
3.关于栈数据结构
*栈:stack,是一种数据结构
*数据结构反映的是数据的存储形态
*数据结构是独立的学科
*精通数据结构和算法!!!!!!!!!
*java程序员在不精通的前提下也可以进行编程,因为java有一套庞大的类库
相当于别人写好了你直接用【javase中的集合章节使用了大量的数据结构】
*常见的数据结构
-数组
-队列
-栈
-列表
-二叉树
-哈希表/散列表
-……
4.方法代码片段
*方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候将其放到了方法区中。
所以JVM中的三块主要的内存空间中方法区内存最先有数据,其中存放的是代码片段
*代码片段虽然在方法区内存中只有一份,但是可以重复调用,每一次调用都会在栈内存中分配独立的内存空间
方法被调用时,会在栈中发生压栈动作,执行结束后,内存被全部释放,此时发生弹栈动作
-压栈:给方法分配内存
-弹栈:释放内存
5.局部变量在【方法体】中声明,局部变量运行阶段的内存在栈中分配
6.方法的执行内存分析
*参数传递的是变量中保存的值,不传递地址
*/
//公开的 定义类 类名
public class Method {//表示定义一个公开的类,起名Method,由于是公开的类所以源文件名必须是Method
//类体
//类体中除了声明变量外不能直接编写java语句
//类体中有方法
//公开的 静态的 无返回值 主方法 形参列表:(引用数据类型 局部变量名)
public static void main(String[] args) {//主方法固定编写形式,是程序的入口
//到这里main方法暂停执行sunInt方法,执行完成后会回来继续执行下一行代码
Method.sumInt(10,20);//调用方法,传递两个实参
int a=100,b=200;
Method.sumInt(a,b);
sumInt(b,a);//好像也可以
System.out.println(addInt(a,b));
int c = addInt(a,b);
System.out.println(c);
//求和
int n = -19;
//循环
int value = sum(n);
System.out.println(value);
//递归
if(n>=0) {
int value1 = sum1(n);
System.out.println(value1);
}
else
System.out.println("输入有误,程序结束!");
}
//修饰符列表 返回值类型 方法名 形参列表
public static void sumInt(int a,int b) {//自定义方法
int c = a+b;
System.out.println(a+"+"+b+"="+c);
}
public static int addInt(int a,int b) {
return (a<b?a+b:b);
}
public static int sum(int n) {
int i,sum=0;
for(i=0;i<=n;i++) {
sum+=i;
}
return sum;
}
public static int sum1(int n) {
if(n==1)
return 1;
else if(n==0)
return 0;
//else if(n>1) {
else {
//int sum=n+sum(n-1);
//return sum;
return n+sum(n-1);
}
}
}