java中static关键字

一、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();		
	}
}

  运行结果:

  

  

原文地址:https://www.cnblogs.com/li666/p/11875931.html