一、static关键字的介绍
关于static关键字,我们最是在一个类的主方法中见到的,如"public static void main(String[] args)",static关键字在java中,通常用于公共的部分,static关键字可以修饰属性,也可以修饰方法。
二、static关键字修饰属性
下面举一个例子:
class Person{ //姓名 private String name; //国籍 private String country; public Person(String name){ this.name = name; } public String getName(){ return name; } public String getCountry(){ return country; } public void setName(String name){ this.name = name; } public void setCountry(String country){ this.country = country; } public void show(){ System.out.println("姓名:"+name+",国籍:"+country); } } public class StaticDemo{ public static void main(String[] args){ Person person1 = new Person("人员一号"); Person person2 = new Person("人员二号"); Person person3 = new Person("人员三号"); person1.show(); person2.show(); person3.show(); //修改一个对象中的一个非static属性的值 person1.setCountry("中国"); System.out.println("修改一个对象中的一个非static属性的值"); person1.show(); person2.show(); person3.show(); } }
运行结果:
通过结果我们可以看出,当修改某个对象中的属性时,其他对象的其对应的值是不会改变的
这个时候我们在country这个属性用static修饰,再次运行
//姓名 private String name; //国籍 private static String country;
运行结果:
从结果中我们可以看出,只修改了一个对象中属性的值,其他对象的相对应的这个属性的值也发生了变化,这就是用static修饰属性的结果
下面从对象内存分析一下原因:
从图中我们可以看出,每个对象中的country属性变量值都指向静态区"中国"这个变量值,所以当任意一个对象中的这个变量
修改值的时候,其他对象的值都会变 。
三、static关键字修饰方法
用static关键字修饰的方法和属性都可以通过类名直接调用,即不创建对象,使用"类名.属性/方法"的形式调用,但是不推荐直接使用类名.属性直接
给属性赋值,因为这样赋值不够安全,例如年龄这个字段,通过类名.属性可以给年龄赋一个负值,显然年龄是负的不合理。所以以后在类中定义属性
的时候,用private修饰,这样就不能直接通过类名.属性这种方式赋值。但是用static关键字修饰的方法,建议我们通过类名.方法这种方式调用,因为
在方法中,我们可以加一些逻辑,避免不合理的情况出现,在日常开发中,使用类名.方法这种方式调用static关键字修饰的方法这种形式很常见。
class Person{ public static void eat(){ System.out.println("人要吃饭"); } } public class StaticMethodDemo{ public static void main(String[] args){ //创建对象并调用方法 Person person = new Person(); person.eat(); System.out.println("==========="); //直接通过类名直接调用 Person.eat(); } }
运行结果: