java面向对象基础static

static 属性  可以由类名直接调用。

static 定义之后,可以理解为全局变量。

例如:

class Preson{
	static String name = "AAAAA";
	public void info() {
		System.out.println(this.name);
	}
}
public class static01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		////////////修改前//////////////////////////////
		
		Preson preson01 = new Preson();
		Preson preson02 = new Preson();
		Preson preson03 = new Preson();
		preson01.info();
		preson02.info();
		preson03.info();
		preson03.name = "BBBBBBB";
		/////////////////修改后//////////////////////
		preson01.info();
		preson02.info();
		preson03.info();
	}

}

  输出:

  

AAAAA
AAAAA
AAAAA
BBBBBBB
BBBBBBB
BBBBBBB

多个实例化,只修改其中一个,其余所有的都被修改了,说明此属性是所有对象所共享的。

每个对象都拥有各自的堆栈空间,堆栈控件保存各自对象的属性,但是static 声明之后,是保存在全局数据区之中了,上面的对象都指向了全局数据区的同一个内容,所以一个修改了之后,所有对象的内容都变化。最好用,”类名称.属性“ 的形式调用。不要用 实例化的对象直接修改。

static 也可以用来声明方法,声明之后 可以由 《类名称.方法》 的方式直接调用,但是注意:

  注意:

    使用static 方法  不能调用非 static 的属性或方法。因为非static 的属性或方法只有实例化之后才会产生,而static 属性或方法,可以不实例化直接调用。

static 相关应用:

  1、可以用来统计一个类产生了多少个对象,因为在对象实例化的时候,都会有个构造方法。

class static应用类{
	static int number = 0;
	public static应用类() {
		number++;
	}
}
public class static应用 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new static应用类();
		new static应用类();
		new static应用类();
		System.out.println(static应用类.number);//输出3
           } }

  

JAVA 中有4个内存区域:

  栈内存:可以保存对象的名称(保存访问堆内存的地址)

  堆内存:保存每个对象的具体属性。

  全局数据区:保存static 类型的属性。(共同有用的)

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

  

猜你喜欢

转载自www.cnblogs.com/MYDoraemon/p/8948593.html