static
用于修饰成员变量,只在内存中存储一份,可被共享访问和修改。
在类中定义:
访问:
内存原理:
static方法与类,main方法一起加载到方法区;
遇到static方法的调用时,直接到方法区中调(实例方法是通过构建对象调用);
注意事项:
(1)静态方法中不可出现this(this用于指向当前所在对象,静态方法可能未通过对象调用)
(2)静态方法只能访问静态成员,实例方法都可以访问
static应用知识
工具类:里面都是静态方法,由开发人员共同使用(直接调用);
使用时无需创建对象(为防止创建对象,应将构造器私有:private 类名() {})。
代码块(类中一大成分):
(1)静态代码块:static {}
需要通过static关键字修饰,随着类的加载而加载,自动触发,只执行一次
(2)动态代码块:{}
每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并在构造器执行前执行
单例模式(一个类只能对外产生一个对象):
饿汉模式(在用类获取对象时,对象已经提取建立好了):
(1)定义一个类,把构造函数私有
(2)定义一个静态变量存储一个对象
package wryyyyy;
/*
饿汉模式
*/
public class SingleInstance
{
public static SingleInstance instance = new SingleInstance();
/*
* public 让这个对象能够被访问到
* static 这个对象只需要一个
* 对象类型为对象本身
* */
private SingleInstance() {};//将构造器私有化,防止创建对象
}
package wryyyyy;
public class test
{
public static void main(String[] args)//main方法
{
SingleInstance s1=SingleInstance.instance;//静态成员变量可以直接用类名.访问
SingleInstance s2=SingleInstance.instance;//再得到一个对象
/*
验证这个类对外是一个单例类,只需看两个变量拿的是不是同一块地址
*/
System.out.println(s1==s2);//输出为true
}
}
懒汉模式(真正需要该对象时,才去创建):
(1)定义一个类,把构造函数私有
(2)定义一个静态变量存储一个对象
package wryyyyy;
/*
懒汉模式
*/
public class SingleInstance
{
private static SingleInstance instance ;//不能把单列类对象new出来,要等到真正需要对象时才创建
//为防止用类名.instance拿到一个为null的对象,应将其定义为私有
/*
* public 让这个对象能够被访问到
* static 这个对象只需要一个
* 对象类型为对象本身
* */
public static SingleInstance getInstance()
{
//不能直接构建一个对象返回,这样每调用一次这个方法都会产生一个新对象
//如果没有这个对象才去创建
if (instance==null)
{
instance=new SingleInstance();
}
return instance;
}
/*
提供一个方法,对外返回单例对象
*/
/*
* 声明为static,因为要通过类名访问
* 返回类型为这个类
* */
private SingleInstance() {};//将构造器私有化,防止创建对象
}
package wryyyyy;
public class test
{
public static void main(String[] args)//main方法
{
SingleInstance s1=SingleInstance.getInstance();//静态成员变量可以直接用类名.访问
SingleInstance s2=SingleInstance.getInstance();//再得到一个对象
//第一次调的时候创建对象,第二次不调,直接返回
System.out.println(s1);
System.out.println(s2);
}
}