java基础(7)--方法
方法
Math.sqrt() 取平方 Math.pow(2,3) 2的3次方
方法(Method),就是数学函数(Function)。 业务方面: 是功能,是动作,一般采用动词命名。 数据层面:是利用算法操作数据模型,实现业务功能。 方法就是数据算法。
方法的声明
方法用于封装特定的逻辑功能。方法的主要要素有:方法名、参数列表和返回值。方法在类中定义,不能在方法中定义。
语法结构
修饰符 返回值类型 方法名(参数列表)
{
// 方法体
}
方法要素--返回值
方法调用结束后可以返回一个数据,称之为返回值。方法在声明时必须指定返回值类型。如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为void,通过return语句返回,return语句的作用在于结束方法并且将数据返回。
return a+b; return语句返回该表达式的值
return; 对于返回值为void的方法也可以使用return语句,此时该语句的作用在于结束方法调用。
如果方法声明的返回值,必须在方法体使用return 语句返回数据!
方法要素--参数列表
方法的参数是指:在调用时传递给方法,需要被方法处理的数据。在定义方法时,需要声明该方法所需要 参数变量。在方法调用时,会将实际的参数值传递给方法的参数变量。必须保证传递参数的类型和个数符合方法的声明。
方法的调用过程
public static int max(int a, int b){....}
int a=5; int b=6;
int max=max(5 , 6);
(1)为main方法中的便利a b max 分配空间并赋值
(2)调用方法max,为max方法的参数变量a, b分配空间
(3)将调用值传入参数变量中
(4)max方法运行完返回,参数变量空间释放。
(5)main方法中的max变量得到返回值。
求斐波那契(Fibonacci) 数列(第n项 等于前两项的和)
public static long f(long n) {
long f1 = 1;
long f2 = 1;
long fn = 2;
for(int i = 3; i <= n; i++){
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
return fn;
}
方法的递归调用
1. java 的栈是Java进程启动时候在内存中开辟的存储空间。栈内存的利用方式LIFO(后进先出)。ava所有局部变量都在栈中分配(压入), 方法的参数也是局部变量,局部变量在离开作用域时候回收 就是从栈中弹出(删除)。
2. Java方法调用使用栈实现, 递归调用就是栈实现的
3. 递归时候要按照递归深度分配全部临时变量, 栈开销很大,性能不好,要注意不要超过栈的大小, 并且一定要给出结束条件, 否则会造成栈溢出错误。
递归的优点与缺点
优点:业务问题解决的很优雅 只需要解决一个层次,其他层次问题就递归解决了。
缺点:大量消耗栈内存空间,不能进行过深层次的递归。否则可能出现栈溢出错误。
使用递归的要点
1)不能过深的递归
2)不能发散递归
3)必须有结束条件
案列
递归实现1+2+...+1000=? fn(n)=f(n-1)+n
public static int f(int n) {
if(n == 1){
return 1;
}
return n + f(n - 1);
}
斐波那契
public static long f1(long n) {
if(n == 1 || n == 2){
return 1;
}
return f1(n - 1) + f1(n - 2);
} public static long f(long n) {
long f1 = 1;
long f2 = 1;
long fn = 1;
for(int i = 3; i <= n; i++){
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
return fn;
}
最新文章
- json字符串转java对象数组
- MySQL服务器状态变量
- Google物联网操作系统协同框架Weave深度解析
- 【Python】一个python实例:给重要的文件创建备份.摘自crossin-python简明教程
- SCALA编程实例
- Andriod:如何卸载模拟器上已经安装的应用程序?
- 《C++之那些年踩过的坑(三)》
- aos.js超赞页面滚动元素动画jQuery动画库
- [COGS 1065] 绿豆蛙的归宿
- iOS 类似朋友圈的图片浏览器SDPhotoBrowser
- window10 蓝牙只能发不能收文件解决办法
- docker run -v参数
- Java笔记(三)异常
- 田螺便利店——联想笔记本进入不了BIOS的解决方法
- Ubuntu 设置UFW防火墙
- Can you answer these queries?(HDU4027+势能线段树)
- always on 技术
- Mac eclipse安装SVN javaHL not available的解决方法
- MySQL数据库服务器参数优化mycnf,16G内存8核CPU,
- 「零秒思考」是个神话,不过这款笔记术你值得拥有zz
热门文章
- CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
- java was started but returned exit code=1
- shop++源码反编译----随笔
- IE、FF脚本兼容性问题
- Selenium Firefox 官方Webdriver -- Geckodriver 下载地址
- matplotlib绘制圆饼图
- JS toLowerCase()方法 toUpperCase()方法
- 储存应用程序的配置信息ini实现方式
- 命名空间 <;iostream>;和<;iostream.h>; 由程序设计者命名的内存区域
- Universally Unique Identifier amazonservices API order 亚马逊订单接口的分析 NextToken