美文网首页
static关键字

static关键字

作者: yangliangliang | 来源:发表于2017-06-15 16:01 被阅读28次

    static关键字:

    1.static修饰的变量叫做“静态变量”.

    2.static修饰的方法叫做“静态方法”.

    3.static还可以定义静态语句块.

    以下例子演示:static定义静态语句块

    static定义的静态语句块在类加载阶段执行,并且只执行一次,并且是自上而下的顺序执行。(main方法执行之前,static就已经执行。从上而下的执行,先执行static 后执行main)

    public class StaticTest01{

    //静态语句块

    static{

    System.out.println("1");

    }

    static{

    System.out.println("2");

    }

    static{

    System.out.println("3");

    //入口

    public static void main(String[] args){

    System.out.println("main execute!  1");

    System.out.println("main execute!  2");

    }

    }

    第二节

    一般情况下工具类中的方法大部分都是静态方法。

    静态方法不用创建对象也能直接访问该方法。

    */

    public class StaticTest03{

    //成员方法

    //成员方法必须使用“引用.”调用

    public void m1(){

    }

    //静态方法

    //可以使用“类名.”方式调用.也可以用“引用.”,即使用的是“引用.”,底层还是用的“类名.”  ,静态方法中不能直接访问非静态数据.  //静态方法中不能使用this、非静态数据包括非静态方法和成员变量!

    public static void m2(){

    System.out.println("m2....");

    }

    //入口

    public static void main(String[] args){

    StaticTest03 st = new StaticTest03();

    st.m1();

    m2();

    //静态的方法按照正规的方式访问:“类名.”  //静态的方法也能用“引用.”访问  st.m2(); //编译阶段检查出st是StaticTest03类型,编译通过,运行的时候,仍然使用 "StaticTest03."的方式访问。//该方法执行不需要对象。//空的引用去访问成员的时候会出现空指针异常。//m2方法不是“成员”而是静态的。//所以即使引用是空的,也不会报空指针异常。(其实也就是说,m2 方法执行底层是 不需要这个对象的。)(重要)

    StaticTest03 s = null;

    s.m2();

    }

    }

    第三节

    变量分类:

    1.局部变量

    2.成员变量(实例变量,非静态变量)

    3.静态变量(方法区)

    什么时候变量声明成静态变量?(所有的java对象都有这个属性,并且这个属性对应的值都是一样的。没必要让每个对象都保留一份,我们声明成静态变量,在方法区块只有一个,所有的对象公用一个,目的在节省内存)静态变量在类加载时初始化,而且只执行一次。

    如果这个属性所有的对象都有,并且这个属性的值是相同的,则该属性声明成

    静态的属性。

    成员变量:成员变量在创建对象的时候初始化,并且存储在堆中的每一个对象中。

    静态变量:在类加载阶段赋值,并且只赋值一次。

    //静态变量,被存储在方法区.

    //所有的java对象共享这一份。没必要在堆中创建去浪费空间。

    //所以静态变量是类级别的,使用“类名.”的方式访问.

    第四节 单例模式

    单例模式是23种设计模式中最简单的一种设计模式。

    为了解决什么问题?为了保证JVM(虚拟机)中某一个类型的java对象永远只有一个。为了节省内存的开销。(这就是优点)(我们知道对象创建完成户,会放到堆中,如果堆中的实例过多,将会存在特别多的垃圾,这样会导致一些问题,比如内存溢出 ,使用单例模式,只会创建一个实例,显著减少了对象实例的个数,同时也提高了性能,因为不会频繁的创建对象,这只是它的一个好处。)

    //==两边如果是基本数据类型,可以比较这两个基本数据类型是否相等。

    //==两边如果是引用数据类型,则比较的是内存地址。

    实现单例模式

    什么是设计模式:设计模式是可以重复利用的解决方案。

    单例模式要领:

    1.构造方法私有化

    2.对外提供一个公开的静态的获取当前类型对象的方法.

    3.提供一个当前类型的静态变量。

    单例模式分为两种:

    饿汉式单例:在类加载阶段就创建了对象。

    懒汉式单例:用到对象的时候才会创建对象。

    public class Singleton{ //懒汉式单例

    //静态变量

    private static Singleton s;

    //将构造方法私有化

    private Singleton(){}

    //对外提供一个公开获取Singleton对象的方法.

    public static Singleton getInstance(){

    if(s==null){

    s = new Singleton();

    }

    return s;

    }

    }

    /*

    饿汉式单例模式

    */

    public class Customer{

    //类加载时只执行一次。

    private static Customer c = new Customer();

    //构造方法私有化

    private Customer(){}

    //提供公开的方法

    public static Customer getInstance(){

    return c;

    }

    }+

    相关文章

      网友评论

          本文标题:static关键字

          本文链接:https://www.haomeiwen.com/subject/vhhpattx.html