static 的使用
1、概念
使用static 修饰成员变量,此时该成员变量又对象层级提升到类层级,被所有对象共享 该成员变量随着类的加载而准备就绪,与是否创建对象无关.
总之:类存在的时间比对象早
2、修饰的范围
static 修饰符表示静态的,可修饰字段、方法、代码块、内部类,其修饰的成员属于类,也就是说 static 修饰的资源属于类级别,而不是对象级别
3、静态属性
属性可以用类来调用,也可以用对象来调用,所有的实例共享这个静态属性。
/**
*
* 一、静态变量修饰属性
* 1、属性可以用类来调用,也可以用对象来调用,所有的实例共享这个静态属性。
* 2、静态变量随着类的加载而加载,类的加载比对象早
* 3、静态变量加载比对象早
* 4、由于类的加载只会有加载一次,则静态变量在内存中也一份,存在方法区的静态域中
*
*
*/
public class Persion {
private String name;
private int age;
private static String country = "china";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
Persion.country = country;
}
public void print(){
System.out.println("name="+this.getName()+"age="+this.getAge()+"country="+Persion.getCountry());
}
}
public class Test1 {
public static void main(String[] args) {
Persion persion = new Persion();
persion.setAge(23);
persion.setName("guanyu");
persion.setCountry("蜀国");
System.out.println("==================");
persion.print();
Persion persion1 = new Persion();
persion1.setAge(25);
persion1.setName("zhangfei");
System.out.println("==================");
persion1.print();
}
}
//这里可以看到country 这个属性是共享的,任何一个对象改了后所有的别的对象都改了
==================
name=guanyuage=23country=蜀国
==================
name=zhangfeiage=25country=蜀国
3、静态方法
静态方法可以通过类名和对象来调用,建议使用类名
public class Persion {
private static Map<String, String> conMap = new ConcurrentHashMap<String, String>();
private String name;
private int age;
private static String country = "china";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
Persion.country = country;
}
public void print(){
System.out.println("name="+this.getName()+"age="+this.getAge()+"country="+Persion.getCountry());
}
public static void test12(String key,String value){
if(StringUtil.isNotEmpty(conMap.get(key))){
System.out.println("buweikong");
}else {
conMap.put(key,value);
}
System.out.println(conMap.get(key)+"=====");
}
}
public class Test1 {
public static void main(String[] args) {
Persion persion = new Persion();
persion.test12("12","sss");
Persion persion1 = new Persion();
persion1.test12("12","sss1222");
}
}
sss=====
buweikong
sss====
特别注意下上面的结果哈。第一次已经放了值 了,第二次就不会放了
4、静态代码块
后面跟着一段代码,这段代码只会初始化一次,且在类被第一次装载时。
static {
System.out.println("======static========");
}
5、方法或者属性什么时候用static
/** * * 方法或者属性什么时候需要使用static修饰 * 1、如果属性是所有对象共享的那么就是用static。例如设置常量的时候 * 2、工具类中的方法使用static,方法中操作常量这个方法也要设置为static. * * */
浙公网安备 33010602011771号