public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleGui1B gui=new SimpleGui1B();
gui.go(); //静态方法不是不能调用非静态方法吗?? }
public void go(){
JFrame frame=new JFrame();
button=new JButton("click me"); button.addActionListener(this); }

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

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

例子2:

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

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

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

 书上说this只能调用实例变量、实例方法和构造方法,不能调用局部变量。求高手指教。

 我书上说this不能调用类变量和类方法,我试验了  觉得这个说法错误。只能说如果有static修饰的静态方法无法用this调出任何东西 比方main方法public static void main(String [] args){}这个是无法调用的
如果是这样public void main(String [] args){ }没有static的话 类变量和类方法都能调用 budui.................................................

要看this的作用区域:

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

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

java中静态方法和非静态方法调用的一点小困扰,已解决。的更多相关文章

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

           一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储 ...

  2. 在java中静态方法与非静态方法

    在java中public void与public static void有什么区别 ? public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用 ...

  3. Java中synchronized用在静态方法和非静态方法上面的区别

    synchronized 修饰在 static方法和非static方法的区别   在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法.也可以sync ...

  4. 谈谈java中静态变量与静态方法在有继承关系的两个类中调用

    谈谈java中静态变量与静态方法在有继承关系的两个类中调用 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量和静态方法在有继承关系的两个类中的问题测试 ...

  5. C#中静态与非静态方法比较

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

  6. C#中静态与非静态方法比较【转】

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

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

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

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

    静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为overri ...

  9. 在静态方法和非静态方法上加 Synchronized的区别

    Synchronzied 修饰非静态方法==>对象锁 Synchronzied 修饰静态方法==>其实是类锁,因为是静态方法,它把整个类锁起来了: 1.Synchronized修饰非静态方 ...

随机推荐

  1. JavaScript--收藏栏添加按钮,放大hdu题目字体

    觉得HDOJ的题目字体太小了,一波小操作 在收藏栏添加:添加网页->网址改为: javascript: void((function() { var element = document.get ...

  2. Alex and broken contest CodeForces - 877A

    /* Name: Copyright: Author: Date: 2018/5/2 10:45:16 Description: 要求出现一个朋友的名字,仅一次 */ #include <ios ...

  3. 2018.7.27 wireless charger TX evaluation kit based on STWBC-EP

    1 introduced 我们需要设计一个无线充电方案: 功能需求:通用的无线充电平台 参数要求:8-10W step1: 找寻资料  http://www.ti.com/sitesearch/doc ...

  4. "Cannot declare member function ...to have static linkage"错误

    英文解释: if you declare a method to be static in your .cc file. The reason is that static means somethi ...

  5. 分析 PHP升级导致系统负载过高问题(转载)

    原文:http://chuansongme.com/n/797172 背景 据XX部门兄弟反应, 其在将PHP从5.3.8 升级到5.5.13 时, 开始运行正常, 运行一段时间后, 系统负载变高,达 ...

  6. NOIP模拟题 斐波那契数列

    题目大意 给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项. 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先 ...

  7. Restoring Road Network(Floyd算法的推广)

    个人心得:看懂题目花费了不少时间,后面实现确实时间有点仓促了,只是简单的做出了判断是否为真假的情况, 后面看了题解发现其实在判断时候其实能够一起解决的,算了,基础比较差还是慢慢的来吧. 题意概述: 就 ...

  8. Why getting this error “django.db.utils.OperationalError: (1050, ”Table 'someTable' already exists“)”

    0down votefavorite   I am getting error like django.db.utils.OperationalError: (1050, "Table 's ...

  9. Java实现Stack类

    Java实现Stack类 import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Sc ...

  10. TreeView 树节点的处理

    TreeView 树节点的处理 using System; using System.Collections.Generic; using System.ComponentModel; using S ...