一 基本特征
静态(Static)的意义:即使没有创建对象,也能使用属性和调用方法
静态的内存是固定的,相对来说省资源;新建一个实例,就要新开辟一个内存,耗费资源
static内部只能出现static变量和其他static方法
二 静态变量
在类加载的时候就加载到方法区,而且在方法区会被赋予有默认值
静态变量是先于实例化对象出现的,在创建对象前就可以使用了,故习惯上用类名来调用
静态变量只能定义在类(就是最外层的{})中,不能定义在任何代码块中
非静态变量必须在实例化(new)之后才能分配内存,才可调用
三 静态方法
在类加载的时候就加载到方法区,但在方法区只存储不执行,当其被调用的时候到栈内存中执行
静态方法属于类所有,先于对象存在,类实例化前即可使用
静态方法可以直接调用同类中的静态成员,但不能直接调用非静态成员。非静态方法可以直接访问类中的任何成员
静态方法效率上要比实例化高。但缺点是不自动进行销毁,而实例化的则可以做销毁
静态方法可以通过【类名.方法名】直接调用。普通方法需要创建一个实例,也就是new一个对象,然后通过 【对象名.方法名】的方式来调用
静态方法中还不能使用this等关键字
因为this代表的是对象的引用,它引用的是类的当前实例。而静态方法(加载到jvm的方法区)中没有实例变量(加载到jvm的堆中)
变量 定义位置 初始化值 生命周期 作用范围 内存位置 静态变量
也称类变量
类中方法外以static关键字声明 有默认的初始化的值 第一次访问时创建,在程序结束时销毁 整个类中有效 静态存储区 实例变量
也称成员变量
类中方法外 有默认的初始化的值 对象的存在而存在,随着对象的消失而消失 整个类中有效 堆内存 局部变量 方法内 不赋值不能用 方法的调用而存在,方法调用完毕而消失 所在方法有用 栈内存
静态方法可以重载。可以被继承,但不可以被重写
重载(Overload)
如果同一个类中包含了两个或两个以上方法名相同、方法参数的个数、顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了。重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
四 静态类
静态类只能包含静态成员,否则会抛出编译错误;然而非静态类既可以包含非静态成员也可以包含静态成员