静态与非静态
-
静态方法——类方法
是以static为关键词,从属于类,与类共生
public class Students{//class修饰的是一个类,所以这是一个学生类
public static void say(){//方法前加static修饰,则是静态方法,在其他类中可以直接调用
System.out.println()
}
}//在下面的类中直接调用
public class Demo{
public static void main(String() args){
Students.say();//调用上方中类的方法;因为是静态方法;直接类名.方法即可;
//只要一个类的方法是静态方法,不管这个类是是否在本类中,调用静态方法时,通过类名.方法即可调用!
}
}
-
非静态方法——实例方法,成员方法
对象专用方法,与对象共生
public class Students
public void say(){//方法前没有static修饰,则是非静态方法,在其他类中可以不能直接调用!不能直接调用!不能直接调用!
System.out.println()
}
}//在下面的类中进行调用
public class Demo{
public static void main(String() args){
//若果要调用类的非静态方法,则需要将类实例化,即以类为模板,建立一个单独的对象;实例化就是创造对象
//上面为学生类,我们新建立一个学生,则该学生享有类(模板)的属性和方法
Students xiaoMing=new Students();//我们以学生类创造了一个学生;那么这个学生则是学生类型,将他命名为xiaoMing;
xiaoMing.say();//我们创造的xiaoMing享有模板的一切属性和方法;所以可以通过对象名.方法
}
}//非静态方法为对象专属,只能通过对象调用
-
静态方法与非静态方法之间的调用关系
在同一类中:
静态方法之间可以直接调用、不可以直接调用非静态方法
非静态方法之间可以直接调用、可以直接调用静态方法
静态方法A | 非静态方法A | |
---|---|---|
静态方法B 是否可以被直接调用 | 可以 | 可以 |
非静态方法B 是否可以被直接调用 | 不可以 | 可以 |
- 为什么在同一类中静态方法可以直接互相调用呢?
静态方法与类一起加载,两者可以直接相互调用。
- 为什么在同一类中静态方法不可以直接调用非静态方法呢?
静态方法与类一起加载,而非静态方法只能通过对象建立后才能加载,等于说已经加载的方法不能调用还没有加载的方法,所以不能直接使用。
- 为什么同一类中非静态方法之间可以直接调用?
因为两个非静态方法在对象建立后被同时加载,所以可以直接调用。
public class Demo{
public static void main(String[] args){
}
public static void a(){
//a为静态方法,与Demo类同时加载,而下方b方法并未加载,b需要Demo实例化后,即创造一个对象后才能加载
//所以a不能调用b
}
public void b(){
}
}
public class Demo{
public static void main(String[] args){
}
public void a(){
//a和b为两个非静态方法,在加载时没有时间差,可以互相调用,对象建立,两个方法同时加载
}
public void b(){
}
}
标签:调用,静态方法,静态,void,Day17.1,详解,static,public,加载
From: https://www.cnblogs.com/CQliuwei/p/16909995.html