public class 动手动脑1 { public static void main(String [] args) { Foo obj =new Foo(); }}class Foo{ int value; public Foo(int initValue) { value = initValue; }}
该上述的代码错误,就是在Foo()这个类中的构造函数是有参数的构造函数。然后在主函数中调用的函数是无参的。所以会报错。
修改方法就是在Foo obj =new Foo()在括号内加入一个int类型范围内的数字。
2.
public class InitializeBlockClass { { field=200; } public int field=100; public InitializeBlockClass(int value) { this.field=value; } public InitializeBlockClass() { } public static void main(String[] args) { InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new InitializeBlockClass(300); System.out.println(obj.field); }}
运行结果是100 300
从运行结果得出,初始化规律为:初始化块和字段的初始值谁排在前面先执行谁,最后执行构造函数。
3.
class Root{ static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); }}class Mid extends Root{ static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); }}class Leaf extends Mid{ static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); }}public class TestStaticInitializeBlock{ public static void main(String[] args) { new Leaf(); }}
Mid继承Root,Leaf继承Mid。在首先运行各自的静态初始化。然后再依次运行各自的函数。
4.
public class 静态 { public double i=6.3; public static void main(String []args) { 静态 j=new 静态(); System.out.println(j.i); } }
运行结果是6.3