#一个类的实现:
(1)当装载这个类的时候,实际上是调用的类的 static 方法或者访问类的 static 字段的时候,java 解释器会搜寻 classpath 来找到这个类
(2)装载类后,会对 static 数据进行初始化。
(3)当用 new 创建一个新对象时,会在堆中为对象分配足够的内存
(4)内存先被清零 ,自动把对象的数据成员赋上缺省值。变量为 0 或对应的 true 或’/u0000’,引用赋为 null
(5)执行定义成员数据的初始化
(6)执行构造函数
#方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class person1 { String name; int age; } public class person { public static void main(String[] args) { person1 test = new person1(); } }
|
#方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class person { String name; int age; public static void main(String[] args) { person test = new person(); } }
class person { public static void main(String[] args) { .......................................... } }
class person1 { String name; int age; void test() { in t = new in(); t.test1(); System.out.println("person1"); } class in { void test1() { System.out.println("in"); } } }
|
在构造函数中如果要调用其他构造函数,就要把其他的构造函数放在最前面.
如果调用自身的构造函数可以这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Flower(String s) { System.out.println("String create");
} Flower(int i) { System.out.println("int create"); } Flower(String s,int i) { this(i); System.out.println("String and int create");
}
|
但继承的时候
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class SupClass { public SupClass(int id) { System.out.println(id+"SupClass is construct!"); } } public class Init extends SupClass { static int i; public Init() { super(i); i=0; } }
public class Init extends SupClass { int i; public Init() { super(i); i=0; } }
public class ObjOrPri { SupClass a= new SupClass(i); int i;
ObjOrPri() { System.out.println(a); } }
|
如果改为这样
1 2 3 4 5 6 7 8
| public class ObjOrPri { int i; SupClass a= new SupClass(i); ObjOrPri() { System.out.println(a); } }
|
根基类的static先被初始化。然后到子类的构造函数,在到基类的构造函数。
每一个类都有自己的方法。超类的和子类的方法名必须相同。但是超类可以不实现那个方法。
最后在某一个类中用一个函数来用超类的引用当作参数。调用和子类同名的函数叫做多态。
这样做的好处是如果超类和子类都存放在同一个数组里,这样就可以节省代码。
抽象类中不需要每一个方法都是抽象的。但至少有一个。
static和abstract关键字好像不能同时使用。
清除类的时候先从派生类开始,然后才是超类。
如果在构造函数中调用多态,那么将会调用被覆盖的函数。
ClassCastException运行时类型检查异常。
不是后绑定就不是多态。