Java开发中该注意的一些东西

[来源] 达内    [编辑] 达内   [时间]2013-03-27

Java开发中该注意的一些东西

  java的类型自动提升规则

  1、所有byte,short,char型的值将被提升到int型;

  2、如果一个操作数为long型,计算结果就是long型;

  3、如果一个操作数是float型,计算结果就是float型;

  4、如果一个操作数是double型,计算结果就是double型。

  我们不能把任何方法体内的变量声明为静态,例如下面这样是不行的

  fun{

  static int i = 0;

  }

  1、在静态的方法里只能直接调用同类中其他静态成员(包括变量和方法),而不能直接访问类中的非静态成员,这是因为,对于非静态成员,先要创建类的实例对象后才可使用,而静态成员在使用前是不需要实例化的;

  2、静态方法不能以任何形式引用this或super关键字;

  3、main()方法是静态的,因此jvm在执行main方法时,不创建main方法所在的类的实例对象,因此在main方法中,不能直接访问该类中的非静态成员。

  1.final标记的类不能被继承;

  2.其标记的方法不能被子类重写;

  3.其标记的变量即变成常量,只能赋值一次,但这个常量也只能在这个类内部使用,不能在类的外部使用,且赋值只能在声明的时候显式赋值或在构造方法中赋值,构造方法里不含返回值的概念是不同于“void”的,对于"public void example()"这样的写法就不再是构造方法了,而变成了普通方法,很多人都会犯这种错,在定义构造方法时加了void,结果这个方法就不再自动调用了。

  1.java只支持单继承,不允许单继承,但一个类可以被多个类继承;

  2.可以有多重继承,即一个类可以继承某个类的的子类,如B继承了A,C又可以继承B,那么C也间接继承了A;

  3.子类继承父类所有的成员变量和成员方法,但不继承父类的的构造方法,在子类的构造方法中,可以使用语句super调用父类的构造方法;

  4.如果子类的构造方法中没有显式地调用父类构造方法,也没有使用this关键字调用重 载的其他构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法,如果父类没有无参数的构造方法,则编译出错。

  在子类中可以根据需要对从父类中继承来的方法进行改造——方法的覆盖(也叫重写)。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型 子类想调用父类的被覆盖的方法,可以用super.方法()的格式。

  注意:

  覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限,如:父类中的方法是public的,子类的方法就不能是private的,如果子类转换成父类,那么子类中新定义的方法不可用(编译不通过)。如果子类重写了父类的方法,那么子类方法可用。如果父类方法没有被重 写,则可用 。

  Object类

  Java中有一个比较特殊的类,就是Object类,它是所有类的父类,如果一个类没有使用Extends关键字明确标识继承另外一个类,那么这个类就 默认继承Object类。所以、Object类是所有类的父类, Object类的方法适用于所有类。

  两种多态方式一般来说,多态主要是存在两种类型:编译时的多态和运行时的多态。

  1、编译时的多态主要是通过函数重载来实现的。所谓函数重载是指保持函数名不变,主要通过更改函数形参的个数以及形参的类型来定义出多个同名函数来实现对多种类型数据的逻辑处理。这种类型的多态关系是编译器在编译阶段就已经在函数调用的地方确定的,因而运行过程中速度较快,但功能比较局限。

  2、运行时的多态在不同的语言中拥有不同的实现方案。C++通过虚函数的晚捆绑来实现,而Java通过面向接口编程和面向抽象编程来实现动态调用相应的函数实现。但归根结点,这些语言都是通过将多种特殊实现的类抽象为一个泛化类来实现运行多态。

  例如:

  A是B的父类 A S=NEW B(); 如果父类有个方法叫Amethod(),子类也有一个,那么如果S.amethod的话,就会调用子 类的Amethod(),而不是父类的,父类有若干个子类的,而A S=NEW B(); A S=NEW C(); A

  S=NEW D(); 等等就实现了多态!

  抽象方法必须用abstract关键字修饰,任何带有抽象方法的类都必须声明为抽象类。

  抽象类的定义规则:

  1.抽象类必须用abstract关键字来定义,抽象方法也必须用abstract关键字来定义

  2.抽象类不能被实例化,也就是说不能用关键字new去产生对象

  3.抽象方法只需声明无需实现

  4.含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则,这个子类还是抽象类。

  注意:含有抽象方法的类一定是抽象类,抽象类中的某个方法不一定是抽象方法。

  1、在接口中,成员只能是public类型。当没有public修饰时,依然是public访问范围

  2、接口中的变量默认是用public static final 标识的,所以,接口中定义的变量都是全局静态变量

  3、我们可以定义一个新的接口,用extends关键字去继承一个已有的接口;也可以定义一个类,用implements去实现一个接口中的所有方法;还可以去定义一个抽象类用implements关键字去实现接口中的部分方法。

  接口的定义特点:

  1. 实现一个接口就是要实现接口的所有方法(抽象类除外)

  2. 接口中的方法都是抽象的

  3. 多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口

  注意:

  import语句必须先于所有类声明。在调用类时,使用类的全名,即包+类的形式,可以不用import引入。在同一包中的类可以互相引用,无需import语句。java.lang包是自动导入的。父包与子包之间,能从语意上表示某种血缘关系,如p1.p2.*和p1.p2.p3.*,但在使用上,即使父包调用子包中的类,也得使用子包的全名,也就是说我们import包中的类,却不能把子包的类也引入。

  我们处理异常时,常用的三个方法是:

  System.out.println(e);

  System.out.println(e.getMessage());

  e.printStackTrace();

资源下载