1.一旦使用Static修饰成员方法,那么这就成为了静态方法.静态方法不属于对象为属于类.
2.如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它.
3.如果有了static关键字,那么不需要创建对象就能通过类名称来使用它.
静态方法与非静态方法的区别:
静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是不加static关键字的方法,在类定义时没有占用内存,非静态方法只有在类被实例化成对象时,对象调用该方法才被分配内存;
无论是成员变量,还是成员方法.如果有了static,都推荐使用类名成进行调用
静态变量:类名称.静态变量
静态方法:类名称.静态方法() / / 对于本类的静态方法,可以省略类名称
静态变量图非静态变量的区别:
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期
而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。
注意事项:
1.静态不能直接访问非静态.
原因:因为内存当中是先有静态内容,后有的非静态内容
2.静态方法当中不能用this
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象.
静态代码块的格式是:
public class 类名称{
static{
//静态代码块内容
}
}
特点:
当第一次用到本类时,静态代码块执行唯一的一次
静态内容总是优先于非静态,所以静态代码快比构造方法先执行.
静态代码块的典型用途:
用来一次性地对静态成员变量进行赋值.
静态方法是在编译的时候把静态方法和类的引用类型进行匹配,而不是在运行的时候 和类引用进行匹配。因此我们得出结论:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。