---------------------- android培训、java培训、期待与您交流! ----------------------
静态代码块(注意和构造代码块比较)
格式:
Static
{
执行语句;
}
Eg:
class StaticCode
{
static
{
System.out.println("a");
}
}
静态代码块的特点:
随着类的加载而执行,只执行一次。并优先于主函数。
用于给类进行初始化。
class StaticCodeDemo
{
static
{
System.out.println("b");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();
System.out.println("Hello World!");
}
static
{
System.out.println("c");
}
}
class StaticCode
{
static
{
System.out.println("a");
}
}
结果:
b
c
a
Hello World!
分析结果:
(1)静态代码块随着类的加载而执行,只执行一次,并优先于主函数。所以输出b和c。
(2)执行main函数:
(3)调用StaticCode();
(4)内存加载 StaticCode类,执行 System.out.println("a");输出a。
(5)因为静态代码块随着类的加载而执行,只执行一次,所以,第二个
new StaticCode();没用了,不执行。没有结果,
(6)System.out.println("Hello World!");输出Hello World!
对象的初始化过程
Eg:Person p=new Person(“zhangsan”,30);
(1)因为new用到了Person.class文件。所以会先找到Person.class文件并加载到内存中。
(2)如果该类中有static代码块,就执行该类中的static代码块,给Person.class类进性初始化。
(3)在堆内存中开辟内存空间,分配内存地址。
(4)在堆内存中建立对象的特有属性。并进行默认初始化。
(5)对属性进行显示初始化。
(6)对对象进行构造代码块初始化。
(7)对对象进行相应的构造函数初始化。
(8)将内存地址赋给栈内存中的p变量。
对象调用成员过程:
Java中有23种设计模式。
单例设计模式:解决一个类在内存中存在一个对象。
想要保证对象唯一:
(1)为了避免其他程序过多建立该类对象,应先禁止其他程序建立该类对象。
(2)还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
(3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
代码实现:
(1)将构造函数私有化
(2)在类中创建一个本类对象
(3)提供一个方法可以获取到该对象。
使用:
对事物该怎么描述还怎么描述。
当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
class Single
{
private int num;
public void setNum(int num)
{
this.num=num;
}
public int getNum()
{
return num;
}
(4) private Single(){}//将构造函数私有化
(5) private static Single s=new Single();//在类中创建一个本类对象
public static Single getInstance()//提供一个方法可以获取到该对象
{
return s;
}
}
class SingleDemo2
{
public static void main(String[] args)
{
Single s1=Single.getInstance();
Single s2=Single.getInstance();
s1.setNum(25);
System.out.println(s2.getNum());
}
}
结果:
25
“三步走”有2中方式:
/*“三步走”的法一:饿汉式
先初始化
Single类一进入内存,就已经创建好了对象。
class Single
{
private static Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
*/
/*
法二:懒汉式:对象是方法被调用时,才初始化,
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if (s==null)
{
s=new Single();
}
return s;
}
}
*/
---------------------- android培训、java培训、期待与您交流! ----------------------