抽象类的总结几点:
· 抽象类与普通类相比最大的不同只是在于抽象类之中存在有抽象方法,所以在抽象类之中依
然可以定义属性、构造方法等
· 抽象类声明时不允许使用 final,抽象类必须要求有子类,而 final 定义的类是不能够有子类的。
· 抽象类之中即使没有抽象方法,那么也不能够被直接实例
JAVA 中的主方法可以说创造了一个长的之最,其组成有许多的关键字,下面来分析每一个关键字:
· public:指的是公共的;
· static:使用 static 定义的方法必须由类名称调用;
· void:是一切的开始点,只要开始了就没的返回;
· main:是一个系统规定好的方法名称,只要是执行类,那么就找 main;
· String args[]:字符串对象数组,用于接收初始化参数。
java 中提供了八种包装类:byte(Byte)、short(Short)、int(Integer)、long(Long)、
float(Float)、double(Double)、boolean(Boolean)、char(Character)。
但是对于包装类而言,又可以将其分为两类:
· 对象型包装类:Boolean、Character;
· 数值型包装类(Number 的子类):Byte、Short、Integer、Long、Float、Double;
对于包装类而言,有两个最为重要的操作:
· 装箱:将基本数据类型变为包装类对象的形式,往往都使用各个包装类的构造方法;
· 拆箱:从包装类之中取出包含的基本数据类型的数据,都利用 Number 类中的方法;
所有的异常都属于 Throwable 的子类。而在 Throwable 下有两个子类:
· Error:指的是 JVM 出错,此时的程序还没有正常执行,这样的错误一般我们处理不了;
· Exception:指的是程序之中出现的错误(异常),用户可以进行处理。
Exception 是我们开发之中所能够处理异常的最大的总和。异常的最大父类。
为什么必须通过 start()方法才可以启动多线程呢?直接调用 run()为什么不可以?
java 程序本身是存在单继承局限的,如果说现在一个类里面已经继承了 Thread 类,那么这个类就
不能够在去继承其他的类了,那么为了解决这样的问题,在多线程的实现之中还提供有一种 Runnable
接口,利用接口来避免单继承的局限。
利用 Runnable 接口实现的多线程要比继承 Thread 类实现的多线程更加的方便,因为有效的避免了
单继承的局限,同时不管使用何种方式都要求其必须利用 Thread 类中的 start()方法启动多线程。
除了单继承的局限之外,在开发之中如果使用了 Runnable 接口还可以更加方便的表示出数据共享的概念。
TreeSet 依靠的是 Comparable 来区分重复数据;
HashSet 依靠的是 hashCode()、equals()来区分重复数据
Set 里面不允许保存重复数据。
问题一:关于 super 和 this 问题
· super 调用的是父类的方法或属性、this 调用的是本类的方法或属性;
· super 调用父类构造方法时必须要放在子类构造方法的首行,而 this()调用本类构造方法时,也必
须放在构造方法的首行,所以当调用构造时,“super()”与“this()”不能同时出现;
· this 存在有一个表示当前对象的概念,而 super 没有这样的概念
问题二:关于方法重载与方法覆写的区别?
· 方法重载(Overloading):在同一个类之中定义了方法名称相同,且参数的内容及个数不同的方
法时,没有任何的权限限制;
· 方法覆写(Override):在继承关系之中,子类定义了与父类相同的方法名称、参数类型及个数、
返回值,需要考虑权限问题,即:被覆写的方法不能拥有比父类更严格的访问控制权限。
面试题:请解释在 String 之中“==”和 equals()的区别?
· “==”:属于 Java 提供的关系运算符,主要进行对象的地址数值比较;
· “equals()”:属于 String 类中的一个方法,主要是进行字符串内容的比较。
在以后的开发之中,一定要使用 equals()进行字符串的比较
面试题:请解释 String 类对象两种实例化的区别?
· 构造方法:会产生两块堆内存空间,其中一块将成为垃圾,并且不会自动入池保存,用户可以通
过 intern()方法手工入池;
· 直接赋值:只会产生一块堆内存空间,可以自动入池保存
面试题:请问 Exception 和 RuntimeException 有那些区别呢?
· Exception 是 RuntimeException 的父类;
· Exception 定义的其他子类(异常)都要求进行强制性的处理,而 RuntimeException 可以由用户
选择性的进行处理。
面试题:请解释 enum 和 Enum 的区别?
· 利用 enum 关键字定义的枚举相当于使用一个类直接继承了 Enum 类;
面试题:关于 Thread 类与 Runnable 接口的区别?(请解释多线程两种实现方式的区别)
· Thread 类是 Runnable 接口的子类;
· 如果要想实现多线程,那么必须要有线程主体类,主体类可以继承 Thread 类或实现 Runnable
接口,但是实现接口可以有效的避免单继承局限;
· 利用 Runnable 实现的多线程类,可以更加方便的表示出数据共享的概念
面试题:请解释 String 与 StringBuffer 的区别?
· String 一旦声明不可改变,StringBuffer 的内容可以改变;
面试题:请解释 StringBuffer 与 StringBuilder 的区别?
· StringBuffer 类中定义的方法都是同步方法,而 StringBuilder 定义的方法都属于异步方法;
· StringBuffer 操作的数据更加安全但是性能较差,而 StringBuilder 在数据操作上缺乏安全性,可
是性能较高。
面试题:请问 GC 是什么?如何操作?
· GC 指的是垃圾收集器;
· GC 会由 JVM 不定期自动执行,或者直接调用 Runtime 类中的 gc()方法手工释放。
面试题:请解释 final、finally、finalize 的区别?
· final:是一个关键字,定义不能被继承的类、不能被覆写的方法、常量;
· finally:是异常处理的统一出口,关键字;
· finalize:是 Object 类的一个方法,用于执行对象回收前的处理操作。
面试题:请解释 Comparable 和 Comparator 的区别?
· java.lang.Comparable 是在类定义的时候默认实现好的接口,里面只有一个 compareTo()方法;
· java.util.Comparator 是需要单独定义一个比较规则,属于挽救功能的操作。
面试题:请解释 ArrayList、Vector 的区别?
· 这两个类都是 List 接口的子类;
· Vector 类是在 JDK 1.0 的时候提供的,里面所提供的操作方法都是同步方法,所以属于线程安全
的操作类;
· ArrayList 类是在 JDK 1.2 的时候提供的,里面所提供的方法都是异步操作方法,所以属于非线
程安全的操作类。
如果日后在开发之中,90%的情况下考虑的都是 ArrayList。
面试题:请解释 HashMap 与 Hashtable 的区别?
· HashMap 是在 JDK 1.2 的时候提供的,使用的是异步处理方式,所以属于非线程安全的操作,
同时在 HashMap 之中可以保存 null;
· Hashtable 是在 JDK 1.0 的时候提供的,使用的是同步处理方式,所以属于线程安全的操作,但
是在 Hashtable 里面不能够保存 null。
在实际的开发之中,HashMap 保存数据上由于没有限制,所以要更加方便一些,那么以后的开发之
中大部分的情况下都会优先选择 HashMap 子类操作。