一 成员变量:
1)实例变量:没有static修饰,属于对象的,存储在堆中
有几个对象就有几份
通过对象名点来访问
2)静态变量:有static修饰,属于类的,存储在方法区中
只有一份
通过类名点来访问
class Aoo{
int a;
static int b;
}
二 static:静态的
1)静态变量:
1.1)由static修饰
1.2)属于类的,存储在方法区中,只有一份
1.3)常常通过类名点来访问
1.4)何时用:所有对象所共享的数据(图片、音频、视频等)
2)静态方法:
2.1)由static修饰
2.2)属于类的,存储在方法区中,只有一份
2.3)常常通过类名点来访问
2.4)静态方法没有隐形this传递,
所以在静态方法中不能直接访问实例成员
2.5)何时用:方法的操作仅与参数相关而与对象无关
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
double b = scan.nextDouble();---------------实例方法(对象点出来)
double c = Math.random();
int[] a1 = Arrays.copyOf(a,6);
Arrays.sort(arr);---------------------------静态方法(类点出来,首字母大写的点出来)
double a = Math.sqrt(25);
//假设sqrt()不是静态的:
Math m1 = new Math();
double a = m1.sqrt(25);
Math m2 = new Math();
double b = m2.sqrt(25);
Math m3 = new Math();
double c = m3.sqrt(25);
//无论m1,m2,m3,...,m100中的哪一个对象,
//去sqrt(25),最终的结果都是一样的,
//说明sqrt()的操作仅与参数相关而与对象无关
Arrays.sort(arr);
//假设sort()不是静态的:
Arrays a1 = new Arrays();
a1.sort(arr);
Arrays a2 = new Arrays();
a2.sort(arr);
Arrays a3 = new Arrays();
a3.sort(arr);
//无论a1,a2,a3,...,a100中的哪一个对象,
//去sort(arr),最终的结果都是一样的,
//说明sort()的操作仅与参数相关而与对象无关
Noo o4 = new Noo();
Noo o5 = new Noo(); //主方法中调用输出静态块--构造方法--构造方法
class Noo{ //演示静态块
static{
System.out.println("静态块");
}
Noo(){
System.out.println("构造方法");
}
}
3)静态块:
3.1)属于类的代码,在类被加载期间自动执行,
类只被加载一次,所以静态块只执行一次
3.2)何时用:静态块常常用于加载/初始化静态资源(图片、音频、视频等)
三 内存管理:
1)堆:new出来的对象(包括实例变量)
2)栈:局部变量(包括方法的参数)
3).class字节码文件(包括方法、静态变量)