主页 > 互联网  > 

java中的static和单例模式


同一个类中,访问其类成员,可以省略类名不写

static:叫静态,可以修饰成员变量,成员方法。

成员变量按照有无static修饰,分为两种:

类变量:有static修饰,属于类;在计算机中只有一份,会被类的所有对象共享;

类名.类变量

实例变量(对象的变量):无static修饰,属于每个对象,每个对象都会一份;

实例变量只能通过对象访问

创建一个学生类:

public class student { static String name;//类变量 int age;//实例变量(对象变量) }

 进行操作:  

public class test1 { public static void main(String[] args) { //1:类变量的用法 //类名.类变量 student.name="hhh"; //对象名.类变量 student s1=new student(); s1.name="xxx"; student s2=new student(); s2.name="aaa"; 类变量在计算机中只有一份 System.out.println(s1.name);//aaa System.out.println(student.name);//aaa } }

类变量的应用场景: 在开发中,如果某个数据只需要一份,且希望能够被共享,则该数据可以定义类变量记住。

成员方法:

类方法:有static修饰的成员方法,属于类。

实例方法:无static修饰的成员方法,属于对象。

类方法的使用场景:

用来做工具类。

工具类就是一些类方法,每个方法都是用来完成一个功能的。

这是我写了一个生成任意数验证码的工具类:  

public class myutil { private myutil() { }//别人不能创建对象 public static String createCode(int n) { String tmp="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ1234567890"; String code=""; Random ra=new Random(); for (int i = 0; i < n; i++) { int index=ra.nextInt(tmp.length()); code+=tmp.charAt(index); } return code; } }

类方法不用生成对象占用内存。

static的注意事项:

1 类方法可以直接访问类成员(变量和方法),不可以直接访问实例成员;

2 实例方法可以直接访问类成员,也可以直接访问实例成员;

3 类方法中不可以出现this关键字,但是实例方法中可以出现this;

代码块:

静态代码块:

格式:static {}

特点:类加载会自动执行,由于类只会加载一次,所以静态代码块只会加载一次1;

作用:完成类的初始化,例如:对类变量的初始化赋值

使用: 定义了一个学生类:  

public class student { public static int number=10; static//静态代码块 { System.out.println("静态代码块执行"); } }

使用:  

public class test { public static void main(String[] args) { System.out.println(student.number); /*静态代码块执行 10*/ System.out.println(student.number); //10; } }

可以发现静态代码块只执行了一次

实例代码块: 格式:{}

特点:每次创建对象时,执行实例代码块,并在构造器前执行

作用:和构造器一样,都是用来完成对象的初始化的。例如:对实例对象进行初始化赋值

单例设计模式:

确保类只有以一个对象;

写法:

把类的构造器私有化定义一个类变量记住类的一个对象定义一个类方法,返回对象

创建一个类:

public class sin { //1:私有化无参构造器 private sin() { } //2:定义一个类变量记住类的一个对象 private static sin a=new sin(); //定义一个类方法,返回对象 public static sin getsin() { return a; } }

操作:  

public class test { public static void main(String[] args) { //只能通过sin.getsin获取对象,且此对象是static静态的,只有一份,所以是单例模式 //sin a=new sin()//error:'sin()' has private access //可见不能通过无参构造器创建对象 sin a1 = sin.getsin(); sin a2 = sin.getsin(); System.out.println(a1); System.out.println(a2); //结果: /*com.he.static3.sin@2f4d3709 com.he.static3.sin@2f4d3709*/ } }

上面这个单例设计模式叫饿汉式单例:返回对象时,对象已经创建好

懒汉式单例设计模式: 写法:

把类的构造器私有化定义一个类变量,用于存储对象提供一个类方法,保证返回的是同一个对象  public class lan { private lan(){ } //2定义一个类变量,先不初始化,用于存储对象。 private static lan b; //3提供一个类方法,保证返回的是同一个对象  public static lan getlan() { if(b==null) { b=new lan(); } return b; } }

标签:

java中的static和单例模式由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“java中的static和单例模式