java中静态方法和非静态方法调用的一点小困扰,已解决。
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中静态方法和非静态方法调用的一点小困扰,已解决。的更多相关文章
- Java中堆、栈,静态方法和非静态方法的速度问题
一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储 ...
- 在java中静态方法与非静态方法
在java中public void与public static void有什么区别 ? public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用 ...
- Java中synchronized用在静态方法和非静态方法上面的区别
synchronized 修饰在 static方法和非static方法的区别 在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法.也可以sync ...
- 谈谈java中静态变量与静态方法在有继承关系的两个类中调用
谈谈java中静态变量与静态方法在有继承关系的两个类中调用 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量和静态方法在有继承关系的两个类中的问题测试 ...
- C#中静态与非静态方法比较
C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...
- C#中静态与非静态方法比较【转】
C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...
- 转 C#中静态方法与非静态方法区别比较
C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...
- C#中静态方法和非静态方法的区别
静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为overri ...
- 在静态方法和非静态方法上加 Synchronized的区别
Synchronzied 修饰非静态方法==>对象锁 Synchronzied 修饰静态方法==>其实是类锁,因为是静态方法,它把整个类锁起来了: 1.Synchronized修饰非静态方 ...
随机推荐
- 使用Visio画UML模型
Microsoft Office Visio“UML 模型图” 模板为创建复杂软件系统的面向对象的模型 (模型:建模系统的一种抽象表示,它从特定的视角并在某一抽象级别上指定建模系统.) 提供全面的支持 ...
- Android源代码因删除所有git仓库导致的编译错误
/******************************************************************************** * Android源代码因删除所有g ...
- bzoj4513 储能表
求 $\sum\limits_{i=0}^{n-1} \sum\limits_{j=0}^{m-1} max((x \space xor \space j) - k,0)$ ,膜 $p$ $n,m \ ...
- MyEclipse启动tomcat增加内存配置
omcat增加内存在catalina.bat下 MyEclipse增加内存 设置Window->Preferences->Application Servers->Tomcat -- ...
- Qt中如何用QImage::Format_Indexed8表示灰度图
QImage *qi = new QImage(data_ptr, width, height, QImage::Format_Indexed8); QVector<QRgb> grayT ...
- 关于HTML标签中的一些容易忘记常用样式属性
样式说明--样式: margin, margin-top/left/bottom/right -- 外边距; padding, padding-top/left/botton/right -- 内边距 ...
- Java-API:java.lang百科
ylbtech-Java-API:java.lang百科 java.lang是提供利用 Java 编程语言进行程序设计的基础类.最重要的类是Object(它是类层次结构的根)和 Class(它的实例表 ...
- 【转】js获取对象的所有属性和方法
//有时候需要知道一个js对像的所有属性和方法来帮助调试,下面是再网上找到的一个比较给力的方法 function displayProp(obj){ var names=""; f ...
- Android逆向基础知识Smali
什么是Smali: 我们用工具反编译一些APP的时候,会看到一个smali文件夹,里面其实就是每个Java类所对应的smali文件.Android虚拟机Dalvik并不是执行java虚拟机JVM编译后 ...
- PHP类(二)-类的构造方法和析构方法
构造方法 构造方法是对象创建完成后第一个被对象自动调用的方法,用来完成对象的初始化 在每个类中都会有一个构造方法,如果没有声明的话,类中会存在一个没有参数列表并且内容为空的构造方法.如果声明的话,默认 ...