导读
第一:static关键字的概念与本质分析
第二:代码块与其内存分布
第三:单例模式的本质
第四:对象数组的定义与应用
一、static关键字
①、修饰属性:编程类属性,被关键字定义的字段。由JVM加载的时候就已经把这些属性加载到ClassLoader中,也就是说同时就分配了内存空间了,能够直接使用。
如:
class Applet
{
static int count = 10; // 被static关键字修饰的变量:count
}
使用:
System.out.println("第一次count修改后:" + (Applet.count+=1)); // 此时count的值变:11
System.out.println("第二次count修改后:" + (Applet.count-=3));// 此时是在count原有的(11)基础上减去3,等于 8
System.out.println("第三次count修改后:" + (Applet.count +=5));// 从8加上5,等于13了
看出什么了吗?—— 对,您们都很聪明,count的值不断在变化。说明一个问题,就是说被static修饰的属性是一个数据共享区域。每次修改都是修改同一个变量而 已,现在这个问题就已经解释清楚了。
②、方法修饰:其实这个我们可以理解为一段可以被重复调用的代码块,但它是属于类级别的。方法栈一旦执行完毕,那么里面的数据将被全部销毁。还有一个就是说,静 态方法中不能直接调用非静态属性。
代码如下——
class Executer
{
public static void request()
{
System.out.println("=== request connection factory ===");
}
}
③、代码块
|- 静态代码块:说白了,代码块其实就是一个有限区域的空间。也就是在一对花括号的范围内,变量一旦除了这个大括号,那么它的有效性就没有了。
如
// 在所有的Java元素中,是第一个被执行的:也是唯一执行一次的代码块!!!
static
{
// 我在这里定义的变量
int number =100;
System.out.println("number is : " + number);
}
System.out.println("number is : " + number); // 这里是访问不到的,因为number已经除了大括号范围了。
// 非静态代码块——
{
boolean flag = false;
System.out.println("boolean状态值:" + false);
}
④、设计模式之:单例模式
目的:在程序的运行过程中,单例类只返回唯一的一份对象。
分析:如何设计唯一的一个对象呢,首先我是这样考虑的,构造器是肯定不能在外部new新的对象的,因为是单例嘛。其次可以在内部就可以马上获取到这个对象。
设计:然后编写一个即使在外部都能够调用生成唯一的一个对象。
public class MySingleton
{
private static MySingleton instance = new MySingleton(); // 创建了一个instance对象
private MySingleton()
{
super();
}
public static MySingleton getInstance()
{
return MySingleton.instance;
}
}
⑤、对象数组
class Student
{
private String name;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
/** 创建一个学生类数组,里面可以存放三个对象 **/
Student[] students = new Student[3]; // 这个就是对象数组,里面可以存放三个Student学生对象——
这样可以有效地管理每一个Student对象,但有一个限定,数组一旦定义,其容量就已经被确定了。