static

public class Test {
    public static void main(String[] args){
        //static 关键字
        Person per1 = new Person();
        per1.name = "Rose";
        per1.age = 18;
        Person per2 = new Person();
        per2.name = "Jack";
        per2.age = 19;
        per1.getPersonInfo();
        per2.getPersonInfo();
    }
}
class Person{
        String country = "中国";
        String name;
        int age;
        public void getPersonInfo(){
        System.out.println("姓名:" + name + ",年龄" + age + this.country);
    }
}

对该实例的内存进行分析:

static
传统属性所具备的特征:保存在堆内存中,且每个对象独享属性
描述共享属性,只需要在属性前面加上static
static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可访问
将上述代码进行(static String country = “美国”)修改后的内存分析图如下:
static
关于static方法有以下两点说明:
1:所有的static方法不允许调用非static定义的属性或方法
2:所有的非static方法允许访问static方法或属性
使用static定义方法只有一个目的:某些方法不希望受到对象的控制,即可以在没有实例化对象的时候执行

public class Test {
    public static void main(String[] args){
        Person.setCountry("美国");
        new Person("Susan",18).getPersonInfo();
    }
}
class Person{
        private static String country;
        private String name;
        private int age;
        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
        public static void setCountry(String c){
            country = c;//不用加上this
        }
        public void getPersonInfo(){
        System.out.println("姓名:" + name + ",年龄:" + age +" "+ this.country);
    }
}