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