static中用法

static的用法:
1、修饰成员变量,可以直接通过类名.属性名直接引用,而不需要直接new一个对象。
2、修饰成员方法,可以直接通过类名.方法名(参数)直接引用,而不需要直接new一个对象。(这也常常运用在单例模式)

从JVM的类加载机制的角度讲,静态资源是类初始化的时候加载的,而非静态资源是类new的时候加载的。类的初始化早于类的new,比如Class.forName(“xxx”)方法,就是初始化了一个类,但是并没有new它,只是加载这个类的静态资源罢了。所以对于静态资源来说,它是不可能知道一个类中有哪些非静态资源的;但是对于非静态资源来说就不一样了,由于它是new出来之后产生的,因此属于类的这些东西它都能认识。
1、静态方法能不能引用非静态资源?不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。
2、静态方法里面能不能引用静态资源?可以,因为都是类初始化的时候加载的,大家相互都认识。
3、非静态方法里面能不能引用静态资源?可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。
上面引用来自链接中的文章 ,学习!链接点这里

package test;

public class Learning {
	public static void main(String arg[]) {
	//同类中的话调用静态方法可以省略类名
		show01();
		//可以直接通过类名.方法名/属性名引用静态资源
		System.out.println(show02.str);
		show02.show03();
	}

	public static void show01() {
		System.out.println("你好");
	}
}


class show02 {
	public static String str="静态属性";
	public static void show03() {
		System.out.println("静态方法");
	}
				
}

3、静态代码块,在首次初始化类的时候,执行一次;

package test;

public class Learning {
	public static void main(String arg[]) {
		
		show03 show=new show03();
		
		show03 show01=new show03();
	}
}


class show03 {
    static {
    	System.out.println("静态代码块");
    }
	 show03() {
		System.out.println("构造函数01");
	}
				
}

输出:
静态代码块
构造函数01
构造函数01

关于静态代码块:
静态代码块对于定义在它之后的静态变量,不能访问。
静态代码块是严格按照父类静态代码块->子类静态代码块的顺序加载的,且只加载一次。

4、修饰内部类,通过static修饰的内部类,可以通过new 外部类.内部类进行引用。若没有static修饰,需要new一个外部类,在new一个内部类进行引用(外部类对象.new 内部类());

package test;

public class Learning {
	public static void main(String arg[]) {
		
		new show03.method();
	}
}


class show03 {
    
	public static class method{
		method(){
			System.out.println("静态内部类");
		}
    	
    }
				
}

输出:静态内部类

https://www.cnblogs.com/swisszhang/p/9892992.html

https://www.cnblogs.com/a8457013/p/8078826.html

感谢以上两个作者!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值