什么是静态方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是静态方法?相关的知识,希望对你有一定的参考价值。
什么是静态方法?什么时候用静态方法 ?
静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。
静态方法为类所有,可以通过对象来使用,也可以通过类来使用。
我们之前一直写的mian方法仔细看看,它就是一个静态方法
使用静态方法时,要注意:
静态方法可以调用同类中的其他成员,但不能直接调用非静态成员
如果希望静态方法中调用非静态成员,可以通过创建类的对象 ,然后通过对象来访问非静态变量。
静态方法同样不能直接调用非静态方法,但可以通过对象来访问非静态方法
例如,我创建一个类,里面有一个静态方法:
class Test
public static int z(int xx,int yy)
return xx+yy;
public int zz(int xx,int yy)
return xx+yy;
然后在含有main方法的类中使用这个类时,对与以上非静态和静态方法的引用方式是不同的,如下:
import Test;
public class mainClass
int sum;
public static void main(String args[])
sum=Test.z(1,2); //直接用 类.方法或者属性就可以使用该方法或属性。
System.out.println(sum);
Test t=new Test();
sum=t.zz(1,2); //因为zz不是静态方法,所以只能只能用Test类创建一个t对象,然后调用该对象的方法。
System.out.println(sum);
静态方法只能被静态方法调用
希望对您有所帮助!~ 参考技术B 静态方法,就是使用 static 关键字标识的方法。
比如
public class A
public static void Test()
这里的Test方法,就是静态方法。
什么时候用静态方法?
经常使用的方法,而且一上下文依赖性不强的方法。 参考技术C 在类的成员的类型或者返回值类型前面加上关键字static,就能将该成员定义为静态成员(static member).常量或类型声明会隐式地声明为静态成员,其他没有用static修饰的成员都是实例成员(instance member)或者称为非静态成员.
静态类的主要功能如下:
它们仅包含静态成员;
它们不能被实例化;
它们是密封的;
它们不能包含实例构造函数.
参考资料:http://blog.csdn.net/linoble/archive/2006/11/01/1360865.aspx
参考技术D 它们仅包含静态成员;它们不能被实例化;
它们是密封的;
它们不能包含实例构造函数.
说的很对,是这个样子的,希望大家一起努力,在c#界中作出一些优秀的作品....
看现在的形式....java的j2ee可能要没落了.....哈哈
java中为啥说静态方法先执行?
程序执行的顺序不是按书写顺序,从上往下执行吗?
1 不管是静态方法还是非静态方法,都需要调用后执行,其执行的次序和在类里声明的次序无关,区别是静态方法是“class.method"方式执行,非静态方法是"object.method"方式执行,即后者需要创建一个对象。2 静态成员变量(也称类变量)先于非静态成员变量初始化,静态成员变量在类第一次加载时初始化,所有对象共享一份静态成员变量,非静态成员变量则在对象创建时初始化追问
奥,再请教大侠,类一共要加载几次?
追答只加载一次,而且是懒加载的,第一次调用该类的时候加载(比如当调用该类的静态方法或者成员变量,new一个该类的对象的时候)。
具体的说,每一个类(.class)文件,都对应着一个Class对象,这个Class对象类似于一个模板,用于创建该类的对象。这个Class对象在第一次调用该类时创建并加载到java虚拟机中。
还是不理解,比如当调用该类的静态方法或者成员变量,new一个该类的对象的时候,这时候才加载?main方法要执行,首先就要把代码加载到内存啊
追答main方法执行的时候不是一次性加载的,是需要时才加载,main方法在调用一个方法或new 一个对象的时候,会首先检查是否加载过这个类(具体地说是从jvm的内存里检查是否存在这个类的Class对象),若没有加载过,则加载这个类(即生成该类的Class对象),静态成员变量和静态代码块会在第一次加载中执行;若加载过,则不重新加载。
换个角度想想,jvm怎么知道你需要哪些类呢?只有你调用了这个类,jvm才会从类路径classpath里去找这个类(.class),然后加载它,如果当前类路径找不到,就会抛出ClassNotFoundException。
相关的详细知识,可以去看下java教材中关于类加载机制的章节。
大侠,我不知道加载是什么意思,任何代码都必须是机器码然后加载到内存,才会执行的啊
追答是的,对于java虚拟机来说,机器码就是.class文件,每个.class文件被加载,就会在内存中产生一个Class对象,这个Class对象就像一个模板,你可以理解成一个模具,所有该类的对象都会从该模具中产生。
举个例子:
public Class A
static int i = 0;
static
System.out.println("静态代码块");
public static void main(String[] args)
A.i;
main方法中调用了类A的成员变量,此时类A未被加载,那么jvm就会从classpath中找到A.class文件,然后创建A.class对象,并初始化A的静态成员变量(这里是i)和执行A的静态代码块(这里会看到print语句执行),之后无论怎么调用A,这个静态代码块都不会执行,你可以多做几次实验看看。
A.class对象,你可以通过A.class语句获得,然后通过Class.newInstance()创建A的实例,这样和new A();的语句创建效果是一样的。
main方法中调用了类A的成员变量,此时类A未被加载。你的这句话我不懂,类A未被加载的话,main方法怎么会被执行?
追答1 调用前没有加载,调用时发现Class A没有加载,遂加载之
2 main方法开始时只是启动了一个java虚拟机,除了一些必要类库,其他类都不加载,目的主要是为了速度快。
这点我就不明白了,调用前没有加载的话,main方法会执行吗?相当于内存里面没有任何代码啊
追答jvm启动只会加载必要的核心类库,其中就有Class类和相关类加载器,然后其他的类会在需要的时候加载进来。
参考技术A 我想 :类的静态初始化块在加载类时先执行,此时还没有对象产生。创建对象时构造方法和非静态初始化块按先后执行。其它方法基本上是调用才执行。也有例外。 参考技术B 静态方法没有先执行class A
static
...
public static void a()...
public static String b()...
static
...
这类代码才会先执行
a() b()就是按照你书写的顺序执行的 啊 参考技术C 源文件和类文件你没有分清。
*.java和*.class追问
怎么这么说,请大侠指教一下
以上是关于什么是静态方法?的主要内容,如果未能解决你的问题,请参考以下文章