1.static关键字主要有2个作用:
①为某特定的数据类型或者对象分配单一的存储空间,而与创建对象的个数无关。
②在不创建对象的情况下可以直接通过类名来直接调用方法或者使用类的属性。
2.static主要有4种使用情况:成员变量(属性),成员方法,代码块,和内部类
3.Java中没有全局变量的概念,但是可以通过static来实现全局变量的效果。
Java中提供了2种类型的变量:①用static修饰的静态变量②实例变量
他们的区别是静态变量时属于类的,只要静态变量所在的类被加载,就会被分配空间,因此就而已被使用可以通过类.静态变量或者对象.静态变量来引用
实例变量属于对象,必须要先new出对象,然后通过对象.实例变量来引用,只有对象呗创建才会给他分配空间
★特别重要的是static变量只有一个,被类拥有,所有对象都共享这个static变量并且static变量不能定义在方法中!!!!!
4.static成员方法,与变量类似,static方法属于类的方法,不用创建对象就可以使用用过类名.static方法调用,在static方法中不能访问非static的方法和变量,不能出现this或者super关键字。
static很重要的一个应用就是实现单例模式。单例模式的特点就是只能有一个实例。
public class Singleton { private static Singleton instance=null;//声明一个静态的类变量 private Singleton(){};//构造方法私有化,外部不能通过new生成对象实例 public static Singleton getInstance(){//全局访问点,提供生成类的实例的方法 if(instance==null){ instance=new Singleton(); } return instance; } }
注意这里面的方法为什么是static,假设我们不用static关键字,则在外部我们需要去调用getInstance()方法来创建实例,那么就要先new对象,在通过对象.方法名来获取,但是我们的目的就是不能通过new生成多个对象,所以我们就需要加上static关键字,来完成,直接通过Singleton.getInstance()创建这个类的唯一实例。
5.static修饰代码块
static代码块独立于成员变量和方法,他不在任何一个方法体中,JVM在加载类的时候会执行代码块,如果有多个代码块则按顺序执行,static代码块通常用来初始化static变量,需要注意的是,static代码块只会被执行一次!!!
6.static内部类
static内部类是指被修饰为static的内部类,他不依赖于外部类实例对象而被实例化,通常的内部类需要外部类实例化才能实例化。static内部类不能与外部内重名,切且不能访问外部类的成员变量,只能访问外部类的static成员变量和static方法包括private类型。
7.问题?
1.什么是实例变量?什么是局部量?什么是类变量?什么是final变量?
2.static final结合表示什么意思?