【Java基础总结】-Java笔试易错点 第二篇

  • 精度小于int的数值运算的时候都会被自动转换为int后进行计算,注意笔试题中byte和short类型数据相加减时的类型转换问题;
  • java中静态属性和静态方法可以被继承,静态属性不可以被重写,不能实现多态。
  • 包未达到终点不可能重组,但可能成为碎片
  • final修饰的成员变量为基本数据类型是,在赋值之后无法改变。当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的。
  • final修饰的成员变量在赋值时可以有三种方式:
    1、在声明时直接赋值。
    2、在构造器中赋值。
    3、在初始代码块中进行赋值。
  • servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
  • 子接口可以同时继承多个父接口,也可以被多实现,因为接口中的方法都是抽象的,这些方法都被实现的类所实现,即使多个父接口中有同名的方法,在调用这些方法时调用的时子类的中被实现的方法,不存在歧义;
    如果Child是interface,那么Child可以同时extends Parent1,Parent2等多个interface
  • 子类继承父类,在新建子类对象实例时,默认的是调用父类的无参构造器,如果子类构造器中显式的通过super()的方式时,则调用父类有参构造器。
  • 只有new和反射用到了构造方法
  • interface中只允许public static final;
  • 关于try-catch-finally的执行顺序总结:
    try语句部分先执行,若其中包含return 语句,则保存返回值,此时保存的返回值就是最后方法要返回的,不管该返回值中的变量b 在finally语句块中是否再被修改,并在执行完finally语句后,将方法的返回值返回,若在finally语句块中也存在return,则此时直接作为该方法的返回值返回,不会再调用原try语句块中的方法了。

    public class Demo {
        public static void main(String args[]) {
            int num = 10;
            System.out.println(test(num));  //print 21
        }
    
        public static int test(int b) {
            try {
                b += 10;
                return ++b;         // return 21
            } catch (Exception e2) {
            } finally {
                b += 10;
                System.out.println(b + "--");   //print 31--
                // return b+2;      // return 33
            }
            return b;
        }
    }
    
  • 在集合框架中,线程安全有以下几个:喂(V代表vector),SHE(分别代表stack hashtable Enumeration)
    非集合框架外加 strungbuffer
  • 1、abstract类不能用来创建abstract类的对象,因为抽象类无法直接被实例化;
    2、final类不能用来派生子类,因为用final修饰的类不能被继承;
    3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
    4、类中有abstract方法必须用abstract修饰该类,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。
  • this()和super()为构造方法,作用是在JVM堆中构建出一个对象。因此避免多次创建对象,同一个方法内只能调用一次this()或super()。同时为了避免操作对象时对象还未构建成功,需要this()和super()的调用在第一行实现以此来创建对象,防止异常。
  • 这个关键字常见的坑:
    true、false、null都不是关键字
    goto、const、是保留的关键字
    Servlet的生命周期可以分为初始化阶段,运行阶段和销毁阶段三个阶段
  • 关于JDBC编程的常考点:
    Statement 每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.

    PreparedStatement是预编译的,使用PreparedStatement有几个好处:
    a. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。
    b. 安全性好,有效防止Sql注入等问题。
    c. 对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;
    d. 代码的可读性和可维护性。
    CallableStatement接口扩展 PreparedStatement,用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement 接口还具有对 PreparedStatement 接口提供的输入参数的支持。

  • 关于线程的考点:
    使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序
  • 关于Math类的API:
    floor: 求小于参数的最大整数。返回double类型—–n. 地板,地面;
    例如:Math.floor(-4.2) = -5.0
    ceil: 求大于参数的最小整数。返回double类型—–vt. 装天花板;
    例如:Math.ceil(5.6) = 6.0
    round: 求挨着最近的长整数,计算方法(数值+0.5d),然后向下取整。返回long类型
    例如:Math.round(-4.6) = -5
  • 有关Integer:
    JVM中一个字节以下的整型数据会在JVM启动的时候加载进内存,除非用new Integer()显式的创建对象,否则都是同一个对象。
  • 以下代码执行后输出结果为:

    public class Test
    {
        public static Test t1 = new Test();
        {
             System.out.println("blockA");
        }
        static
        {
            System.out.println("blockB");
        }
        public static void main(String[] args)
        {
            Test t2 = new Test();
        }
     }
    

    解答
    大前提 执行顺序是:

    ①static Test  t1 = new Test(); 
    ②static 
    {
    System.out.println("blockB");         
    }
    ③Test t2 =new Test();  
    

    在这个执行顺序下,再来讨论每一块其中具体输出了什么,而且注意一点,static变量和代码块都是在类加载的时候已经完成,是早于对象实例化的。因此第一步中,只是输出block A,因为static静态块在实例话之前以及加载,而又要满足①在②之前执行,所以才会只输出block A;再接着是②③两步。

  • 依赖注入目的是减少组件之间的耦合度,使开发变得简单。

你可能感兴趣的:(【编程语言】➣,Java)