1、静态成员
1)、 每一个类都有一个static池,池中统一存放该类的static变量,为所有对象共享,static变量在类装载之前就被初始化了(即:第一个对象被调用使用之前初始化一次)。
2)、为什么静态方法中不可以访问非静态成员(变量或者是方法)
是因为静态方法拿类名就可以直接调用,这是根本就没有类实例,所以无法访问非静态成员(需要通过类实例才可以调用)。
static的基本规则
1)、一个类的静态方法只能访问静态属性
2)、一个类的静态方法不可以直接访问非静态方法
3)、如访问权限允许,static属性和方法可以使用“对象名.”调用,当前页可以使用“实例.”调用。
4)、静态中不存在当前对象昂视,不能使用this,也不能使用super。
5)、构造方法不允许声明为static的
6)、静态方法不可以被非静态方法覆盖:因为静态方法可以通过类的实例调用,如果静态方法被非静态方法覆盖,就会分不清究竟调用的是静态方法还是非静态方法。
同一个类:
1)、对于静态方法,其它的静态或非静态方法都可以调用它
2)、对于非静态方法,其它非静态方法是可以直接调用它的,而其它静态的方法只有通过对象才可以调用它。
3)、静态方法不可以被非静态方法覆盖
不同类:无论是调用非静态还是静态,如果被调用其方法为:
静态方法:通过类名和对象都可以调用(单是通过对象的方式不建议使用,因为非静态也可以通过对象调用到时候怕弄混)。
非静态方法:只有通过类名才可以调用。
2、静态初始器--静态块
静态初始器:是一个存在于内中方法之外的静态块。静态初始器仅仅在类加载(第一次使用该类)的时候执行一次。
功能:通常用来初始化静态类的属性
通常在进行数据的连接的时候就会需要使用静态块。先进行连接,并且只需要连接一次。
{System.out.println("A成员。。。。。。");}//实例块
static{System.out.println("A静态块");}//静态块
3、静态的导入
1)、当我们要获取一个随机数的时候,写法为:
double ran=Math.random();
2)、当使用静态导入之后
import static java.lang.Math.random;
可写为:
double ran2=random();
当需要使用到Math白的大量函数的时候可以将静态导入写成如下形式:
import static java.lang.Math.*;
注意: 静态导入不建议过多使用,因为这样容易和自定义函数弄混。
4、静态与非静态方法的覆盖
静态方法不能被非静态覆盖,反之也不行
覆盖方法:前(权限)不能小,后(非运行时)不能大。
5、静态方法与非静态的访问
静态方法不存在this.和super
静态方法不可访问非静态(类模板不能访问由其他类生成的类对象)但非静态可以访问静态。