Java关键字之static详解

写了这么久的Java代码,你有认真的思考一下关键字static的作用吗?特别是static出现的位置你有清楚的了解一下吗?这期博客将带你一起学习static的作用。
static可翻译为“静态的”,在了解static的作用之前我们需要知道在写代码的时候static可以放在哪些位置,或者是说可以修饰哪些内容。首先,我们在类体当中声明变量的时候,有static出现的情况;其次,我们在定义方法的时候也有static出现的情况。

  • 对于变量来说,什么时候定义为实例变量?什么时候定义为静态变量?

首先,方法体当中的变量叫做局部变量,由于局部变量不可以加static修饰符进行修饰,故这里不考虑局部变量。对于类体当中的变量来说,统称为成员变量,没有static修饰的叫做实例变量,有static修饰的叫做静态变量
对于这三种变量在JVM内存当中的分布情况来说,局部变量存储在栈区,实例变量存储在堆区,静态变量存储在方法区域,对于JVM的内存分布情况问题可以参考我之前的博客
对于一个类来说,类 = 属性 + 方法。对于不同的对象来说,可能有不同的属性,那么对于这些直接与不同对象联系的属性来说,必须要设置为实例变量,使用不同的对象来进行访问以便体现出不同对象的不同属性。对于不同对象如果说有统一的属性值,那么可以考虑将该属性变量设置为静态变量。

public class StaticTest {
    
    
	public static void main(String[] args) {
    
    
		System.out.println(User.sex);//直接使用类名访问静态变量
		User user = new User();//访问实例变量之前必须要先new一个对象出来
		System.out.println(user.id);
		System.out.println(user.sex);//对象也可以访问静态变量
	}
}
class User{
    
    
	//实例变量
    int id;
    //静态变量
    static String sex;
}

小结:
1.对象既可以访问实例变量也可以访问静态变量,但是对于静态变量来说,一般建议直接使用类名进行访问。
2.对于静态变量来说,空引用访问静态变量没有空指针异常错误 (NullPointerException)

  • 对于方法来说,什么时候定义为实例方法?什么时候定义为静态方法?

方法的定义格式:
[权限修饰符] 返回值类型 方法名(形式参数列表){
}

Tips:由于构造方法不能用static修饰,故这里不讨论构造方法。
在定义格式中不加static修饰的话就是实例方法,加入static修饰的话就是静态方法。
通常来说,一个方法一般描述了一个行为,如果这个行为必须要由对象来触发,那么这个方法就一定要定义为实例方法。如果一个方法的方法体当中直接访问了实例变量,那么这个方法一定是实例方法,典型的比如说get()方法和set()方法。

public class StaticTest {
    
    
	private int id;
	//访问了成员变量,不能加static修饰,此为实例方法
	public int getId() {
    
    
		return id;
	}
    //访问了成员变量,不能加static修饰,此为实例方法
	public void setId(int id) {
    
    
		this.id = id;
	}
}

如果说一个方法和对象没有直接的联系,那么可以考虑将这个方法定义为静态方法,典型的就是我们所熟知的main()方法。同时,对于静态方法来说,可以直接用类名来调用,Java工具类当中的一些方法采用的大都是static修饰的静态方法,可以直接用类名来调用,方便了用户的操作。

public class StaticTest {
    
    
	public static void main(String[] args) {
    
    
		User.fun();//可以使用类名直接调用静态方法
		User user = new User();//调用实例方法之前必须先new一个对象出来
		int id = user.getId();
		System.out.println(id);
		//user = null;//设置为空引用
		user.fun();//也可以使用对象来调用静态方法
	}
}
class User{
    
    
	//实例变量
    private int id;
    //实例方法
	public int getId() {
    
    
		return id;
	}
	//静态方法
	public static void fun() {
    
    
		System.out.println("测试");
	}
}

小结:
1.对于方法体当中访问了实例变量的方法来说,必须定义为实例方法。如果说静态方法的方法体当中访问了成员变量,那么这个变量一定是静态变量。
2.对于静态方法来说,可以使用类名直接访问,也可以使用对象来访问,建议直接使用类名访问。
3.对于静态方法来说,空引用访问静态方法没有空指针异常错误 (NullPointerException)


以上内容均为个人学习的一点心得,其中的知识点若有错误请留言提醒,若有侵权内容提醒马上删除。

猜你喜欢

转载自blog.csdn.net/pf6668/article/details/107521774