java基础知识点 第九章

1.方法执行内存分析:
(1)方法在执行过程中,在JVM中的内存是如何分配的?内存如何变化?
    方法之定义,不调用调用,是不会执行的,并且在JVM中也不会给给方法分配所属的内存空间
   只有在调用这个方法的时候,才会动态的给这个方法分配所属的内存空间
(2)在JVM内存划分上有三块主要的内存空间
    *方法区内存
    *堆内存
    *栈内存
(3)关于栈的数据结构:
 栈:stack,属一种数据结构,数据结构反映的是数据的存储形态,是独立的学科,不属于任何编
 程语言的范,畴只不过在大多语言中使用数据结构,作为程序员需要精通:数据结构+算法
 常见的数据结构:
    -数组
    -队列
    -栈
    -链表
    -二叉树
    -哈希表/散列表
    ...
(4)方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配?
   *方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放到了方法区,
   当中,所以JVM中的中的三块主要的内存空间中方法区内存最先有数据,存放了代码片段
   *代码片段虽然在方法区内存当中只有一份,但是可以被重复调用
   每一次调用这个方法的时候,需要给这个方法分配独立活动场所,在栈内存中分配。

(5)方法在调用的时候,会给该方法分配独立的内存空间,会在栈中发生压栈动作,方法
执行结束之后,该方法分配的内存空间全部释放,此时会发生弹栈动作。
  *压栈:给方法分配内存
  *弹栈:释放该方法的内存空间

(6)局部变量在栈中存储,局部变量在方法体中声明

方法调用的时候,在参数传递的时候时间上传递的是变量中保存的那个值,传过去了
(8)会画图
2.方法的重载机制:
以下代码不适用方法重载机制,overload,分析程序缺点?
*sumInt,sumLong,sumDouble方法虽然功能不同,但是功能相似都是求和。
功能相似的方法,起了不同的名字,对于程序员记忆不方便,调用不方便
*代码不美观
有这样一种机制:方法重载。当虽然功能不同,但是功能相似的时候,可以让程序员使用这些方法的时候
就想在使用【同一个方法】一样,这样程序员比较方便,不必记忆更多的方法名
public class OverloatTest01
{
    //入口
    public static void main(String[] args){
       //调用方法
       int result1=sumInt(1,2);
       System.out.printIn(result1);

       double result2=sumDouble(1.0,2.0);
       System.out.printIn(result2);

       long result3=sumLong(1L,2L);
       System.out.printIn(result3);
    }
    //定义一个方法,可以计算了两个int类型数据的和
    public static int sumInt(int a,int b){
         return a+b;
    }
     //定义一个方法,可以计算了两个double类型数据的和
    public static double sumDouble(double a,double b){
         return a+b;
    }
     //定义一个方法,可以计算了两个long类型数据的和
    public static long sumLong(long a,long b){
         return a+b;
    }
}
优点:
程序员调用方法的时候,比较方便,虽然调用的是不同的方法,但是个感觉在使用一个方法一样,不需要
记忆更多的方法名
前提:功能相似的时候,方法名可以重名,但是功能不同的时候,尽可能让这两个方法名字不同
public class Overload02
{
   public static void main(String[] args){
     System.out.printIn(sum(1,2));
     //参数的类型笔筒,对应调用的方法不同,此时区分方法不再依靠方法名了,依靠的是
     参数的数据类型
     System.out.printIn(sum(1.0,2.0));
     System.out.printIn(sum(1L,2L));
   }
   public static int sum(int a,int b){
      return a+b;
   }
   public static long sum(long a,long b){
      return a+b;
   }
   public static double sum(double a,double b){
      return a+b;
   }
}
3.在什么条件下满足之后构成了方法重载?
*在同一个类当中
*方法名相同
*参数列表不同
   数量不同
   顺序不同
   类型不同

4.方法重载和什么有关系,和什么没关系?
方法重载和方法名+参数列表有关系和返回值类型(void int等)、修饰符列表(public static)无关
5.方法的递归调用:
方法自身调用自身
a(){
  a()
}
递归算法可以不用尽量不用,当出现java.lang.StackOverflowErrow发生了这样一个错误,不是异常,
是错误,栈内溢出错误。
递归如果没有结束条件,就会出现溢出错误
采用递归计算1-4的和:
4+sum(3)
4+3+sum(2)
4+3+2+sum(1)
4+3+2+1
public class DateTypeTest06
{
  public static void main(String[] args){
     int n=4;
     int retValue=sum(n);
     System.out.printIn(retValue);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值