A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如问题所述,最好能给一段简单的代码

11 个回复

倒序浏览
本帖最后由 依然超级赛亚人 于 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 14:35
那个......非静态方法本来就可以访问非静态和静态两类方法(也可以访问静态以及非静态变量),而静态方法只 ...

首先非常感谢你,这么细致的回答。不过我却是是要问问题中描述的那个:非静态方法可以访问非静态?我想看一个有实际代码的例子,很简单的就行。
回复 使用道具 举报
为爱编程 发表于 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 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();
               
        }
       
}
回复 使用道具 举报
好的。多谢了
回复 使用道具 举报
fantacyleo 发表于 2014-7-27 16:16
直接访问就好了呀:

哥们你现在什么进度了
回复 使用道具 举报
为爱编程 发表于 2014-7-27 17:26
哥们你现在什么进度了

进度0%,自荐信都没交。
回复 使用道具 举报
fantacyleo 发表于 2014-7-27 17:32
进度0%,自荐信都没交。

你这是硬抓基本功的节奏啊
还是不需要培训已经是业界大咖了~~~
回复 使用道具 举报
我也是还没交自荐信,刚把面向对象看完;
回复 使用道具 举报
非静态方法不能访问静态方法吧,静态方法是随着类的加载而加载的 ,非静态方法必须通过创建对象才能访问啊!
回复 使用道具 举报
继续悲伤 发表于 2014-7-27 21:31
非静态方法不能访问静态方法吧,静态方法是随着类的加载而加载的 ,非静态方法必须通过创建对象才能访问啊 ...

非静态要是不能访问静态,那还要静态何用啊?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马