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;
}
}+
网友评论