Java常用核心笔记

来源:互联网 发布:网络捕鱼赌博游戏平台 编辑:程序博客网 时间:2024/06/03 08:28
Java常用核心笔记
*关键字static用于静态变量和静态方法,即设计它的两种情形:一是为特定域分配单一的存储空间,不要考虑需创建多少个对象,甚至不用创建对象;二是某个方法不与包含它的类的任何对象关联在一起,即不用创建对象也可以调用它。

*关键字final
表示它修饰的类、方法或变量不可被改变。

*关键字native
表明这个方法不是Java写的,但它是JVM针对只身平台实现的。

*关键字projected
只能在同一个包或子类中访问。

*关键字this
是指向调用对象本身的引用名,一种用法是:引用 类的隐藏数据域,如this.raduis=raduis;另一种用法是让构造方法调用同一个类的另一个构造方法,如:public Circle(){this(1.0);}

*关键字super
用于两种途径:一是调用父类的构造方法,必须出现在子类构造方法的第一行,二是调用父类的方法;

*父类的构造方法不被子类继承,只能被子类的构造方法用关键字super调用。

*构造方法可以调用重载的构造方法或它的父类的构造方法;如果它们没有被显式调用,编译器就会自动将super()作为构造方法的第一条语句。

*在任何情况下,构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。即当构造一个子类的对象时,子类构造方法会在完成自己的任务之前先调用父类的构造方法,并一直调用下去:这就是构造方法链。

*如果一个类要设计为扩展的,最好提供一个无参构造方法,因为子类的默认构造方法会自动调用父类的无参构造方法,父类没有无参构造方法时程序将不能编译。

*父类的静态方法可以直接调用,如果在子类重新定义,则父类的静态方法将被隐藏;

*方法覆盖
:这个方法必须使用相同的签名以及相同的返回值类型在子类中进行定义;

*每个子类的实例都是父类的实例:使用父类对象的地方都可以使用子类的对象--
多态(polymorphism)    
多态意味着父类型的变量可以引用子类型的对象。

*
动态绑定(dynamic binding)即调用从特殊到一般,也就是从对应的最底层子类开始匹配,到满足即可

*隐式转换(implicit casting)==向上转换(upcasting) 子类型->父类型 /显示转换(explicit casting)==向下转换(downcasting) 父类型->子类型
为了转换成功,必须确保要转换的对象是子类的一个实例,如果不是会产生一个运行异常
ClassCastException
例子:Object myObject=new Circle();
if(myObject instanceof Circle){
  System.out.println( ( (Circle)myObject).getArea() );
}
多态中一开始定义为父类型,这样是为了通用程序设计
对象成员访问运算附 ( . ) 优先于类型转换运算符,因此需要双括号;

*抽象类不能使用new 操作符来初始化,但仍可以定义它的构造方法,用于在子类的构造方法中调用,同时抽象类可以作为一种数据类型,比如:GeometricObject[] objects=new GeometricObject[10];objects[0]=new Circle();

*父类是具体的,子类也可以是抽象的,就像Object是具体的一样;

*接口(interface)是一种与类相似的结构,只包含常量和抽象方法,用于指明多个对象的共同行为,即接口规定了行为,具体功能由具体的子类自己实现。

*接口中所有的数据域都是public final static,所有的方法都是public abstract,所有java 允许忽略这些修饰符。

*Java只允许为类的扩展做
单一继承,但是允许使用接口做多重扩展,同时也可以继承多个接口

*接口可以定义不相关类共有的父类型,比类更加灵活,适用于
弱关系建模(weak is-a relationship)

*比较运算符 == 用来比较两个基本类型的值是否相等,或者判断两个对象是否具有相同的引用,而

*Object类中的equals方法的默认实现是:
public boolean equeals(Object obj){
  return (this==obj);
}
这里的 == 运算符检测两个引用变量是否指向同一个对象.
equals比较两个对象的内容
如果测试两个简单类型的数值是否相等,则一定要使用==;
如果需要比较两个引用变量对象的数值是否指向同一个对象,使用==;
如果比较两个引用变量对象的值是否相等,则用对象的equals()方法来比较;

*package java.lang的Comparable接口
public interface Comparable{
  public int compareTo(Object o);
}
小于、等于或大于给定对象o时,分别返回负整数、0、正整数.
*由于Object类中没有定义compareTo方法,强烈建议compareTo应该与equals保持一致,即确保当且仅当Object1.equal(Object2)为true时Object1.compareTo(Object2)==0成立。

*package java.lang的Cloneable接口的定义如下:
public interface Cloneable{   } //一个带空的接口称为标记接口(marker interface),它用来表示一个类拥有某些特定的属性。所以实现Cloneable接口的类标记为可克隆的,而它的对象可以使用在Object类中定义的clone()方法克隆。

*Object类中定义的
clone方法
protected native Object clone() throws CloneNotSuppertedException;
其中native关键字表明它是JVM针对自身平台实现的;protected关键字限定方法只能在同一个包内或在其子类中访问,所以在使用克隆方法时,我们必须覆盖它,并将它的可视性修饰符改为public。

*克隆得到的对象与原对象是:内容相同的不同对象;另外:Object类中的clone方法将原始对象的每个
数据域复制给目标对象。如果该数据域是基本类型,则复制它的值;如果该数据域是对象,则复制它的引用,此时成为浅复制,如果要实现深复制,可以在调用super.clone()之后用自定制的克隆操作来覆盖clone方法。
如:calendar1=(Calendar)calendar.clone();//注意强制类型转换
calendar1和calendar是内容相同的不同对象;
Object类中的clone方法:1、如数据域是基本类型,则复制它的值;2、如数据域是对象,则复制它的引用;---浅复制

*Object类中的toString()方法的签名:
public String toString()
默认情况下,返回一个该对象所属的类名+@+该对象的十六进制形式的内存地址组成的字符串
System.out.println(object)等同于System.out.println(object.toString())表示它修饰的类、方法或变量不可被改变。

*Serializable接口是一种标记性接口,即它没有方法,实现这个接口可以启动Java的序列化机制,自动完成存储对象数组的过程。

*Java提供一个内在机制完成写对象的过程,这过程称为:对象序列化(Object serialization),它是在ObjectOutputStream中实现的;

*与此相反,读取对象的过程称为:对象反序列化(Object deserialization),它是在ObjectInputStream类中实现的;

*许多Java API中的类都实现了Serializable接口,如工具类Java.util.Date以及所有Swing GUI 组件都实现了Serializable接口;

*试图存储一个不支持Serializable接口的对象会引起一个NotSerializableException异常

*当存储一个可序列化对象时,会对该对象的类进行编码:包括类名、类的签名、对象实例变量的值以及从初始对象引用的任何其他对象的闭包,但不存储对象静态变量的值。



1 0