[java]静态方法访问非静态方法的方法

是不是是有点拗口哈,在刚开始的开发中,经常会碰到"无法访问非静态方法",如下:

Test.java

 public Test{
   public void notStatic(){
    System.out.println("我访问了非静态方法");
    }
   public static void main(String[] args){
    notStatic();//错误,无法访问
    }
}

解决办法有二:

一 、设置其为静态方法

//加入 static
public static void notStatic(){
    System.out.println("我访问了非静态方法");
     }

二、new 对象 引用方法

并不是什么时候都可以设置其为静态方法,比如安卓开发中findViewById只能在非静态方法中调用,那怎么办呢.很简单,new对象引用。

Test.java

 public Test{
   public void notStatic(){
    System.out.println("我访问了非静态方法");
    }
   public static void main(String[] args){
    //notStatic();//错误,无法访问
    Test test = new Test();
    test.notStatic();  //引用
    }
}

关于 static

此部分文章原文链接:JAVA菜鸟入门篇 - static关键字 (十三)
static方法
  static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

  但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

原文地址:https://www.cnblogs.com/zzerx/p/12289821.html

时间: 2024-10-03 17:41:32

[java]静态方法访问非静态方法的方法的相关文章

Java中堆、栈,静态方法和非静态方法的速度问题

       一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆存储速度慢,栈存储速度快,至于为什么堆比栈的存取速度慢,并没有特别深入的研究,从网上也找了很多资料,但很多理由并不太认同,这里也列举一些,并结合自己的理解来分析,如果不正确欢迎指正. 1.从分配的角度分析 java中栈的大小和生命周期在编译期间就确定了的(可以参考之前写的一篇JVM内存

静态方法vs非静态方法

静态方法vs非静态方法 我的理解:静态方法和非静态方法设计之初的目的就是前者是针对类,也就是某一种 对象集体所拥有的,而非静态方法是针对某一个对象的.在引用静态方法时,可以使用 对象名加前缀,也可以使用类名加前缀. 编程人员需要关注的几点 静态方法                       非静态方法                 调用过程 类名.方法名() 对象名.方法名() 生命周期 整个程序的运行周期 对象的生命周期 内存驻留 常驻内存 不常驻内存 使用频率 谨慎使用 推荐 编程人员不

C#静态方法与非静态方法比较

c#静态方法与非静态方法比较: 一.静态方法:使用static修改的方法就是静态方法,否则就是非静态方法. 二.差异比较: 第一:C#静态成员:(1)静态成员属于类所有,非静态成员属于类的实例所有. (2)每创建一个类的实例,都会在内存中为非静态成员新分配一块存储. 总结:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域.   第二:C#静态方法:     (1)C#静态方法属于类所有,类实例化前即可使用. (2)非静态方法可以访问类中的任何成员

c#静态方法和非静态方法详细介绍

C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身. 所以对静态方法不需要 首先创建一个类的实例,而是采用类名.静态方法的格式 . 1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用! static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是

C#中静态方法和非静态方法的区别

静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为override,导致派生类不能重写,但是可以访问: 4.静态成员是在第一次使用时进行初始化.非静态的成员是在创建对象的时候,从内存分配上来说静态是连续的,非静态在内存的存储上是离散的,因此静态方法和非静态方法,在调用速度上,静态方法速度一定会快点,因为非静态方法需要实例化,分配内存,但静态方法不用,但是这种速

静态方法与非静态方法

C#的类中可以包含两种方法:C#静态方法与非静态方法.让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法.下面我们分四个方面来看看C#静态方法与非静态方法的差异:C#静态方法与非静态方法比较一.C#静态成员:①静态成员属于类所有,非静态成员属于类的实例所有.②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域.C#静态方法与非静态方法比较二.C#静态方

[转]C#静态方法与非静态方法的比较

转自:http://www.cnblogs.com/NothingIsImpossible/archive/2010/07/28/1786706.html 1:C#的类中可以包含两种方法:C#静态方法与非静态方法. 2:那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 3:下面我们分四个方面来看看C#静态方法与非静态方法的差异: C#静态方法与非静态方法比较一.C#静态成员: ①静态成员属于类所有

转 C#中静态方法与非静态方法区别比较

C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 下面我们分四个方面来看看C#静态方法与非静态方法的差异: 比较一.C#静态成员①静态成员属于类所有,非静态成员属于类的实例所有.②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储

c#静态方法和非静态方法区别

c#静态方法和非静态方法区别 C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 比较一.C#静态成员: 静态成员属于类所有,非静态成员属于类的实例所有. 每创建一个类的实例,都会在内存中为非静态成员新分配一块存储:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域. 比较二.C#静态方法 C#静态方