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 String country = “美国”)修改后的内存分析图如下:
关于static方法有以下几点说明:
1:所有的static方法不允许调用非static定义的属性或方法
2:所有的非static方法允许访问static方法或属性
3:使用static定义方法只有一个目的:某些方法不希望受到对象的控制,即可以在没有实例化对象的时候执行,简单概括就是八个字:共享属性、工具方法。所以能够得出两个结论:
1、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);
}
}
2、既然是共享属性,static就不能修饰局部变量了,主方法和普通方法中都不能用static来修饰变量。
public class Test {
static int i;
public static void main(String[] args) {
System.out.println(i);
}
}
输出结果为0
public class Test {
public static void main(String[] args) {
static int i;
System.out.println(i);
}
}
编译不通过