一、
public class Test{ public static void main(String[] args){ Foo obj1=new Foo(); } } class Foo{ int value; public Foo(int initVaule){ vaule=initVaule; } }
如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法
同一个类可以有多个构造函数,多个构造函数之间通过参数来区分,这是方法重载的一个实例。
构造函数之间可以相互调用
二、
public class aca {
public int field=100;
{
field=200;
}
public aca(int value) {
this.field=value;
}
public aca() {
}
public static void main(String args[]) {
aca obj=new aca();
System.out.println(obj.field);
obj=new aca(300);
System.out.println(obj.field);
}
}
当调用默认构造方法时,调用初始化体进行初始化字段;
当调用有参构造方法时,调用有参构造方法进行字段初始化;
三、
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(); } }
结果:
1、静态初始化块只执行一次。
2、创建子类型的对象时,也会导致父类型的静态初始化块的执行
四、
静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。
五、
public class sum { public static int a=0; int c; public sum(int cc) { c=cc; a++; } public int get() { return a; } } public class cxc { public static void main(String[] args) { sum one=new sum(1); sum tow=new sum(2); sum three=new sum(3); System.out.println(one.get()); } }
统计创建类的个数;
原文:https://www.cnblogs.com/KYin/p/9825998.html