课时42|封装--static关键字、设计模式之单例模式
2016-09-02 17:06
232 查看
Static修饰过的成员变量和成员方法叫做类变量(静态变量)类方法(静态方法)。
我们需要一种特殊的变量
我们在操作一个变量和方法时,一般会先引用某个类的对象,然后通过【对象名.属性名】,或者【对象名.方法名】进行操作。但是,如果只想为某一特定变量或方法分配一块空间,使其不需要通过构建对象就能调用,这时候就要使用Static关键字。
从使用变量的目的上就能看出,Static变量,是变量声明之时,就会在内存里开辟出空间的一种变量。而普通变量呢?在声明的时候就存在吗?No!比如我们在一个类里面声明了两个变量,一个方法;
class Teacher{ String name; int age; public teaching(); }
它们都是非Static的,所以,在加载类的时候,内存还未对这些变量开辟空间,直到我们new一个对象:
Teacher t1=new Teacher(); Teacher t2=new Teacher();
一个new指令对应一份存储空间。这里的t1和t2各有自己的空间。
对比上面的普通变量,我们再来看静态变量:
class StaticTest{ static int i=47; }
i现在是一个静态变量,在加载类StaticTest的时候,它也已经有了自己的内存空间。
StaticTest st1=new StaticTest(); StaticTest st2=new StaticTest();
因为i是静态变量,所以st1.i和st2.i实际上是同一块内存,对i的操作会同时改变st1和st2的属性。
因为i不再独立的属于一个个对象,它是和类绑定的,所以作为类变量,调用方式推荐:【类名.变量名】的方式。
静态变量的特点
Static关键字的特点:1. 一旦用Static修饰后,变量和方法不用通过对象名调用。因为Static修饰的属性和方法属于多个对象共享的数据。调用方法:【类名】.【属性名】和【类名】.【方法名】;
2.当加载类的时候,静态变量即被加载,优先于对象存在;
3.可以修饰语句块,优先于构造方法存在,用来初始化静态变量。
Static关键字注意事项(静态成员优先于对象存在):
1. 静态方法中只能访问外部的静态成员。
2.静态方法中不能出现this关键字。
单例模式
单例模式(某一个类只有一个实例):1.只有一个对象;
2.必须自行创建这个对象;
3.必须自此自行提供对外接口。
非静态方法可以访问静态变量,因为静态变量产生于非静态方法之前
一个类可以构造多个对象。每个对象都有各自独立的属性。对象A的属性发生变化后,对象B的属性不会随之变化。除非对象A和对象B的属性是一个静态变量
既然可以通过访问类名调用static变量,为什么还要new对象。
1.经常使用static关键字破坏了面向对象语言的封装性
2.属于某个对象的属性,在对象使用结束后就被释放,不会长期占用内存。
3.只有类里面没有任何属性或只有静态属性,此时才可以使用静态方法(这种方法一般为其他对象服务,自己没有属性)。比如arrays类。
public class singleInstance{ public static void main(String []args){ //static getInstance can be only called once theInstance sin1=theInstance.getInstance(); theInstance sin2=theInstance.getInstance(); } } class theInstance{ //3.The action 'new' can only be used in this class //private static theInstance ins1=new theInstance(); '''只有一个对象''' private static theInstance ins1=null; //1.constructor method //2.private:should not be called by outside private theInstance(){ System.out.println("**********"); } //The interface for outside calling use '''必须自行创建这个对象''' '''.必须自此自行提供对外接口''' public static theInstance getInstance(){ if(ins1==null){ ins1=new theInstance(); } return ins1; } }
更多单例模式参考:http://blog.csdn.net/jason0539/article/details/23297037/
相关文章推荐
- 【06】面对对象2_static关键字,单例设计模式
- 黑马程序员_面向对象一(封装,构造函数,this,static,单例设计模式)
- java基础之equal()方法、static关键字、单例设计模式
- 黑马程序员——static关键字 与简单的单态设计模式
- 黑马程序员_学习笔记:3) 面向对象1:概述、封装、this、static、单例设计模式
- JAVA main方法详解、单例设计模式、继承、关键字(static、extends、super、instanceof、final)
- 关于java中static关键字在单态设计模式的应用学习和总结
- 黑马程序员面试题面向对象一(封装,构造函数,this,static,单例设计模式,继承)
- 黑马程序员——Java基础:static关键字、单例设计模式
- 黑马程序员_面向对象1_(封装、构造函数、this、static、单例设计模式)
- 方法的重载与重写的关系(区别);static关键字;单例设计模式;继承;
- 黑马程序员 Java基础 面向对象:static关键字 main函数 单例设计模式
- 黑马程序员-JAVASE入门( 面向对象、单例设计模式、this、static关键字)
- Java学习日记(三)面向对象、类、封装、构造函数、this、static、静态代码块、单例设计模式
- Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)
- 嘿,程序员——面向对象特征一:封装,以及this、static关键字和单例模式
- Java_static 关键字, 单例设计模式
- Java基础(面向对象二——static关键字、主函数定义和单例设计模式)
- 关于static静态的、继承、接口interface、final关键字、单例设计模式总结
- 黑马程序员——学习日志5面向对象(static关键字,单例设计模式,抽象类,接口)