Java 中易错点

1.关于java classloader的说法:

    1.Java默认提供的三个ClassLoader是BootStrap ClassLoader, Extension ClassLoader,App ClassLoader
    
    2.ClassLoader使用的是双亲委托模型来搜索类
    
    3.ClassLoader就是用来动态加载class文件到内存当中用的

 ClassLoader是一个抽象类,我们用它的实例对象来装载类 ,它负责将 Java 字节码装载到 JVM 中 , 并使其成为 JVM 一部分。 JVM 的类动态装载技术能够在运行时刻动态地加载或者替换系统的某些功能模块,而不影响系统其他功能模块的正常运行。一般是通过类名读入一个class文件来装载这个类,(其它加载形式暂时没有研究过)。

2.当把来自客户机的HTTP请求委托给servlet时,会调用HttpServlet的 service方法

3.HashMap可以插入null的key或value,插入的时候,检查是否已经存在相同的key,如果不存在,则直接插入,如果存在,则用新的value替换旧的value,

4.通过JDBC链接数据库:

    1.载入JDBC驱动程序
    2.建立链接
    3.执行查询或者更新
    4.关闭链接

5.Java支持多继承吗?

    Java中类不支持多继承,只支持单继承(即一个类只有一个父类).但
    
    是Java中的接口支持多继承,,即一个子接口可以有多个接口.(接口
    
    的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子
    
    接口扩展了多个功能,当类实现接口时,类就拓展了相应的功能)

6.重载与重写:

    重载:(@Overload),出现一个类中,方法名一致,方法形参列表  
    不同。其他的条件(比如返回值)都不能判定重载。    
    重载属于编译期多态的表现形式,  
    重载就是利用参数的静态类型,在编译期确定方法调用版本.
    
    重写(覆盖 @Override,三大注释之一),出现在子父类中,判定方法“两同两小一大”:
        两同:方法名、形参列表
        两小:抛出的异常、返回值
        一大:访问修饰符
但是注意了,重写只能出现了可见的实例方法中,也就是private不存在重写,同时static修饰的方法也不存在重写,而是隐藏!!!
重载属于运行期多态的表现形式,重写是利用调用者的实际类型来判定方法版本。

    方法重写:
        在子类中,出现和父类中一模一样的方法声明的现象。
    方法重载:
        同一个类中,出现的方法名相同,参数列表不同的现象。
    方法重载能改变返回值类型,因为它和返回值类型无关。
    Override:方法重写
    Overload:方法重载

7.关于修饰符混用的说法:

    abstract不能与final并列修饰同一个类
    abstract类中不应该有private的成员  
    abstract方法必须在abstract类或接口中

8.JDK中提供的java、javac、jar等开发工具也是用Java编写的。

9.默认RMI采用的是TCP/IP通信协议

10.java用监听器机制实现了进程之间的同步执行

11.java多线程实现:

    Java多线程实现方式主要有四种:
        继承Thread类、
        实现Runnable接口、
        实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、
        Future实现有返回结果的多线程。
其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。

12.静态变量static在不同的实例中地址是否一样?他们储存在什么区域?:

    static表示的是静态的意思,所以它修饰的变量或方法都是共享的。
 而且静态变量或方法是在类被创建的时候加载,并且只会加载一次,
 所以不管整个过程如何运行,static的地址是不会变的,而且是储存
 在全局区的,毕竟这样才可以共享嘛

非静态方法只能通过实例对象来调用,不能直接通过类名调用。静态方法(static)才能通过类名直接调用.

13.DBMS 中实现事务持久性的子系统是恢复管理子系统

DBMS中事务有四个特性:
    1.原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现);
    
    2.一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务);
    
    3.隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现);
    
    4.持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)

14.关于HashMap与HashTable的说法:

1.两者都是用key-value方式获取数据.
2.HashMap不是同步的,而Hashtable是同步的
3.迭代HashMap采用快速迭代机制,而Hashtable不是

快速失败(Fail-Fast)机制:对于线程不安全的集合对象的迭代器,如果在使用迭代器的过程中有其他线程修改了集合对象结构或者元素数量,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。
迭代 HashMap 采用快速失败机制,而 HashTable 不是,因为 HashTable 是线程安全的。

15.抽象类和接口:

相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法
不同点:1、设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。
               抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。
            2、使用不同:
             (1)接口只能包含抽象方法,抽象类可以包含普通方法。
             (2)接口里不能定义静态方法,抽象类可以。
             (3)接口只能定义静态常量属性不能定义普通属性,抽象类可以。
             (4)接口不包含构造器,抽象类可以(不是用于创建对象而是让子类完成初始化)。
             (5)接口里不能包含初始化块,抽象类完全可以。
             (6)接口多继承,抽象类但继承(只能有一个直接父类)。
             
总结:接口所有方法全是抽象方法只能 public abstract修饰 (默认public abstract修饰 ),属性默认public static final修饰。
             抽象类除了包含抽象方法外与普通类无区别。 

16.基本数据类型的运算:

基本数据类型的运算,会自动向上转型。boolean不可以和其他基本数据类型相互转换。
    byte->short,char -> int -> long      
    float -> double
    int -> float
    long -> double

Eg:

对于java类型变量char c,short s,float f,double d,表达式c*s+f+d的结果类型为 double

17.super的作用:

1.用来访问父类被隐藏的非私有成员变量
2.用来调用父类中被重写的方法
3.用来调用父类的构造函数

18.Java的种类:

 (a)内嵌于Web文件中,由浏览器来观看的_Applet

(b)可独立运行的 Application

(c)服务器端的 Servlets

19.在Web应用程序中,Web容器负责将HTTP请求转换为HttpServletRequest对象.

20.JSP分页代码中,先取总记录数,得到总页数,最后显示本页的数据。

21.Java 提供的事件处理模型是一种人机交互模型。它有三个基本要素:

1.事件源:即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;

2.事件对象;事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;

3.事件监听器:负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;

22.ArrayList和Vector主要区别:

Vector与ArrayList一样,也是通过数组实现的,不同的是Vector支持线程的同步

1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。 
2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50%  ,这样,ArrayList就有利于节约内存空间。 
      如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。

拓展知识:

1. Hashtable & HashMap 
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。


2. ArrayList & LinkedList

ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:   
       从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

你可能感兴趣的:(Java 中易错点)