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");
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但继承的时候
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运行时类型检查异常。
不是后绑定就不是多态。

你可能感兴趣的:(java手记---类)