static关键字相关知识点:
一、在一个变量前加上static,这个变量将作为数据的共享数据存在。
如下代码:
public class person{
//对象的特有数据(非静态修饰)
//对象的共享数据(静态修饰),调用者可以是new的对象
//被静态修饰的成员,可以被类的名字直接调用,调用者可以是new的对象,也可以是new的类名
String name;
static String className;
}
public class test{
public static void main (String[]args){
person p1=new person();
person p2=new person();
p1.name="哈哈";
p2.name="嘻嘻";
System.out. println (p1.name);
System.out. println (p2.name);
//对象调用类的成员变量
p1. className="基础班";
System.out. println (p2.className);//将会输出基础班
System.out. println (person.className);//将会输出基础班
}
}
二、static特点
1.被static修饰的成员变量属于类,不属于这个类的某一个对象
(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
2.被static修饰的成员建议通过类名直接调用
访问静态成员的格式:类名.静态成员变量名、 类名.静态成员方法名(参数)
对象名.静态成员变量名 ------不建议使用该方式,会出现警告
对象名.静态成员方法名(参数) ------不建议使用该方式,会出现警告
三、static注意事项
1、静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。(静态中不能使用非静态,原因:生命周期不同,静态优先于非静态)
2、同一个类中,静态成员只能访问静态成员
3、main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中
static的应用场合:
1、 static只修饰成员变量和成员方法
2、 成员变量加static根据具体事物,具体分析,定义事物的时候,多个事物之间是否有共性的数据,共性的定义为静态
3、 成员方法加static跟着变量走,如果方法没有调用过非静态成员,将方法定义为静态
四、static关键字在多态中的运用
public class Fu{
static int i=1;
public static void show( ){
System.out. println(父类静态方法show);
}
}
public class Zi{
static int i=2;
public static void show( ){
System.out. println(子类静态方法show);
}
}
public classTest{
//多态调用中,编译看谁,运行看谁 编译都看=左边的父类,父类有编译成功,没有编译失败
运行,静态方法,运行父类中的静态方法
运行,非静态方法,运行子类的重写方法
成员变量,编译运行全是看父类
public static void main (String[]args){
Fu f=new Zi( );
System.out. println(f.i);//输出的是父类中i的值1
f.show( );//调用的还是父类中的静态方法,原因:静态属于类,不属于对象。对象的多态性,静态和对象无关,父类的引用,静态方法
}
}
五、定义静态常量
定义格式:public static final 数据类型变量名 = 值;(此时变量名用全部大写,多个单词使用下划线连接)
class Company {
public staticfinal String COMPANY_NAME = "传智播客";
public staticvoid method(){
System.out.println("一个静态方法");
}
}
当我们想使用类的静态成员时,不需要创建对象,直接使用类名来访问即可。
System.out.println(Company.COMPANY_NAME); //打印传智播客
Company.method(); //调用一个静态方法
注意:接口中的每个成员变量都默认使用public static final修饰。
所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。
interface Inter {
publicstaticfinalintCOUNT = 100;
}访问接口中的静态变量:Inter.COUNT