java中有关静态方法中不能调用实例方法的问题

java中有关静态方法中不能调用实例方法的问题,第1张

构造方法

这个是创建对象时候用的 里面可以给赋予初始值或者继承父类的属性或者方法 反正就是构造对象时候用的方法拉

成员方法

这个我还真不懂

实例方法

就是对象方法 只能被对象所调用

静态方法

就是类方法

被static修饰的方法就是类方法 类和对象皆可调用 但一般很少用到静态方法 一般都是为了方便调试或者是有些特殊的地方要用上

方法并不是谁包含谁 他只是一种运算方式

还有final方法 不可被任何类继承重载

抽象方法是在抽象类和接口声明的

他们需要实现或者继承,可覆盖

楼上的都说了 不清楚我怎么说你能明白么

以上的都是常见的方法类型

有时间看看修饰符的作用和类与对象的关系

就没看见过你怎么问的

补充回答:

没层次

方法主要就分对象方法和类方法(静态)

还有抽象方法和final方法

主方法程序的开始

方法之间没层次关系,他们只是被对象或类调用

不能够。根据Python编程的使用方法得知,静态方法可以没有参数,是可以直接使用类名调用的,静态方法名义上归类管理,实际中在静态方法中无法访问类和实例中的任何属性和方法的,是不能够调用实例方法和实例属性的。Python是一门流行的编程语言。它由GuidovanRossum创建,于1991年发布。

现在有如下一个Person类:

类中定义了基本属性name 和age

```

  function Person( name, age){

        thisname = name||"lorentz";

        thisage  = age||27;

    }

```

首先我们给它添加一个实例方法,即通过实例化该类,在类的实例上可以调用的方法

```

function Person( name, age){

        thisname = name||"lorentz";

        thisage  = age||27;

    }

      //定义在原型上的方法 可以在实例上直接调用

    PersonprototypesayAge = function(){

        consolelog(`my age is ${thisage}`);

    }

    let p1 = new Person();

    p1sayAge();  //my age is 27

```

通过构造函数的原型,定义了一个sayAg方法,所有的实例都可以通过原型链调用该方法。

静态方法即不需要实例化,可以直接利用构造函数调用的方法。在JS中,函数也是一个对象。将构造函数对象的某个属性设置为一个函数即为静态方法:

注意静态方法里this指向构造函数对象Person,而不是构造函数的实例

```

   function Person( name, age){

        thisname = name||"lorentz";

        thisage  = age||27;

    }

      //定义在原型上的方法 可以在实例上直接调用

    PersonprototypesayAge = function(){

        consolelog(`my age is ${thisage}`);

    }

    PersonstaticMethod = function(){

        consolelog(`i am a static method `); //i am a static method 

        //静态方法中的this指向Person这个构造函数对象,在该对象里是没有age这个属性的

        consolelog(`my age is ${thisage}`); // my age is undefined

        consolelog(this);  //[Function: Person] { staticMethod: [Function (anonymous)] }

    }

    PersonstaticMethod();   

```

在构造函数里定义私有方法,该方法无法在外部直接访问,通过闭包可以访问该方法

注意此时Person是一个普通函数,返回了一个对象,通过返回的对象可以访问他的私有方法

```

 function Person( name, age){

        thisname = name||"lorentz";

        thisage  = age||27;

        let privateMethod = function(){

            consolelog(`i am a priviate method`);

        }

        return {

            fn: privateMethod

        }

    }

    let p = Person();

    pfn();  //i am a priviate method

```

1、静态方法中不能调用非静态方法。

2、如果静态方法中必须要调用非静态方法,可以先new(实例),之后通过new实例的引用调用此类的方法。

3、如果一个类被实例化了,那么这个类中除了private的,都可以调用到。

1添加spring获取上下文和bean方法的工具类(ApplicationContextUtil)

    @Component

    public class ApplicationContextUtil implements ApplicationContext{

        private static ApplicationContext context;

        @Override

        public void setApplicationContext(ApplicationContext context){

            ApplicationContextUtilcontext = context;

        }

        public static ApplicationContext getContext(){

            return context;

        }

    }

2在静态方法类中通过工具类获取bean内容(获取的为bean内容,也可以实例化对象,但是获取不到bean内容)

    Object obj = (Objectclass)ApplicationContextUtilgetContext()getBean("bean的名字");

1、静态方法(static)的含义是,属于“类”的方法。什么意思呢?比如我们说“人”,有两种概念,一种是“人类”,指的是抽象的整体概念,一种是“个人”,比如张三,李四。static是用来服务“类”的,而实例变量是用来服务“个体”的。

2、举个例子,比如说人类的历史,那么“历史”就应该是static的,而个人的经历,“经历”就是属于具体的个人的,就不是static。

3、所以,静态方法当然不能调用实例变量,因为在“整体”中你压根不可能知道你要调用哪个“个体”的实例变量。

静态方法是用来 *** 作这个类型的,方法被该类的所有实例共享。

而实例方法用来 *** 作单个实例,不被该类所有实例共享。

静态方法中不能调用实例方法,也不能访问实例变量。

实例方法可以调用静态方法,也能访问静态变量。

总之静态方法对应的是类型,即Class,类。但是实例方法对应的是实例,即object,对象。

实例方法的区别主要体现在两个方面:

在外部调用静态方法时,可以使用"类名方法名"的方式,也可以使用"对象名方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

下面几个例子展示了这一区别。

1、调用静态方法示例。

//-----------hasStaticMethodjava-----------------

public class hasStaticMethod{

//定义一个静态方法

public static void callMe(){

Systemoutprintln("This is a static method");

}

}

下面这个程序使用两种形式来调用静态方法。

//-----------invokeStaticMethodjava-----------------

public class invokeStaticMethod{

public static void main(String args[]){

hasStaticMethodcallMe(); //不创建对象,直接调用静态方法

hasStaticMethod oa = new hasStaticMethod(); //创建一个对象

oacallMe(); //利用对象来调用静态方法

}

} 程序两次调用静态方法,都是允许的,程序的输出如下:

This is a static methodThis is a static method

允许不创建对象而调用静态方法,是Java为了减少程序员调用某些常用方法时的麻烦,而允许程序员按照传统的C语言中使用函数的方式来使用方法。典型的例子是前面某些程序中使用"Mathramdon()"来获取随机数。

还有一个很典型的代表就是数组的处理工具Arrays

2、静态方法访问成员变量示例。

//-----------accessMemberjava-----------------

class accessMember{

private static int sa; //定义一个静态成员变量

private int ia; //定义一个实例成员变量

//下面定义一个静态方法

static void statMethod(){

int i = 0; //正确,可以有自己的局部变量sa = 10;

//正确,静态方法可以使用静态变量

otherStat();

//正确,可以调用静态方法

ia = 20; //错误,不能使用实例变量

insMethod(); //错误,不能调用实例方法

}

static void otherStat(){}

//下面定义一个实例方法

void insMethod(){

int i = 0; //正确,可以有自己的局部变量

sa = 15; //正确,可以使用静态变量

ia = 30; //正确,可以使用实例变量

statMethod(); //正确,可以调用静态方法

}

}

本例其实可以概括成一句话:静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。

main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用

以上就是关于java中有关静态方法中不能调用实例方法的问题全部的内容,包括:java中有关静态方法中不能调用实例方法的问题、python静态方法能够调用实例方法和实例属性吗、JS中类的实例方法,静态方法以及私有方法分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9866273.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存