黑马程序员技术交流社区

标题: 非静态方法如何访问静态方法?注意我说的是非静态访问静态 [打印本页]

作者: 为爱编程    时间: 2014-7-27 12:43
标题: 非静态方法如何访问静态方法?注意我说的是非静态访问静态
如问题所述,最好能给一段简单的代码
作者: 依然超级赛亚人    时间: 2014-7-27 14:35
本帖最后由 依然超级赛亚人 于 2014-7-27 14:38 编辑

那个......非静态方法本来就可以访问非静态和静态两类方法(也可以访问静态以及非静态变量),而静态方法只能访问静态方法(以及静态变量)。你可能是表达错了你的意思,大概是要问如何用静态方法访问非静态方法吧?如果是的话看如下陈述以及代码,不是的话直接忽略!

要用静态方法访问非静态的东西,你可以创建包含这个非静态的成员的类的对象,用对象调用就可以了,最简单的就是你所知道的测试类中的main方法就是静态的:public static void main(String[] args).它如果要访问非静态就得通过创建对象以后调用,你仔细想想是这么回事吗?看下面这点代码:
class JingTai
{
        public static void main(String[] args)
        {
                show();
        }
        public static void show(){//show()用了static修饰,main方法可以访问。
                System.out.println("Hello World!");
        }
}
要是下面这段代码就会报错,区别就在于把show()的static去掉了,它不是静态,main方法不能直接访问,你可以验证试试。
class JingTai
{
        public static void main(String[] args)
        {
                show();
        }
        public  void show(){
                System.out.println("Hello World!");
        }
}
就如刚才所说,非要用静态访问非静态,怎么办?创建包含该非静态方法的那个类的对象,然后进行调用就可以了,再看下面这段代码:

class JingTai
{
        public static void main(String[] args)
        {
                JingTai jt = new JingTai();
                jt.show();
        }
        public  void show(){
                System.out.println("Hello World!");
        }
}
刚才的那个非静态方法show()和main方法都在类"JingTai"中,那么我们创建它的对象后在main方法(静态)中调这个非静态show()就可以了,你同样可以试试。
>>>说的有点多,希望有用!
作者: 为爱编程    时间: 2014-7-27 15:52
依然超级赛亚人 发表于 2014-7-27 14:35
那个......非静态方法本来就可以访问非静态和静态两类方法(也可以访问静态以及非静态变量),而静态方法只 ...

首先非常感谢你,这么细致的回答。不过我却是是要问问题中描述的那个:非静态方法可以访问非静态?我想看一个有实际代码的例子,很简单的就行。
作者: fantacyleo    时间: 2014-7-27 16:16
为爱编程 发表于 2014-7-27 15:52
首先非常感谢你,这么细致的回答。不过我却是是要问问题中描述的那个:非静态方法可以访问非静态?我想看 ...

直接访问就好了呀:
  1. class Test {
  2.     public static void main(String[] args) {
  3.         new Test().instanceMethod();
  4. }
  5.     public static void staticMethod() {
  6.         System.out.println("static access test");
  7.     }
  8.         
  9.     public void instanceMethod() {
  10.          staticMethod();
  11.    }
  12. }
复制代码

作者: 依然超级赛亚人    时间: 2014-7-27 16:20
为爱编程 发表于 2014-7-27 15:52
首先非常感谢你,这么细致的回答。不过我却是是要问问题中描述的那个:非静态方法可以访问非静态?我想看 ...

楼主的回复中又写了“非静态方法可以访问非静态”吗?虽然我不知道楼主的意思,但下面这段代码有非静态访问非静态,非静态访问静态,就两种情况了,我都说了。随便注释掉其中一个就是只访问另一个。如果还不是楼主想要的,那我可能误解了楼主的意思,抱歉!
class JingTaiDemo
{
         //定义了一个非静态方法show1
        public void show1(){
                //非静态方法show1访问非静态方法show2
                show2();
                //非静态方法show1访问静态方法show3
                show3();
        }
        public void show2(){
                System.out.println("Hello World!");
                }
        public static void show3(){
                        System.out.println("Hello Java!");
                }
}

class JingTai
{
        public static void main(String[] args)
        {
                JingTaiDemo j = new JingTaiDemo();
                j.show1();
               
        }
       
}

作者: 为爱编程    时间: 2014-7-27 17:23
好的。多谢了
作者: 为爱编程    时间: 2014-7-27 17:26
fantacyleo 发表于 2014-7-27 16:16
直接访问就好了呀:

哥们你现在什么进度了
作者: fantacyleo    时间: 2014-7-27 17:32
为爱编程 发表于 2014-7-27 17:26
哥们你现在什么进度了

进度0%,自荐信都没交。
作者: 为爱编程    时间: 2014-7-27 20:12
fantacyleo 发表于 2014-7-27 17:32
进度0%,自荐信都没交。

你这是硬抓基本功的节奏啊
还是不需要培训已经是业界大咖了~~~
作者: 250669200@qq.co    时间: 2014-7-27 21:09
我也是还没交自荐信,刚把面向对象看完;
作者: 继续悲伤    时间: 2014-7-27 21:31
非静态方法不能访问静态方法吧,静态方法是随着类的加载而加载的 ,非静态方法必须通过创建对象才能访问啊!
作者: 肖岩    时间: 2014-7-28 00:03
继续悲伤 发表于 2014-7-27 21:31
非静态方法不能访问静态方法吧,静态方法是随着类的加载而加载的 ,非静态方法必须通过创建对象才能访问啊 ...

非静态要是不能访问静态,那还要静态何用啊?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2