java手记---类

一个类的实现:
(1)当装载这个类的时候,实际上是调用的类的static方法或者访问类的static字段的时候,java解释器会搜寻classpath来找到这个类
(2)装载类后,会对static数据进行初始化。
(3)当用new创建一个新对象时,会在堆中为对象分配足够的内存
(4)内存先被清零 ,自动把对象的数据成员赋上缺省值。变量为0或对应的true或’/u0000’,引用赋为null
(5)执行定义成员数据的初始化
(6)执行构造函数

////////////////////////////对象就是数据+方法。

方法一 /////////////这样构造类
class person1 /////////////但不能这样声明 public class
person1
{ ///////////////这样写会出错 。
String name;
int age;
}
public class person
{
public static void main(String[]
args)/////////main函数的参数必须这样写不能省略args,当然可以使用其他的变量
{ person1 test = new person1();
}
}

方法二///////////////////这样也可以
public class person
{ String name;
int age;
public static void main(String[] args)
{ person test = new person();
}
}

class person //////////////class 前的public 可以不写。
{
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”);
}
}
}

///////////////////在构造函数中如果要调用其他构造函数,就要把其他的构造函数放在最前面.
///////////////////如果调用自身的构造函数可以这样写:
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
37
38
39
40
41
42
43
44
45
46
47
48
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但继承的时候
D:/Javaworkspace/test/testNow/Init.java
class SupClass
{
public SupClass(int id)
{
System.out.println(id+"SupClass is construct!");
}
}
public class Init extends SupClass
{
static int i;////////这样写在super(i)处就不会出错。
public Init()
{
super(i);
i=0;
}
}
/////变化一下:
public class Init extends SupClass
{
int i;
public Init()
{
super(i);//这里就会报错。这是因为先初始化static变量,后进行自身类的构造函数调用,后调用基类构造函数,再进行
i=0;  //自身类中成员变量的初始化。
}
}
//////////再写一个类
public class ObjOrPri {
SupClass a= new SupClass(i);//这里会报错,这就意味着成员对象是顺序进行的初始化。
int i;
ObjOrPri()
{
System.out.println(a);
}
}
///////////如果改为这样
public class ObjOrPri {
int i;
SupClass a= new SupClass(i);/////这里就不会报错。
ObjOrPri()
{
System.out.println(a);
}
}

~~~~~~~~~~~
根基类的static先被初始化。然后到子类的构造函数,在到基类的构造函数。

每一个类都有自己的方法。超类的和子类的方法名必须相同。但是超类可以不实现那个方法。
最后在某一个类中用一个函数来用超类的引用当作参数。调用和子类同名的函数叫做多态。
这样做的好处是如果超类和子类都存放在同一个数组里,这样就可以节省代码。

抽象类中不需要每一个方法都是抽象的。但至少有一个。
static和abstract关键字好像不能同时使用。

清除类的时候先从派生类开始,然后才是超类。

如果在构造函数中调用多态,那么将会调用被覆盖的函数。

ClassCastException运行时类型检查异常。

不是后绑定就不是多态。

  • 本文作者: 帐前卒
  • 本文链接: http://chillyc.info/2006/979042/
  • 版权声明: 本博客所有文章除特别声明外,只能复制超链接地址,且必须注明出处!