静态所属:
属于类级别的,不需要创建对象就可以直接使用,与对象是否创建无关。
静态的内存:
静态static变量/方法在类加载的过程中被初始化,在内存中只存在一份,所以可以把它当作是全局变量/方法。
静态的调用:
类名.静态属性/方法;(推荐使用)
对象名.静态属性/方法。
应用场景:
静态方法适合入口方法的定义;如单例模式,因为从外部拿不到构造函数,所有定义一个静态的方法获取对象非常有必要。
使用静态时的注意事项:
静态方法不能调用非静态的方法和变量(非静态方法可以调用静态方法/变量);
在静态方法中不能同时使用this和super关键字(属于类级别,没有创建对象不可以用this/super);
(1)、this是对当前对象的引用,super是指父类对象的引用,而当类加载时,先静态,后非静态。
(2)、如果静态方法中有this和super关键字,那么当静态方法被加载到内存中,this和super也被加载到内存中,但是对象还没创建,this和super还没被初始化,所以加载时会报错。
静态数据是类的所有对象共享(公有的)的数据,不因为对象的不同而不同;如果使用一个对象修改了静态数据,其他对象中的这个数据也会被改变;
静态方法或者静态代码块中不能使用非静态数据和this
(1)、java保证了对象在使用其成员属性时,其属性都被初始化过;
(2)、但是加载类时,首先初始化静态数据,所以非静态数据还没被初始化;
(3)、对象也没被初始化,this代表当前类对象,由于对象没被初始化,所以不能使用;
静态变量与对象无关,生成静态变量时 对象还没有被创建。