1.类变量
1.1类变量的定义
类变量也叫静态方法,对于该类的所有对象共享一个变量,所有该对像访问它时获得的都是相同的值。类变量在类加载但还未创建时就已经形成,因此有了杯该类所有对象共享的特性。
1.2普通变量(实例变量)与类变量的区别
1.不同对象的普通变量不同
2.所有对象共享类变量
3.可以直接通过类名直接诶访问类变量,普通变量必须通过对象访问
2.类方法
2.1类方法的定义
声明方法时,在方法类型前面加上关键字static,方法就具有了通过类名直接访问的特性,也是在加载类时就被加载的,不需要调用的对像是具体的对象。
2.2普通的方法(实例方法)和类方法区别
1.对象调用实例方法
类的字节码文件被加载到内存时,类的实例方法不会分配内存入口地址,只有当类创建对象后,类中的实例方法才会分配入口地址,从而实例方法可以被类创建的任何对象调用、执行。需要注意的是,当创建第一个对象时,类中的实例方法就分配了入口地址,当在创建对象时,不在为实例方法分配地址入口。也就是说,方法的入口地址所有的对象对象共享,当所有的对象都不存在时,方法入口才被取消。
在实例方法中不仅可以操作实例变量,也可以操作类变量,实例方法可以调用类中的实例方法和类方法(不包括构造器)。
2.类名调用类方法
对于类方法,在该类被加载到内存是就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用、执行。从而达到被类对象和类名调用的功能。类方法的入口地址只有在程序退出时才会被取消。 实例方法不可以通过类名调用,只有类方法可以。
实例:
package com.gmu.test01;
public class demo01 {
public static void main(String[] args) {
//调用静态属性和方法
System.out.println("静态属性: A.num2 = " + A.num2);
A.m2(); //静态方法
//调用普通属性
A a = new A();
System.out.println("普通属性: a.num1 = " + a.num1);
System.out.println("普通属性: a.num2 = " + a.num2); //实例对象也可以访问静态属性
a.m1(); //调用普通方法
a.m2(); //对象调用静态方法
}
}
class A{
int num1; //普通属性
static int num2; //静态属性
public void m1(){
System.out.println("普通的方法m1()");
}
public static void m2(){
System.out.println("静态方法m2()");
}
}