---------------------android培训、java培训、java学习型技术博客、期待与您交流! -------------------
static可以用来修饰变量、方法和代码块,变量在前一天的总结中已经写了,这里说下static方法、代码块和单态设计模式。
1、static方法也称为静态方法
作用:使该方法独立于类的示例,使用类去访问,而不是类示例,所以也叫类方法。
具有如下特点:
a、只能访问其它的静态成员,不能访问非静态的成员。
b、静态方法没有this关键字。
c、静态方法不能被覆盖(重写)非静态方法。
如下面的例子所示:
public class Demo {
public static void main(String[] args){
Static s = new Static();
s.speak();
}
}
class Static {
String name = "jack";
static int age = 20;
public static void speak(){
System.out.println(age);
System.out.println(name);//编译出错,无法从静态上下文引用非静态,因为这里有访问到了成员变量中的非静态属性
}
}
从上面这个例子可以看出,静态方法无法访问非静态成员,在编程时,需要注意此类事项。
2、静态代码块
静态代码块优先于构造函数和主函数运行,随着类的加载而加载,只运行一次。
public class Demo {
static{
System.out.println("这是第一个静态代码块");
}
public static void main(String[] args){
System.out.println("这是主函数");
Static s = new Static();
}
}
class Static {
static{
System.out.println("这是一个静态代码块");
}
Static(){
System.out.println("这是一个构造函数");
}
}
上面这段代码输出的结果为:
这是第一个静态代码块
这是主函数
这是一个构造代码块
这是一个构造函数
从结果可以看到,静态代码块优先于主函数执行,执行完之后再执行主函数,创建对象之后,也是先执行静态代码块之后,才执行的构造函数。
3、单态设计模式
有三种方法,分别如下:
a、饿汉式
class Single {
private Single(){} //私有构造函数
private static Single s = new Single(); //建立本类对象
public static Single getInstance(){ //提供公共访问方式
return s;
}
}
b、懒汉式(延迟单例加载模式)
class Single {
private Single(){} //私有化构造函数
private static Single s = null; //建立本类对象引用,但是没有创建对象
public static Single getInstance(){ //提供公共访问方式
if ( s == null){ //进行判断
s = new Single(); //创建对象,并指向s
}
return s; //返回值
}
}
}
这种方法,只有在调用时,才会创建对象,节省内存空间。
前面那种在开发过程中用的较多,第二种方式,用的较少,只会在面试过程中出现,因为有其不足之处,特别是在多线程中。