Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 14121|回复: 0

java中静态方法和非静态方法调用的一点小困扰,已解决。

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-11 09:33:34 | 显示全部楼层 |阅读模式
     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这个实例对象。

     

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 01:18 , Processed in 0.092948 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表