问一个小问题,就是在java类这一章节里,调用一个方法,有两种形式:
实例方法:对象名.方法名
类方法:类名.方法名
但是经常也会看到没有static关键字声明的实例方法也被这样调用:
类名.方法名
请问这对不对?是不是java里边允许这样调用?
实例方法:对象名.方法名
类方法:类名.方法名
但是经常也会看到没有static关键字声明的实例方法也被这样调用:
类名.方法名
请问这对不对?是不是java里边允许这样调用?
解决方案 »
- 为什么这个简单的递归算法在NetBeans里无法编译,直接用命令可以
- Exception in thread "main" java.lang.NoClassDefFoundError: com/adventnet/afp/log/AbstractLogger
- JDK安装
- 关于panel=new JPanel(); JPanel panel=new JPanel();用法
- java 字符编码
- 一个关于Japplet在html中显示的问题?
- 一个关于将PDF文件转换为txt格式的问题??
- 今天看视频的第一个项目 各种各样的Exception啊 求解
- 最最最最最最 基础的问题了
- 如何实现%%文件读取
- 200分求教APACHE和TOMCAT整合过程中的问题
- 一个错误不能解决(送分)
当你在java文件头部没有声明引用的时候
可以直接使用
java.util.ArrayList list =new java.util.ArrayList();
import java.util.ArrayList;只是为编译器提供语法,并不是动态调用
对象名.方法名
进行访问;
但是
类名.方法名
这种方式只可以访问类方法,因为类方法是在该类在加载的时候就加载到内存可以进行访问了;而实例方法是动态加载的,如果用<类名.方法名>进行访问就很可能导致jvm找不到该方法,因此这样的访问就是被禁止的。
///////////////////////////////////////////
public class TestClass
{
static int Nstatic = 0;
public static void main()
{
TestClass tc = new TestClass();
tc.test();
System.out.println(Nstatic);
}
public void test()
{
TestClass.Nstatic = 10;
}
}
这样是错误的
/////////////////////////////////////////////////
public class TestClass
{
int Nstatic = 0;
public static void main()
{
TestClass tc = new TestClass();
tc.test();
System.out.println(Nstatic);
}
public void test()
{
TestClass.Nstatic = 10;
}
}
比如经常用的System.out.print()
其中out的定义是: public static final PrintStream out,它是一个静态的成员变量。
还有类Math下面的方法基本上都是静态的,你不必Math t = new Math(); t.sin(a)这样实例Math,然后再调用它的方法。你可以直接Math.sin(a). 而且System,Math类是java.lang下面的一级库类,你不需要自己import就可以直接调用了,因为JVM默认就import他们了。