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运行时类型检查异常。
不是后绑定就不是多态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值