zoukankan      html  css  js  c++  java
  • java中静态方法和非静态方法调用的一点小困扰,已解决。

     1 public static void main(String[] args) {
     2         // TODO Auto-generated method stub
     3         SimpleGui1B gui=new SimpleGui1B();
     4         gui.go();  //静态方法不是不能调用非静态方法吗??
     5 
     6     }
     7     public void go(){
     8         JFrame frame=new JFrame();
     9         button=new JButton("click me");
    10         
    11         button.addActionListener(this);
    12         
    13     }

    比如:像上面的例子1中,main方法是个静态方法,java中不是明文规定在静态方法中不能调用非静态方法吗?这里为什么不报错呢?

    牛人的回答:
    静态方法中的调用是指不能直接调用,像这样的:
    
    public static void main(String args[]) {
      idea();
    
    但是你这里是对象来调用的,就是:
    Example e = new Example();
    e.idea();
    new Example()已实例话,调用的是非静态方法
    认真看书,耐心琢磨,问csdn作用不大。
    偶,我知道了,是因为我new 了一个对象,然后对象给封装好了。
     1 照楼主的意思。。。我们永远都不可能用到非静态方法了。。。
     2 因为程序要执行肯定要从main()开始,main()是静态方法,所以不管他调用的是什么函数只能是静态的,比如他调用一个A()函数,那他也必须是静态的,那么A()里面调用的B.D.E.F.G.....N都只能是静态的,所以我们根本不需要非静态方法,因为他永远都不会用到。。。
     3 那么java设计者这群SB竟然设计出非静态方法这种根本用不到的东西,简直一群脑残、二百五。。。!!!
     4 LZ。。。你是这意思吗?。。。
     5 
     6 1楼说的好啊。。。不能调用指的是在同一个类中,不能直接引用函数名来调用方法
     7 public class Yun{
     8   void a(){
     9     //我是非静态方法
    10   }
    11   static void b(){
    12     //我是静态方法
    13   }
    14   public static void main(String[] args){
    15     a();//不能直接调用非静态方法
    16     b();//可以直接调用静态方法
    17     new Yun().a();//可以
    18     new Yun().b();//当然不可以
    19   }
    20 }
    1 你这不叫静态方法调用非静态方法,你这调用的是实例化方法,就是先new一个对象,再用这个对象去调用对象中的实例化方法,到哪里这样调用都没问题(只要方法是public的)。
    1 new Example().idea();已经创建对象了,这种写法是缩写
    2 Example.idea(); 这样就不行了。

     例子2:

     1 public static void main(String[] args) {
     2         // TODO Auto-generated method stub
     3         JFrame frame=new JFrame();
     4         JButton button=new JButton("click me");
     5         
     6         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     7         
     8         frame.getContentPane().add(button);
     9         frame.setSize(300,300);
    10         
    11         frame.setVisible(true);
    12         
    13         button.addActionListener(this);  //按说button不是也属于实例对象。

    这个时候就开始报错了呢:

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
     Cannot use this in a static context。

    1 书上说this只能调用实例变量、实例方法和构造方法,不能调用局部变量。求高手指教。
    2 
    3 我书上说this不能调用类变量和类方法,我试验了  觉得这个说法错误。只能说如果有static修饰的静态方法无法用this调出任何东西 比方main方法public static void main(String [] args){}这个是无法调用的
    4 如果是这样public void main(String [] args){ }没有static的话 类变量和类方法都能调用
    5 
    6 budui.................................................

     要看this的作用区域:

    this直接使用的话,只能指代主类。

    button.this, 此时特指button这个实例对象。

  • 相关阅读:
    Java的String类
    Java基本数据类型
    Java历史简介
    Java常量,变量,作用域!强转类型
    JAVA特性与JDK,JRE,JVM!
    JAVA历史简介
    JAVA多线程
    开博了
    quartz学习笔记(一)简单入门
    CentOS-64位安装mysql5.7
  • 原文地址:https://www.cnblogs.com/meihao1989/p/3182317.html
Copyright © 2011-2022 走看看