栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java day04

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java day04

方法、重载、递归

1.方法
1.1概述
方法:就是很多条语句的集合,把这些代码放到方法中,然后就可以多次使用这个方法
方法目的:代码复用,使程序变得更加简短清晰,提高开发的效率
1.2方法声明
声明:
修饰符列表 返回值类型 方法名 (参数列表){方法体}

修饰符列表:可以有,可以没有,可以多个
权限修饰符:public protect private 不写 四选一
其他修饰符:static,synchronized ,abstract,final二选一
返回值类型:11种数据类型中的一种,如果不需要返回值,则写void
方法名:方法的名字,望名知义,驼峰命名法
参数列表:要做一件事,需要的必备条件,可以作为入参
可以多个,用逗号隔开 比如: int a,int b ,int c…

形参:在方法声明的时候,定义的参数列表
实参:方法调用时,方法调用时实际传入的数据

方法体:

1.3方法分类
1.静态方法:使用static修饰的方法,是静态方法
2.成员方法:没有static修饰的方法是成员方法
3.构造方法:创建对象使用,先不管

调用:
静态方法:类名.静态方法名(参数),同类中 类名可以省略
成员方法:对象引用.成员方法名(参数)
方法不调用不执行,调用才执行,并把结果返回到调用处

public static void main(String []args){
int result = method_01.m1(123,5312);
System.out.println(result);
}
public static int m1(int a,intb){
  return a + b;
}
public static void m2(){
  return;
}

1.4入参和出参

public static void main(String[] args) {
	// print_01();
	// print_02(5);
	int result = sum(12, 120);
	System.out.println(result);
}

// 1 需求 : 向控制台打印1-10
public static void print_01() {
	for (int i = 1; i < 11; i++) {
		System.out.println(i);
	}
}

// 2 需求 : 向控制台打印1-N的值
// 参数列表中的变量是局部变量
public static void print_02(int n) {
	for (int i = 1; i <= n; i++) {
		System.out.println(i);
	}
}

// 3 需求 : 计算 n~m的累加加和,并返回
// ps : n和m均为整数,且 m > n
public static int sum(int n, int m) {
	int sum = 0;
	for (int i = n; i <= m; i++) {
		sum += i;
	}
	return sum;
}

// 4 需求 : 给定三个整数 , 返回其中最大的一个数, ps 你可以假设 三个数不相等
public static int max(int a, int b, int c) {
	if (a > b && a > c) {
		return a;
	} else if (b > a && b > c) {
		return b;
	} else {
		return c;
	}
}
1.5方法重载
方法唯一性:
方法名和参数
方法重载:overload方法名相同,参数列表不同

列表不同分为:个数不同和类型不同

2.内存分析
2.1内存划分
* Java Runtime Data Area : java运行时区域,一般叫JVM内存
*

  • 程序计数器 :
  •  	一块较小的内存区域.作用可以看做是当前程序执行的位置指示器
    
  • 静态区/方法区 :
  •  	保存程序文件(class文件) 以及静态数据,方法被调用之前,也保存在静态区,内部还有运行时常量池
    
  • VM栈 : 又叫栈内存
  •  	栈内存是以栈数据结构为模型开辟的一段空间, 特性是先进后出
    
  •  	栈 : 是一种数据结构,先进后出,像弹夹
    
  • 栈的构成因素
  •  栈空间 : 栈内存就是栈空间
    
  •  栈帧	: 栈空间中的每一个栈元素 就叫栈帧(比如 弹夹中的每一个子弹 就叫栈帧)
    
  •  栈底元素 : 第一个放进去的栈帧
    
  •  栈顶元素  : 最后一个放进去的栈帧
    
  • 栈操作
  •  压栈 : 就是指把元素放入栈空间的过程
    
  •  弹栈 : 就是把元素弹出去的过程
    
  • 栈内存,是用来执行方法的,所有方法的执行,必须在栈内存进行
  • 本地方法栈 :
  •  用来执行一些本地方法,比如hashCode 等 , 模型和操作都和VM栈一致 , 不用管,
    
  • 堆内存 :
  •  	用来保存对象
    

2.2运行机制
1.java程序编写
2.java编译,得到class文件
3.java命令 运行


3.递归
3.1概述和基本使用
递归:方法中调用当前方法
递归思想
递归和迭代是等价的就是循环
基本思想就是以此类推
应用场景:
循环能做的,递归都能做,但是这种情况下,优先使用循环,因为递归非常消耗内存,运行效率低,但是像树状结构之类的,循环是没法做的只能通过递归来搞定

常见问题
所有树状结构
文件夹复制
斐波那切数列

难点:不容易理解,递归思想
画图。栈帧调用图

注意 必须终止条件,否则就等于死循环一样,导致一直压栈不会弹栈而出现的内存溢出问题

以下就是因为没有终止条件导致栈内存溢出
public static void main (String []args){
m1();
}
public static void m1(){
m1();
}
//1-N的累加加和

public static int sum(int n){
if(n==1){
return 1;
}
else{
return n+sum(n-1);

}
}

3.2斐波那契数列

public static void main(String[] args){
int result = factorial(20);
System.out.println(result);

public static int factorial(int n){
if(n==1 || n==2){
return 1;
}else{
 return factorial(n-1) + factorial(n-2);
}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/697419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号