static关键字

2017-06-15  本文已影响28人  yangliangliang

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;

}

}+

上一篇下一篇

猜你喜欢

热点阅读