静态方法可以直接通过类名调用,无需实例化类的对象。 publicclassMainClass{staticclassStaticClass{publicStaticClass(){System.out.println("StaticClass Constructor");}}publicstaticvoidmain(String[]args){StaticClassstaticObj=createStaticObj();}publicstaticStaticClasscreateStaticObj(){returnnewStaticClass();}}...
然而,Java中也存在一种特殊类型的构造函数,即静态构造函数(static constructor)。 静态构造函数的定义 静态构造函数是一个类中的静态方法,用于初始化类的静态成员变量。和普通构造函数不同的是,静态构造函数没有参数,且在类加载时自动调用,只会被执行一次。 publicclassMyClass{static{// 静态构造函数的代码}} 1. ...
//父类publicclassStaticExample{ { System.out.println("***This is normal block***"); }static{ System.out.println("This is first static block"); }publicStaticExample(){ System.out.println("This is constructor"); }publicstaticStringstaticString="Static Variable";static{ System.out.println("...
System.out.println("myclass static"); } publicMyClass() { System.out.println("myclass constructor"); } } 输出结果为: 1 2 3 4 5 6 7 teststatic myclassstatic personstatic person Test test constructor person MyClass myclass constructor 为什么输出结果是这样的?我们来分析下这段代码的执行过程:...
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次【根据class加载原理 每个类加载一次 使用双亲委托加载】。
这个时候,我们分别打印一下DummyClass和 DummyClass2 的 Constructor 具体打印工具方法 privatestaticvoidprintConstructor(Constructor<?>[]cons){for(inti=0;i<cons.length;i++){System.out.println(cons[i]);}} 具体打印方法 privatevoidgetAndPrintConstructors(Class cls){Class<?>c1=cls;Constructor<?>[]con...
teststaticmyclassstaticpersonstaticpersonTesttestconstructorpersonMyClassmyclassconstructor 类似地,我们还是来想一下这段代码的具体执行过程。首先加载Test类,因此会执行Test类中的static块。接着执行new MyClass(),而MyClass类还没有被加载,因此需要加载MyClass类。在加载MyClass类的时候,发现MyClass类继承自Test类,...
Implicit super constructor is undefined for default constructor. Must define an explicit constructor 这个错误是很多开发者经常遇到的错误,错误原因就是找不到超类中的默认构造函数。 看下面的代码: 代码语言:javascript 复制 packagecc;publicclassSubextendsSuper{publicSub(String s){}publicstaticvoidmain(String[]...
static class Sub extends TestClassLoader { public static int B = A; } public static void main(String[] args) { System.out.println(Sub.B); } } • <clinit>()方法对于类和接口来说,并不是必须的,若类没有静态语句块,也没有对变量赋值操作,则不会生成<clinit>()方法。
packagecc;publicclassSubextendsSuper{publicSub(Strings){}publicstaticvoidmain(String[]args){Subsub=newSub();}}classSuper{Strings;publicSuper(Strings){this.s=s;}} 上面这段代码会报错: Implicit super constructor Super() is undefined. Must explicitly invoke another constructor。