java中无法在静态方法中访问非静态变量(或方法)的问题
importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclasstestextendsJFr...
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame
{
Frame logonf;
Panel logonfPanel1;
JTextField ip1,ip2,ip3,ip4;
JButton OK;
//上面这些若不特别说明,默认是private吗?
public static void main(String args[])
{
Frame logonf=new Frame("登陆");
Panel logonfPanel1=new Panel(new FlowLayout(FlowLayout.CENTER));
JTextField ip1=new JTextField(5);
JTextField ip2=new JTextField(5);
JTextField ip3=new JTextField(5);
JTextField ip4=new JTextField(5);
JButton OK=new JButton("OK");
OK.addActionListener(new ActionListener()
{
public actionPerformed(ActionEvent e)
{
if(checkip()==0)
//这里调用checkip()方法出错,说是在静态方法中无法调用非静态方法。
JOptionPane.showMessageDialog(null,"error!","JOptionPane.INFORMATION_MESSSAGE");
}
});
logonfPanel1.add(ip1);
logonfPanel1.add(ip2);
logonfPanel1.add(ip3);
logonfPanel1.add(ip4);
logonf.add(logonfPanel1,"North");
logonf.add(OK);
logonf.setSize(400,100);
logonf.setVisible(true);
}
public int checkip()
{
String s1,s2,s3,s4;
s1=ip1.getText();
s2=ip2.getText();
s3=ip3.getText();
s4=ip4.getText();
if(s1=="")
return 0;
else if(s2=="")
return 0;
else if(s3=="")
return 0;
else if(s4=="")
return 0;
else
return 1;
}
}
编译出错:调用checkip()方法出错,说是在静态方法中无法调用非静态方法.
main方法是static修饰的,这是静态方法。
但是public void static main(String args[])中void,static缺少的话都会报错,说是main方法错误。
java中必须有public void static main(String args[])方法吗?还是不必须的?
在静态方法中无法调用非静态方法.这个问题怎么解决啊? 展开
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame
{
Frame logonf;
Panel logonfPanel1;
JTextField ip1,ip2,ip3,ip4;
JButton OK;
//上面这些若不特别说明,默认是private吗?
public static void main(String args[])
{
Frame logonf=new Frame("登陆");
Panel logonfPanel1=new Panel(new FlowLayout(FlowLayout.CENTER));
JTextField ip1=new JTextField(5);
JTextField ip2=new JTextField(5);
JTextField ip3=new JTextField(5);
JTextField ip4=new JTextField(5);
JButton OK=new JButton("OK");
OK.addActionListener(new ActionListener()
{
public actionPerformed(ActionEvent e)
{
if(checkip()==0)
//这里调用checkip()方法出错,说是在静态方法中无法调用非静态方法。
JOptionPane.showMessageDialog(null,"error!","JOptionPane.INFORMATION_MESSSAGE");
}
});
logonfPanel1.add(ip1);
logonfPanel1.add(ip2);
logonfPanel1.add(ip3);
logonfPanel1.add(ip4);
logonf.add(logonfPanel1,"North");
logonf.add(OK);
logonf.setSize(400,100);
logonf.setVisible(true);
}
public int checkip()
{
String s1,s2,s3,s4;
s1=ip1.getText();
s2=ip2.getText();
s3=ip3.getText();
s4=ip4.getText();
if(s1=="")
return 0;
else if(s2=="")
return 0;
else if(s3=="")
return 0;
else if(s4=="")
return 0;
else
return 1;
}
}
编译出错:调用checkip()方法出错,说是在静态方法中无法调用非静态方法.
main方法是static修饰的,这是静态方法。
但是public void static main(String args[])中void,static缺少的话都会报错,说是main方法错误。
java中必须有public void static main(String args[])方法吗?还是不必须的?
在静态方法中无法调用非静态方法.这个问题怎么解决啊? 展开
6个回答
展开全部
一二楼的几位都没学过java的
<br>你的main方法是static的(这个永远都不可能改变),而java规定,static方法是没办法引用非static的变量或者方法的,所以,你在main方法中,既不能访问你先定义好的变量,就象JTextField ip1,ip2,ip3,ip4; 即使你先定义了你还是得在main方法中定义;你也没办法调用非static方法,就像if(checkip()==0) ,这里就提示你出错。
<br>解决的方法两种,一是把变量、方法都声明为static的(不建议,浪费内存空间),另一种方法是,采用面向对象技术,声明一个对象,
<br>test t=new test();
<br>然后在t中调用test()的方法和成员变量,这样就不会提示错误了。lz看来是还没理解java的思想。而且初始化完全可以在一个构造方法中来做。
<br>你的main方法是static的(这个永远都不可能改变),而java规定,static方法是没办法引用非static的变量或者方法的,所以,你在main方法中,既不能访问你先定义好的变量,就象JTextField ip1,ip2,ip3,ip4; 即使你先定义了你还是得在main方法中定义;你也没办法调用非static方法,就像if(checkip()==0) ,这里就提示你出错。
<br>解决的方法两种,一是把变量、方法都声明为static的(不建议,浪费内存空间),另一种方法是,采用面向对象技术,声明一个对象,
<br>test t=new test();
<br>然后在t中调用test()的方法和成员变量,这样就不会提示错误了。lz看来是还没理解java的思想。而且初始化完全可以在一个构造方法中来做。
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
静态方法属于类的,可以在类中直接调用,如果不是静态方法,就需要创建一个类的实例来调用它.
<br>你的public int checkip() 方法不是静态方法,因为没有static修饰符,如果就这样的话,在这个类中调用它,还是要创建的,test t = new test()在上面,然后
<br>if(t.checkip()==0) {
<br> JOptionPane.showMessageDialog (null,"error!","JOptionPane.INFORMATION_MESSSAGE");
<br>}
<br>就可以了.
另一种解决方法就是把checkip()设置成静态方法就可以了.就是在方法前加上static修饰符就ok了
<br>
<br>纠正一下苏研研的回答..
<br>checkip()是返回int类型的方法,它执行完毕后就是一个int 类型数值.所以完全可以的.
<br>你的public int checkip() 方法不是静态方法,因为没有static修饰符,如果就这样的话,在这个类中调用它,还是要创建的,test t = new test()在上面,然后
<br>if(t.checkip()==0) {
<br> JOptionPane.showMessageDialog (null,"error!","JOptionPane.INFORMATION_MESSSAGE");
<br>}
<br>就可以了.
另一种解决方法就是把checkip()设置成静态方法就可以了.就是在方法前加上static修饰符就ok了
<br>
<br>纠正一下苏研研的回答..
<br>checkip()是返回int类型的方法,它执行完毕后就是一个int 类型数值.所以完全可以的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
声明属性的是时候,前面不加private修饰符的情况下,默认是public的,public static void mian(string[] agrs)这个语法是java明文强制规定的,是整个程序的入口,代码不清晰....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.....无语中
main方法是用来调试程序的
你在运行程序的时候是从main方法的第一行开始到这个方法结束。
你在main方法中直接调用类的另一个方法是什么意思?
main方法是用来调试程序的
你在运行程序的时候是从main方法的第一行开始到这个方法结束。
你在main方法中直接调用类的另一个方法是什么意思?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(checkip()==0) 这里不能这么写应该这样写
int n = checkip();
if(n==0)
按照你的写法,是用方法跟0比较,方法和0又怎么能进行比较呢!这中间需要转换一下
int n = checkip();
if(n==0)
按照你的写法,是用方法跟0比较,方法和0又怎么能进行比较呢!这中间需要转换一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public void static main(String args[])这个东西缺一不可,都要写。不要问为什么。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询