static关键字:
1. 静态与实例的区别:
I. 实例属性是每个对象各自持有的独立空间(多份),对象单方面修改,不会影响其他对象。
II. 静态属性是整个类共同持有的共享空间(一份),任何对象修改,都会影响其他对象。
2. 静态的概念:
I. static可以修饰属性和方法,即为静态属性(类属性)、静态方法(类方法)
II. 静态成员是全类所有对象共享的,全类只有一份,不因创建多个对象而产生多份。
III. 不必创建对象,也可通过类名,直接访问静态成员。
IV. 经验:访问静态属性和方法时,可直接通过“类名.静态属性名”以及“类名.静态方法名”(推荐)
3. 静态的特点:
I. 静态方法允许直接访问静态成员。
II. 静态方法不能直接访问非静态成员。静态只访问静态
III. 静态方法中不允许使用this或super关键字。
IV. 静态方法可以继承,不能覆盖,没有多态。
/*
关于静态static的特点:
1)被static修饰的变量/方法 都随着类的加载而加载
class xxx{} ----> 通过javac 编译xxx.java文件 --->编译没有问题(Java语法校验)
---->产生xxx.class文件
java xxx类
2)被static修饰的 优先于对象存在
回想main :被静态修饰符: jvm调用它
public static void main(String[] args){
}
3)被static修饰的可以被多个对象共用
有共享,共用
举例:
班级的编号(同一个班级的都在共用编号)
水杯(不能被共用)
也在告诉我们,什么时候将变量定义静态变量!
4)被静态修饰的成员变量或者成员方法 ,
可以被类名直接访问(推荐访问方式)
类名.成员方法;
类名.成员方法();
但是,也可以用该类对象来访问该成员(不推荐的!)
*/
class Demo{
//成员变量
int num = 100 ;
//静态成员变量
static int num2 = 50 ;
//成员方法
public void show(){
System.out.println("show Demo") ;
}
//静态的成员方法
public static void method(){
System.out.println("method Demo") ;
}
}
//测试类
class StaticDemo{
public static void main(String[] args){
Demo d = new Demo() ;
//访问非静态的成员变量,成员方法
System.out.println(d.num) ;
d.show();
System.out.println("-------------") ;
//对象名来访问静态成员
System.out.println(d.num2) ;
d.method();
System.out.println("-------------") ;
//推荐方式:静态成员 直接使用类名访问(static静态的随着类的加载而加载)
System.out.println(Demo.num2) ;
Demo.method();
}
}