一、修饰成员变量
1、static修饰的成员变量叫类变量(静态变量)
2、非static修饰的成员变量叫实例变量(非静态变量)
public class Demo{
public static int age; //静态变量(类变量)
public String name; //非静态变量(实例变量)
}
区别:类变量可以通过类名 . 类变量名称访问,如果在类内部则可直接使用名称访问。当然,如果你new了一个该类的对象,也可以通过对象 . 类变量名称访问(但是不推荐这种方式,失去了static修饰的意义)。而实例变量则只能先new一个对象,然后通过对象 . 实例变量名称访问。
//类变量访问方式一:
Demo.age;
//类变量访问方式二:
Demo demo = new Demo();
demo.age;
//实例变量访问方式:
Demo demo = new Demo();
demo.name
二、修饰成员方法
1、static修饰的成员方法叫类方法(静态方法)
2、非static修饰的成员方法叫实例方法(非静态方法)
public class Demo{
public static void test1(){ //静态方法(类方法)
}
public void test2(){ //非静态方法(实例方法)
}
}
区别:同理类方法可以通过类名 . 类方法名称访问,如果在类内部则可直接使用方法名称访问。当然,如果你new了一个该类的对象,也可以通过对象 . 类方法名称访问(但是不推荐这种方式,失去了修饰的意义)。而实例方法则只能先new一个对象,然后通过对象 . 实例方法名称访问。
//类方法访问方式一:
Demo.test1();
//类方法访问方式二:
Demo demo = new Demo();
demo.test1();
//实例方法访问方式:
Demo demo = new Demo();
demo.test2();
三、注意事项
1、在一个类中,类方法可以访问类变量,但不能访问实例变量(否则报错)
2、在一个类中,实例方法既可以访问类变量,也可以访问实例变量
3、在一个类的类方法中不能出现this关键字,而实例方法可以
四、static其他应用
1、代码块
静态代码块:定义在类中,类加载(类只会加载一次)时自动执行,可用于完成类的初始化,如类变量的初始化赋值。
实例代码块:定义在类中,每次创建对象时执行,并且在构造器之前执行,和构造器一样可用于对象的初始化,如实例变量的初始化赋值(这个其实没什么用,因为实例变量是每个对象创建后独有的,而对象本就是有差异的)。
public class Demo{
public static String NAME;
public int age;
//静态代码块:static{操作内容}
static {
NAME = "布朗熊"; //初始化类变量
}
//非静态代码块(实例代码块):{操作内容}
{
age = 10; //初始话实例变量,可操作但无意义
// NAME = "可妮兔"; 错误代码
}
}
2、单例设计模式(不懂的朋友可以先了解一下代码,暂时不讲)
public class Demo{
//该程序static的作用:修饰的成员变量作为类变量,使其成为类的共享资源独有一份
private static final Demo demo = new Demo();
private Demo() {
}
public static Demo getObject(){
return demo;
}
}