1、
Static修饰变量,方法,表示静态变量和静态方法,静态变量和方法属类,只要类被加载,它们就会被分配空间,对它们的使用可以通过类或对象来使用,
静态方法中不能使用this,super关键字,不能调用非静态方法,静态方法也不能访问非静态的变量
Static有个用途就是实现单例设计模式,单例模式的特点就是只能有一个实例,为了实现这个功能,只能隐藏构造函数,即把构造函数设为私有的,
并提供一个创建对象的方法,由于构造对象被设为私有的,,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,
要达到这样的目的只能把创建对象的方法声明为static,程序实例如下:
2、静态代码块:一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:
如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,
它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,
静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,
那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
3、静态导包:一般我们导入一个类都用 import com…..ClassName;而静态导入是这样:import static com…..ClassName.*;这里的多了个static,
还有就是类名ClassName后面多了个.* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,
就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。
好处:这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方
法print(…),在使用时直接print(…)就可以了。但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便
静态方法中不能使用this,super关键字,不能调用非静态方法,静态方法也不能访问非静态的变量
Static有个用途就是实现单例设计模式,单例模式的特点就是只能有一个实例,为了实现这个功能,只能隐藏构造函数,即把构造函数设为私有的,
并提供一个创建对象的方法,由于构造对象被设为私有的,,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,
要达到这样的目的只能把创建对象的方法声明为static,程序实例如下:
class Singleton{
private static Singleton instance=null;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
2、静态代码块:一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:
static
{
}
首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,
如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,
它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,
静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,
那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
3、静态导包:一般我们导入一个类都用 import com…..ClassName;而静态导入是这样:import static com…..ClassName.*;这里的多了个static,
还有就是类名ClassName后面多了个.* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,
就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。
好处:这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方
法print(…),在使用时直接print(…)就可以了。但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便