Static 关键字
Static称作静态内容,可以直接修饰:变量,代码块,方法 ,修饰类的时候只能是内部类
代码块:
有一对{}组成 ,分为实例代码块{}和静态代码块 static{}
实例代码块,随着创建对象的个数进行初始化的,创建几个对象执行几次示例代码库的功能,一般用于设定初始化信息,一般使用的还是比较少的。
静态代码块:整个执行过程只执行一次,一般用于读取外部资源文件。在第一次使用该类的时候执行(Teacher t; 这个不叫第一使用 。 Teacher.test() 或 Teacher a = new Teacher() )
静态代码块的优先级高于实例代码块;
静态成员(代码块,变量,方法) 的优先级高于实例成员(代码块,变量,方法)
1. Static 修饰属性
当使用static修饰属性的时候,我们称之为静态属性,也称为类属性类变量
实例变量:只能由对象调用,每一个对象都有一个实例变量的副本,不能有类调用
(stu.name = ‘张三’ stu2.name = “李四”)
静态变量:属于类的,整个类共享一个值,所有的对象页共享同一个静态变量的值.而实例变量属于对象每个对象都有一个值
一般情况,静态变量需要通过类名直接调用 Student.address =”河北张家口”;
对象调用也可以,但会报警告
静态的内容的优先级高于实例内容
Static 不能修饰局部变量
2. Static 修饰方法
Static 修饰的方法是静态方法
静态方法中只能调用静态成员(静态属性和静态方法)
实例方法中可以调用所有的成员(静态的和非静态的都可以)
在静态方法中不能出现this,super关键字
原因:this作为当前对象在类名调用静态方法的时候还不存在当前对象
注意:
静态方法也是可以被继承的。如果子类也出现了同名的静态方法这时候子类的方法覆盖了继承的父类方法
在向上转型后父类引用调用的静态方法必须是父类中定义的方法而非子类中定义的方法 Person p = new Teacher() p.say()(如果say是一个静态方法,则调用的是父类中定义的。)
静态方法不能有多态。
父类中存在say()方法
public class Person {
public static void say(){
System.out.println("父类这是一个静态的方法");
}
public void eat(){
System.out.println("这是父类吃饭的方法");
}
}
子类中也出现了say()方法(子类的say()方法覆盖了父类的say()方法)
public class Teacher extends Person {
private String name;
public static void say(){
System.out.println("这是子类的静态");
}
public void eat(){
System.out.println("这是子类吃饭的方法");
在向上转型以后父类引用只能调用父类的静态方法
public static void main(String[] args) {
Person p = new Teacher();
p.say(); //父类的方法
p.eat(); //子类重写后的
Teacher t = new Teacher();
t.say(); //子类的方法
t.eat();
}
类的组成:代码块,属性,方法
代码块,属性,方法 有分为:静态的和实例的
类的组成:(静态代码块,实例代码块,静态属性,实例属性,静态方法,实例方法,构造方法不能是静态的)
所有的静态内容都属于类,只有类名能调用,
静态内容的优先级高于实例内容
实例内容属于对象,对象可以调用实例内容也可以调用静态内容