static

如果使用一个类分别开辟栈内存及堆内存,在堆内存中要保存对象的属性,每个对象有自己的属性,如果现在有些属性希望被虽有对象恭喜,则就必须将其声明为static属性。如果一个类中的方法想由类调用,则可以声明static方法。

1.使用static声明属性。

  如果在程序中用static声明属性,则此属性成为全局属性(有些也成为静态属性),那么声明成全局属性到底有什么用呢?先看代码:

package test3;

class Person {

	String name;				
	int age;
static	String country = "A城";

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void info() {
		System.out.println("姓名:" + this.name + ",年龄:" + this.age + ",城市:"
				+ country);
	}
}

public class StaticDemo01 {

	public static void main(String args[]) {
		Person p1 = new Person("张三", 30);
		Person p2 = new Person("李四", 40);
		Person p3 = new Person("王五", 50);
		p1.info();
		p2.country="B城";
		p2.info();
		p3.info();
	}

}

  结果:

姓名:张三,年龄:30,城市:A城
姓名:李四,年龄:40,城市:B城
姓名:王五,年龄:50,城市:B城

***************************************************************************************

JAVA中常见的内存区域。

在java中主要存在4块内存空间,这些内存空间的名称及作用如下。

1.栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)。

2.对内存空间“保存每个对象的具体属性内容。

2.全局数据区:保存static类型的属性。

4.全局代码区:保存所有的方法定义。

****************************************************************************************

【类属性调用】

类名称.static 属性

 

如:

Person.country="B城";  //适用男类名称修改static属性内容

 

2.使用static声明方法

例子:

package test4;


import test4.Person;

class Person {

	private String name;				
	private int age;
	private static	String country = "A城";
	public static void setCountry(String c){//定义static方法
		country = c;
	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void info() {
		System.out.println("姓名:" + this.name + ",年龄:" + this.age + ",城市:"
				+ country);
	}
	public static String getCountry() {
		return country;
	}
}

public class StaticDemo04 {

	public static void main(String args[]) {
		Person p1 = new Person("张三", 30);
		Person p2 = new Person("李四", 40);
		Person p3 = new Person("王五", 50);
		p1.info();
		p2.setCountry("B城");      //调用封装后的类的属性,必须要用setter()方法,
		p2.info();
		p3.info();
	}

}

  结果:

  

姓名:张三,年龄:30,城市:A城
姓名:李四,年龄:40,城市:B城
姓名:王五,年龄:50,城市:B城

3.static的相关应用:

 从上面例子可知道static属性是所有对象共享的,那么就可以使用static属性统计一个类到底产生了多少个实例化对象。

实例:

package test5;

import test5.Demo;

class Demo {
	private String name; // 保存名字
	private static int count = 0; // 所有对象共享此属性

	public Demo() {
		count++; // 只要有对象产生就应该自增
		this.name = "DEMO-" + count;// 自动进行便名操作
	}

	public Demo(String name) { // 直接定义名字
		this.name = name;
	}

	public String getName() {
		return this.name;
	}
}

public class StaticDemo07 {
	public static void main(String args[]) {
		System.out.println(new Demo().getName());
		System.out.println(new Demo("LXH").getName());
		System.out.println(new Demo().getName());
		System.out.println(new Demo("MLDN").getName());
		System.out.println(new Demo().getName());
	}
}

  结果:

DEMO-1
LXH
DEMO-2
MLDN
DEMO-3

 

 

posted on 2011-12-02 09:36  wangbokun  阅读(219)  评论(0编辑  收藏  举报

导航