关于java中的static关键字;
1.static 英文译名为静态的;
2.static修饰的方法为静态方法;
3.static修饰的变量为静态变量;
4.所有static修饰的元素均为静态的,都可以用类名.的方法进行调用【其实用引用.的方式进 行调用也是可以的,不会报错,但会有警告,因此不建议使用引用.的方式进行调用;
5.static修饰的都是类级别的特征和具体的对象无关;
——java中static关键字的用法:
实例变量(对象变量)每个java对象就有一份,那么100个对象就有100份!这里有什么缺点?
例:
public class Chinese {
String id;//实例变量
String name;//实例变量
String country;//实例变量
public Chinese(String id,String name,String country) { //构造方法,形参列表传递实参
this.id=id;
this.name=name;
this.country=country;
}
}
public class ChineseTest01 {
public static void main(String[] args) { //main方法为程序的入口,程序由此处进行
Chinese zhangshan=new Chinese("1","张三","中国"); //new调用构造的方法
Chinese lishi=new Chinese("2","李四","中国"); //new调用构造的方法
System.out.println(zhangshan.id+","+zhangshan.name+","+zhangshan.country);
System.out.println(lishi.id+","+lishi.name+","+lishi.country);
}
}
运行截屏:
—— 以上每个实例变量都储存在对象中,都需要在堆内存中开辟内存;在以上的代码以及代码截屏中,张三和李四都有中国国籍,并且国籍都为中国,将country定义为实例变量浪费空间,没必要让每个对象内都保留国籍信息,因此可以在country的前面,将其变成类级别的变量,通过类访问。
以上代码加上static静态关键字效果如下:
public class Chinese {
String id;//实例变量
String name;//实例变量
static String country="中国";//实例变量
public Chinese(String id,String name) {
this.id=id;
this.name=name;
}
}
public class ChineseTest01 {
public static void main(String[] args) {
Chinese zhangshan=new Chinese("1","张三");
Chinese lishi=new Chinese("2","李四");
System.out.println(zhangshan.id+","+zhangshan.name+","+Chinese.country);
System.out.println(lishi.id+","+lishi.name+","+Chinese.country);
}
}
运行截屏:
这样就节省了堆内存的空间!
另加说明:
—— static String country;中的country为静态变量,静态变量在类加载的时候不需要创建对象内存就开放了
——静态变量储存在方法区内存中
什么时候成员变量声明为实例变量?
—所有对象都有这个属性,但是不同对象此属性不同
什么时候成员变量声明为实例变量?
—所有对象都这个属性并且所有对象的属性的值都是一样的
——所有的静态的数据都可采用类名的方式访问,也可以采用引用,但是建议采用类名的方式访问
——采用引用的方法访问的时候即使引用是null,也不会出现空指针异常,因为访问静态数据的时候不需要对象的存在
2022.3.18