Java-static静态

java-static静态

作用

用于修饰成员变量、成员函数。可被对象或类调用。

使用场景

当多个对象有共同数据时,没必要每个对象都具有该成员变量,可以独立出来。例:

class Person
{
	String name;
	String country = "cn";
	public void show(){}
}

每个对象的建立都会拥有name、country两个变量,但country是每个对象所共有的数据,都是"cn"。因此可将其独立出来。

class Person
{
	String name;
	static String country = "cn";
	public void show(){}
}

此时,static修饰的country存储于方法区(共享区)中,而并非存于堆内存中。

static特点

1、随着类的加载而加载,类的消失而消失。
2、优先于对象存储在
3、被所有对象共享
4、可以直接被类名所调用
**非静态变量在创建对象后才存在,成为实例变量
**静态变量在加载类时即存在,成为类变量
实例变量与类变量的区别:
1、存放位置:实例变量在堆内存中,类变量在方法区中
2、生命周期:类变量生命周期长,随类的消失而消失;实例变量生命周期随对象的消失而消失
注:

public static void main(String[] args)
{
	Person p = new Person;//定义对象,静态变量、非静态变量(默认值0、null)都创建
	Person.country;//类名调用静态变量,静态变量存在、非静态变量不存在
	Person p1 = null;//p1赋值为null,没有加载类,静态变量不存在。
}

static使用注意事项:

1、静态方法只能访问静态成员(变量、方法)
2、静态方法优先于对象存在,不可以在静态方法内使用this、super关键字

static利弊:

利:共享数据单独空间存储,节省内存,可直接被类名调用。
弊:生命周期过长,访问出现局限(只能访问静态成员)。

static的应用:

用静态建立工具类

class ArrayTool
{
	private ArrayTool(){}//构造函数私有化,防止程序定义该类对象,直接用类名调用方法即可。
	public static int getMax(int[] arr){...}//获取数组最大值
	public static int getMin(int[] arr){...}//获取数组最小值
	public static void selectSort(int[] arr){...}//选择排序
	public static void bubbleSort(int[] arr){...}//冒泡排序
	private static void swap(int[] arr,int x,int y){...}//交换位置
}

static代码块:

public class StaticCode {
    int num = 9;
    //构造函数
    StaticCode()
    {
        System.out.println("b");
    }
    //静态代码块,初始化类
    static
    {
        System.out.println("a");
    }
    //构造代码块,初始化构造函数。
    {
        System.out.println("c");
    }
}

执行顺序:静态代码块>构造代码块>构造函数
输出为:a c b

public static void main(String[] args)
{
	new StaticCode();
    new StaticCode();
}

两次加载StaticCode类,静态代码块只执行一次,输出结果为a c b c b

class StaticCodeDemo{
   static
    {
        System.out.println("b");
    }
    public static  void main(String[] args)
    {
       System.out.println("d");
    }
    static
    {
        System.out.println("c");
    }
}

静态代码块优先于主函数(函数)执行,输出为b c d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值