首页 > 其他 > 详细

修饰符 方法区/元数据 元空间 永久代

时间:2021-05-24 23:13:54      阅读:21      评论:0      收藏:0      [点我收藏+]

1.类的访问修饰   public   default(默认)

2.方法和对象的修饰   public   protected  default(默认)   private

3.static 静态   随着类信息的加载而加载,只加载一次;

4.方法区:  方法区是sun公司提供的一个规范。JDK7之前叫永久代,JDK8称之为元数据,元空间。

 

=========================================================================================================

     jvm 将.java文件编译成.class文件,详细的.java的信息,在保存后生成md5校验码,其后每一次的修改和保存会更替为新的md5;

通过比较md5,jvm确定是否需要重新编译;

 正确的java文件随着类新的加载,初始化静态变量(类 )变量,同时执行类方法(静态方法),加载完毕后如果没有新的改动不再加载

所以:          静态变量和方法只加载一次;多个静态方法按照书写顺序加载:

  

创建对象时,首先在堆中开辟变量空间,生成相应的地址,然后将地址赋给栈中的索引;

栈中的索引可以(但不是必须)被地址多重赋值,随着后续的赋值覆盖前边的赋值,索引指向不同的地址;

 

static 修饰方法:

堆和方法区共享同一块内存,因而对象(非静态)可以访问静态方法;

但方法区的空间是固定存在的,而堆中的空间随着实例化而动态变化

每调用一次即执行一次;

 

static 修饰代码块:

静态代码块 随着JVM加载类信息文件而执行
每个静态代码块只执行一次 因为类只加载一次(不管有多少个对象)
多个静态代码块按照书写顺序执行

 

// 选民投票,每人1票,百票则止; 

public class Voter2 {
  static int tickets =100 ;
  private String name;

  public void voteto() {
    if(tickets>0) {
      tickets--;
    }
  }
    public static void main(String[] args) {
      for (int i = 1; i <= 125; i++) {
        Voter2 kki =new Voter2();
        kki.setName("第"+i+"号选民");
        if(tickets>0) {
          kki.voteto();
           System.out.println(kki.getName()+"投出1票,剩余"+Voter2.tickets+"票");
        }
      }
    }
      public String getName() {
      return name;
      }
        public void setName(String name) {
        this.name = name;
        }
}

修饰符 方法区/元数据 元空间 永久代

原文:https://www.cnblogs.com/msslearning/p/14806119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!