java完整内存结构
static关键字
public class staticTest {
public static void main(){
Role r1 = new Role("簌簌");
Role r2 = new Role("苏轼");
Role r3 = new Role("阿飞");
}
}
/*
static关键字
-*静态变量*-
1.静态变量或方法不属于对象,依赖类
2.静态变量在内存中仅有一份拷贝,所有对象共享,在静态方法区中存储
3.静态变量是全局悲凉,生命周期从类被加载一直到程序结束
4.建议不要使用对象名调用静态数据,使用类名进行调用
-*静态方法*-
1.static修饰一个方法,那么该方法属于类,不属于对象,直接用类名调用
2.静态方法不能访问非静态变量
3.静态方法仅能调用静态方法
4.不能以任何方式引用this或super
*/
class Role{
private String name;
//private String country;
private static String country = "中国"; //静态属性,进行优化,多个实例共
//用一个属性内容,避免重复
public Role(String name){
this.name = name;
}
public static void setCountry(String country){
Role.country = country;
}
}
代码块与静态代码块
/*
代码块:
1.普通代码块,在方法中写的代码块,限制变量的生命周期
2.构造块,是在类中定义的代码块,在每次创建对象的时候都会被调用,优于构造方法执行
3.在类中使用static关键字声明的代码块被称为静态代码块
仅在第一次使用的时候被调用(创建对象),只会执行一次,优于构造块执行
在项目开发过程中,通常会使用静态代码块来初始化只调用一次的数据
小结:重点会使用静态代码块,使用频率关系普通代码块》同步代码块》构造代码块
*/
public class static2 {
public static void main(String[] args){
new Student();
//结果是
}
}
class Student{
static{
System.out.println("我是静态代码块");
}
{
System.out.println("我是构造代码块");
}
public Student(){
System.out.println("构造方法执行");
}
public void study(){
//限制作用域
{
int i = 10;
System.out.println("我是普通代码块");
}
}
}