码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础总结(一)

时间:2015-07-21 01:29:24      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

1. 面向对象的特征
面向对象的特征包括抽象、封装、继承和多态。

抽象就是忽略一个主题中与当前目标无关的某些方面,以便更加充分的注意到与当前目标有关的方面。抽象并不打算了解全部的问题,而只是其中的一部分,暂时不用考虑细节。抽象包括两个方面,第一是过程抽象,第二是数据抽象。

封装是把过程和数据包裹起来,对数据的访问只能通过已定义的接口。面向对象始于这个基本概念,即现实世界可以被描述为一系列完全自治、封装的对象。这个对象通过一个受保护的接口访问其他对象。
继承,继承是一种连接类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述性的方法,一个类可以从一个现有的类派生,新类继承了原始类的特性,新类称为子类或者派生类,原始类称为父类也叫基类。派生类可以从它的基类继承方法和实例变量,并且类可以增加或者修改新的方法,使其更适合特殊的需要。

多态,多态性是指允许不同类的对象对同一个消息做出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活、抽象、行为共享和代码共享的优势,很好的解决了应用程序中函数同名的问题。


2. Overload和Override有什么区别
 方法的重写overriding和重载Overloading是java多态性的不同表现。重写Overriding是父类和子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对他而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading).

3. abstract class 和 interface有什么区别?
 抽象类用于创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。接口是抽象类的变体。在接口中,所有方法都是抽象的。抽象类的子类为他们的父类中的所有抽象方法提供实现,否则他们也是抽象类。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

4. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用,对象的内容可以在被调用的方法中改变,但对象的引用是永远不会变的。

5. abstract的method是否可以同时是static,是否可以同时是native,是否可以是synchronized?
  都不能。
    abstract用来声明抽象的方法,抽象方法并没有方法类,不能被直接调用,必须在子类overriding后才能使用,所以访问被abstract修饰的方法依赖于具体的对象实例,而被static修饰的方法是被直接访问的,这就引发了逻辑中的冲突,同时还要注意,父类中是静态方法,子类中不能覆盖为非静态方法。
  native修饰的方法是本地方法,该方法的实现由非java语言实现,比如c语言,一般用于java与外界语言交互或者与操作系统交互,native可以和除abstract之外的所有java标识符连用,因为native方法是有实现体的,只不过这些实现体是由非java语言实现的,但是abstract却是显明的指定这个方法是没有实现体的。
  synchronized,用于防止多个线程同时调用一个对象的该方法,使用它的前提是该方法可以被对象直接调用的,显然和abstract不能同时连用。

6. 接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可继承实体类?
 接口可以继承接口。抽象类可以实现接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。

7. Java关键字注意点
  所有的java关键字都是小写的
  goto和const是保留关键字,在java中没有使用
  true,false,null不是严格意义上的关键字,而是文字常量
8. 数组
  数组的两种初始化方式:静态初始化和动态初始化
  动态初始化数组必须给出长度,否则将报"缺少数组维数"的错误
  动态初始化二维数组时,可以只指定第一维德长度而不指定第二维的
  当数组包含的元素是引用数据类型的时候,必须为每个元素实例化,否则在使用的时候会出现空指针异常。

9. float和double都不能进行精确运算。
  例如2.0-1.1并不等于0.9,因为计算机使用的二进制并不能准备的表示浮点数
  不能简单的使用四舍五入的方法解决上述问题
  可以使用BigDecimal类来解决这个问题。
  BigDecimal a1 = new BigDecimal(Double.toString(2.0));
  BigDecimal a2 = new BigDecimal(Double.toString(1.1));
  System.out.println(a1.subtract(a2).doubleValue());

10. 自增自减运算符陷阱

  main(String[] args){
    int j = 0;
    for(int i = 0; i < 100; i++){
      j = j ++;
    }
    System.out.println(j);//打印出来的结果是0,因为j = j++,jvm工作时,先运算j++然后将j自增之前的值赋给左侧的j
  }

11. 字符与字符串陷阱
  System.out.println("a" + "b");// ab, 字符串的拼接
  System.out.println(‘a‘ + ‘b‘);// 195, 字符a的ascii码加上b的ascii码
  System.out.println("a" + ‘b‘);// ab,字符b被转化成了字符串b

12. java中的异常处理机制的简单原理和应用
  java程序违反了java的语义规则时,java虚拟机就会将发生的错误表示为一个异常。违反语义规则包括两种情况。一种是java类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException.另外一种情况就是java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时使用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类.

13. finalize方法是在垃圾回收器删除对象之前对这个对象调用的一个方法.

14. 什么时候使用assert?
  通常在开发和测试时使用,在软件发布后关闭。

Java基础总结(一)

标签:

原文地址:http://www.cnblogs.com/byron0918/p/4663211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!