是否可以从一个static方法内部发出对非static方法的调用?

简介: 这里其实问的是静态方法和非静态方法的区别:静态方法和非静态方法的区别可以总结如下:

这里其实问的是静态方法和非静态方法的区别:


静态方法和非静态方法的区别可以总结如下:


1、静态方法是属于类所有,在类实例化前即可调用此方法,调用一个静态方法就是“类名.方法名”;而非静态方法是要与对象关联在一起的,必须在实例化之后才能分配内存,在实例化一个对象后,才可以在该对象上进行该方法的调用,调用就是“对象.方法()”。


2、非静态方法可以访问类中的任何成员;而静态方法只能访问类中的静态成员;


3、静态方法内部只能出现静态变量和其他静态方法,而且在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行。因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载的时候,对象还不一定存在;同理,super关键字也不能在静态方法中使用,因为静态优先于对象存在,所以方法被静态修饰之后方法先存在,而方法里面要用到super指向的父类对象,但是所需的父类引用对象晚于该方法出现,也就是super所指向的对象没有,当然就会出错。


4、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁;


5、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。静态方法与实例方法在性能和占用内存上没有很明显的区别。


栗子:


public class Demo{
    public static void testStatic(){
   System.out.println("This is static method");
    }
     public void testMethod(){ 
         System.out.println("This is instance method"); 
     }
 public static void main(String[] str){
      //直接通过类调用静态方法
      Demo.testStatic();        
      //实例化,然后构造方法会初始化
      Demo a = new Demo();
      //对象调用非静态方法
      a.testMethod();          
  }
}
复制代码


从上面分析可以看出它们的主要区别:静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。所以当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法则没有关联的对象。所以,一个static方法内部不可以发出对非static方法的调用的。你学废了吗?

目录
相关文章
|
7月前
|
C++
【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写
【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写
|
3月前
|
C语言
static有什么用途
static有什么用途
|
7月前
|
Java 开发者
干货总结|快速构造String对象及访问其内部成员的技巧
本文详细解释了String类的底层实现,介绍了构造String对象及其访问其内部成员的技巧。
|
存储 Java 数据库
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(中)
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(中)
69 1
|
7月前
|
编译器
C++11 静态断言(static_assert)的介绍:介绍静态断言(static assert)在C++11 中的作用和使用方法
C++11 静态断言(static_assert)的介绍:介绍静态断言(static assert)在C++11 中的作用和使用方法
51 0
|
Java 编译器
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
65 1
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
|
Java
深入理解static的作用以及被static修饰的变量、方法、块
static关键字有以下三种使用方法: 1.被static修饰的变量属于静态变量,类变量,可以通过类名,变量名直接引用,不需要进行new一个新类。 2.被static修饰的方法属于静态方法,类方法,可以通过类名,方法名直接引用,而不需要new出来一个对象 3.静态块,用于初始化一个类的时候进行一些操作,静态变量、静态方法和静态代码块都只执行一次,而且只在初始化的时候执行。
303 1
|
存储 Java 编译器
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(下)
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(下)
54 0
|
存储 C语言
static的作用
static的作用
163 0