为什么类中有些方法必须定义成static类型的?

kala197 2011-02-15 11:49:09
import java.util.Timer;
import java.util.TimerTask;
/**
* @author softisland
*
*/

public class timetest {
public static void ShowPic(){

int i, j, k;
// i 的值,-3,-2,-1,0,1,2,3
for (i = -3, j = 1; i <= 3; j++) {
// 对i取绝对值,并传至给k
if (i < 0)
k = i * (-1);
else
k = i;
// 如果满足条件,输出*,且跳出本次循环。
if (j <= k || (j > 7 - k && j != 8)) {
System.out.print("*");
continue;
}
// 如果满足条件输出a
if (j > k && j <= 7 - k) {
System.out.print(" ");
}
//如果j=8则i自加1,并将0重新赋值为0!
//(只有j在[1,7]范围内才输出)
if (j == 8) {
i++;
j = 0;
System.out.println();
}
}

}
public static void main(String[] args) {
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int count = 0;
public void run() {
System.out.println(count);
ShowPic();//如果方法不是static 类型的 这里IDE就会提示错误
++count;
if (count > 10) {
timer.cancel();
System.out.println("Timer is stopped.");
}
}

}, 0, 500);
}

}


上面的程序ShowPic() 必须是static 类型的 为什么 如果方法不是要声明成static 类型的 ShowPic()方法就必须写在run()方法里面 为什么 ?
...全文
844 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
whut_lcy 2011-02-15
  • 打赏
  • 举报
回复
谷歌or百度
关键字:java main 为什么 static

看它三四篇,你对java的static就很精通了

kala197 2011-02-15
  • 打赏
  • 举报
回复
类中的成员方法 必须实例化该类的对象才可以使用

如果不想实例化对象的话 把成员方法声明成 static 就可以了吗 ?

那么类能不能直接调用其他类里面的static 方法?
nairuohe 2011-02-15
  • 打赏
  • 举报
回复
你首先要知道一点:你看main方法是静态的,实际上,程序在执行main方法的时候没有实例化timetest类。
还要知道一点:当成员方法是静态时,可以不用实例化类而直接调用方法。若不是,则必须先实例化再调用。

现在你自己在代码中也没有实例化timetest类。所以你把showPic方法写在外面,也就是作为timetest类的成员方法,而在没有实例化timetest类的时候就调用它的成员方法,当然是有问题的。改成静态之后就没有问题了。实例化是怎么回事你应该清楚吧?
liumin_csu 2011-02-15
  • 打赏
  • 举报
回复
因为你没有新建timetest 类的对象就调用它的方法,这样当然报错。
1.如果方法不是static的,必须通过新建对象 timetest test=new timetest后,用test.ShowPic调用。
2.如果方法是static,则直接调用即可,就像你贴上来的代码。静态方法直接通过类名访问timetest.ShowPic,你现在贴上来的是用this调用,也行。
wangchangbing 2011-02-15
  • 打赏
  • 举报
回复
ShowPic();//如果方法不是static 类型的 这里IDE就会提示错误

timetest tt = new timetest();
tt.ShowPic();

这样就可以不使用static了
chaoliu1024 2011-02-15
  • 打赏
  • 举报
回复
ShowPic()定义为static,不实例化对象也能使用
一般使用方法都是"对象名"."函数名",加static后就可以不实例化对象
TimerTask类是一个时间任务类,必须有一个run()方法,相当于又开了一个线程
不善^ 2011-02-15
  • 打赏
  • 举报
回复
static 是静态的 属于公共的 不需要实例化
如果你不是static 你就必须 先实例化类 然后再调用 该方法
关于static的说明 你可以百度搜索下
浪漫江湖 2011-02-15
  • 打赏
  • 举报
回复
static本身的意思是静态的;ava中如果一个方法加上static那它那就成了这个类的方法,而不是一个具体的对象的方法了(虽然实例化后的对象也可以调用);但在main方法的run()方法中直接调用的话,它当然就是错的了.如果你加上static 就表示这个方法是这个类的方法,(类方法是在一个类中有作用);所以你可以直接调用了
魔都 2011-02-15
  • 打赏
  • 举报
回复
static 为静态,是当类编译加载的时候,内存就会开辟存储空间的。
你要用static 的静态 调用非静态的方法,这个时候非静态的方法还没有空间呢。所以不行。

可以先new一下在调用。也可。
qkniit 2011-02-15
  • 打赏
  • 举报
回复
ShowPic();//如果方法不是static 类型的 这里IDE就会提示错误

改成:

new timetest().ShowPic();

ShowPic()的static 去掉。

也可以的

zenganiu11 2011-02-15
  • 打赏
  • 举报
回复
因为main方法是static类型,static方法只能调用static方法
Darling_sheep 2011-02-15
  • 打赏
  • 举报
回复
因为你的main方法是static的,所以里面只能直接调用static类型的方法和属性。非static类型的属性和变量只能通过所属类的对象来调用。
因此,如果你的ShowPic()不是static类型的,只能这样调用:
timetest tt=new timetest();
tt.ShowPic();

另外,建议楼主有空看一下Java代码规范。
JoneSche 2011-02-15
  • 打赏
  • 举报
回复
很搞笑

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧