这是什么啊

4.java抽象类和克隆

*抽象类中不一定有抽象方法,目的可能是为了防止创建对象。也可以有普通函数。
*只有不为空的引用才能用equals比较,对象p1==p2永远比较的是引用地址
**当用户声明字符串常量时,则产生堆对象并将字符串存放到常量池,如果第二次使用此字符串,则不会被重新创建,直接在全局区调用
*字符串存放在常量池,堆内存中存放张三的地址
*String str=new String("张三");创建的是张三字符串的副本,即在数据全局区中又创建了一个张三
**在字符串类中,equals方法比较的是内容是否相同
*object类中的equals方法是比较对象的引用地址是否相同
*重写object类的equals方法和hashcode
*重写hashcode方法一般编写格式,将所有成员变量的hashcode按位异或name.hasCode()^age.hasCode() 注意,每一个对象的hashcode都不一样,所以不重写hashcode方法,那么所有对象都不相同,无法比较
*基本数据类型无函数方法,包装类可以
*instanceof 判断某对象是否属于某个类或他的父类
**getClass()返回当前对象的类,类前面加class,类型为Class
**getClass().getName()表示返回当前类名
*System.out.println()此输出语句自动添加toString()方法,toString()方法的重写,目的是实现自动输出,完成成员变量信息的输出
*finallize()自动调用, 在释放一个实例和回收内存空间之前,Java 垃圾回收器会调用实例各自的 finalize() 方法,
 从而该实例有机会释放所持有的资源。虽然可以保证 finalize() 会在回收内存空间之前被调用,但是没有指定的顺序和时间
*什么是垃圾:在堆内存中没有任何引用地址指向的堆对象
*System.gc();调用垃圾回收器,调用之后不一定什么时候扫
~~~~~~~~下午~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
***多态的体现:1父类引用指向子类对象2.接口的多种实现方法3.方法的重写
*向上转型:目的是为了通用,子类转父类,转后不能调用子类特有的方法
**子父类中有共同的非静态方法和属性,向上转型的对象调用该方法时,执行的是子类的方法
*向下转型:目的是调用子类特有方法父类转子类,需要强制转换,前提是该父类对象以前是向上转型的对象,也就是说狗转动物转狗
**对于静态方法,编译运行都看左边,成员变量编译运行都看左边(看左边的意思是看看父类有没有这个方法)
***总结论,除了实例方法(子父类有同名的方法的)编译看左边,运行看右边,其他任何情况下都是编译看左边,运行看左边。
~~~~~~~~抽象类~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*有抽象方法的类必须声明为抽象类,抽象方法必须被实现重写
*抽象类不能被实例化,不能new,可以没抽象方法
*继承抽象类的必须实现所有方法,否则子类必须是抽象类,接口也是一样的
*抽象类中可以有普通方法和静态方法,抽象类的构造方法功能是被子类调用
**总结论抽象类除了不能被实例化之外,其他功能和不同类没区别
抽象类:使用abstract关键字修饰的类.
 抽象类的特点:
  A:抽象类不能被实例化
  C:含有抽象方法的类一定是抽象类.抽象方法的特点:没有方法体.即不能有{},即使其中不写任何代码也不行
  D:一个类继承了抽象类,则必须实现抽象类中的所有抽象方法,否则子类也必须是抽象类
  F:抽象类可以有构造方法,用于子类实例化时调用
  B:对方法没要求可有可无
  G:构造 方法不能是抽象方法
  H:静态 方法不能是抽象方法
  I:私有 方法不能是抽象方法
  J:final方法不能是抽象的.
~~~~~~~~~final~~~~~~~~~~
*成员变量都有默认值,但成员常量没有默认值.
 给成员常量赋值的特点:
  A:声明成员常量时直接赋初值
  B:不能在普通方法中给final类型的常量赋初值,因为用户可以不调用这个方法,那么就没有机会给常量赋初值了
  C:成员常量可以在初始化、构造函数、构造代码块中赋初始值
   final关键字的用法:
  B:修饰类:类不能被继承
  C:修饰方法:方法不能被重写.
  D:修饰对象,则对象的引用地址是常量,那么不能为这个变量二次赋值.
  final Person p1=new Person();
  p1=new Person();//错误
*接口 interface方法定义时自动加public abstract ,实现接口 implements
*先继承后实现,接口中只能使用public和default修饰成员
*public static final 定义变量一个接口可以同时继承多个接口
*接口和抽象类的区别
  *接口中只有静态常量和抽象方法,抽象类都可以有
  *抽象类可以继承和实现,接口只能实现接口,不能继承
  *接口能多继承,抽象类不能多继承
*想让当前对象能够克隆,则当前对象必须完成对Cloneable接口的实现
*clone()与new的区别,比new效率高,,clone后返回的对象是object对象,应向下强制转换
*(浅克隆):没有引用对象要想clone,必须当前类实现Cloneable接口,实现其clone方法,但此接口无方法,叫做标示接口,但Object类有clone方法,所以要重写object的clone方法目的是保护clone方法不被乱用
*(深克隆):克隆某对象后,将其所属的成员对象也克隆
class Person implements Cloneable{
  String name;
  int age;
 public Person(String name,int age){
  this.name=name;
  this.age=age;
 }
 public Object clone()
            throws CloneNotSupportedException{
 return super.clone();
 }
}
class Demo {
 public static void main(String []a)throws Exception{
  Person p=new Person("chenyang",12);
  Person p1=(Person)p.clone();
 }
 
}
posted @ 2015-12-03 22:17  陈旭缘  阅读(511)  评论(0编辑  收藏  举报
这是什么