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