*用static声明属性
static 关键字用于声明属性时,该属性成为 静态属性(也叫公共属性,此属性为所有对象所共有),如果有些属性希望被所有对象共享,则必须将其声明为static 属性。
为什么在一旦使用了static关键字声明属性之后,则会为所有的对象共享?
可以从内存的使用 来理解,JAVA中常用的内存区域有以下几个:
*栈内存空间:保存所有的对象名称(实质上是保存了引用空间的堆内存空间地址)
*堆内存空间:保存每个对象的具体属性内容。
*全局数据区:保存static类型的属性。
*全局代码区:保存所有的方法定义。
static声明的属性保存在全局数据区中,所以可以为该类的所有成员所共享。
*用static声明方法
用static声明 的方法,也可以称为类方法,可以由类名称直接调用。如果定义了一个Person类,那么使用static 声明的方法,可以使用Person.方法名()来直接调用。
注意:
*非static的方法或属性可以调用static方法,但static方法 是不能调用 非static声明的属性或者方法的。
*static 的相关应用
我现在知道的相关应用只有两个,希望在以后学习更多的相关应用:
*使用static关键字,可以统计一个类到产生了多少个实例化对象。因为 只要有一个实例化对象产生,则一定会调用其中的构造方法,我们在构造方法将 一个使用static声明的属性进行自增,这样就能够计算书一个类到底有多少个实例化对象产生了。
例:
class Demo{
private static int count =0;
public Demo(){
count++;
System.out.println("产生了"+count+"个对象!");
}
public static void main(String[] args){
new Demo();
new Demo();
new Demo();
}
}
*static 在单态设计模式中的应用
设计模式就是前人经过在实际开发中的探索和研究,总结出来的一套行之有效的程序设计方法。通过借鉴这些有用的成功的设计模式,可以大大减少自己研究和思考的时间,并学习到前人思想的精髓和要点。
*单态设计模式:
单太设计模式就是:采取一定的方法在整个软件系统中,在某个类只能存在一个实例化对象,并且该类中只提供一个取得该对象实例的方法。如果要一个类在JVM中只产生一个实例化对象,那么就要使用 private 声明构造方法,使其不能在类的外部用 new 进行实例化。但在类内部 仍然可以产生该类的对象。
在此时,类的外部无法创建对象,也无法调用类内部的对象,所以需要一个静态的方法来返回这个创建好的对象。由于静态的方法只能访问静态的属性,所以该对象的属性也必须声明为static属性。
应用例子:
class Chinese{
static Chinese objRef = new Chinese(); //创建的对象声明为static,只会创建一次。
private static int count = 0;
String name;
int age;
private Chinese(){ //封装了构造方法,使得在类外部不能创建对象
System.out.println(++count);
}
public static Chinese getInstance(){ //利用静态方法返回一个对象
return objRef;
}
}
class TestChinese{
public static void main(String[] args){
Chinese obj1 = Chinese.getInstance();
Chinese obj2 = Chinese.getInstance();
System.out.println(obj1==obj2); //虽然类外部创建了2对象,但2个对象的引用地址
//完全相等,就是说他们其实是一个对象。
}
}
*理解main方法
在public static void main(String args){}
中 *public表示此方法为公共的,让编译器可以调用
*由于main方法是程序的起点,必须声明为静态方法,以便使用类名直接调用
*void 表示此方法没有返回值
*main是主方法的名字,没有为什么,就是要那么写,就是JAVA给主方法取名为main。
*(String[] args)就是主方法接收的参数列表 为String类型,参数之间用空格间隔。