• 牛客网-易错点集锦


    抽象类和接口区别?

    super()和this()

     这里记一个非常有价值的题目:http://blog.csdn.net/zhumintao/article/details/53818972

     构造方法

    ***子类的构造方法总是先调用父类的构造方法---super()存在于子类构造方法内第一行的缘故,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
    如果父类没有无参的构造函数,则子类需要在自己的构造函数中显示的调用父类的构造函数------super(参数)。

     ***父类静态变量→父类静态代码块→子类静态变量→子类静态代码块→父类非静态变量→父类非静态代码块|||→|||父类构造函数→子类非静态变量→子类非静态代码块→子类构造方法

     

     声明的权限问题

     容器集合类

     Java数据类型

     final关键字

    一、final关键字可以用来修饰类、方法、变量。各有不同。

    A、修饰类(class)。 
         1、该类不能被继承。 
         2、类中的方法不会被覆盖,因此默认都是final的。 
         3、用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成final类

    B、修饰方法(method) 
         1、该方法可以被继承,但是不能被覆盖。 
         2、用途:一个类不允许子类覆盖该方法,则用final来修饰 
         3、好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用fianal方法转入内嵌机制,提高了执行效率。 
         4、注意:父类中的private成员方法不能被子类覆盖,因此,private方法默认是final型的(可以查看编译后的class文件)

    C、修饰变量(variable) 
         1、用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。 
         2、特点:可以先声明,不给初值,这种叫做final空白。但是使用前必须被初始化。一旦被赋值,将不能再被改变。

    D、修饰参数(arguments) 
         1、用final修饰参数时,可以读取该参数,但是不能对其作出修改

    二、final关键字不能用来抽象类和接口。

    三、final变量,如果是基本数据类型,则其数值一旦初始化后就不能被改变。如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。引用变量所指向的对象中的内容是可以改变的。

    final关键字的特性是:

     

     子父类

      子类从其父类继承所有成员(字段,方法和嵌套类)。 构造函数不是成员,所以它们不被子类继承,但是可以从子类调用父类的构造函数。

      1. 静态方法,不存在重写,重写只对可见的实例方法有效。

      2. 重载是根据形参的静态类型确定调用的方法版本,重写是根据调用者在运行期的实际类型来确定调用的方法版本。

     执行顺序:父类静态域——》子类静态域——》父类成员初始化——》父类构造块——》1父类构造方法——》2子类成员初始化——》子类构造块——》3子类构造方法;

    异常类

    注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

        通常,Java的异常(包括Exception和Error)分为 可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)
           可查异常(编译器要求必须处置的异常): 正确的程序在运行中,很容易出现的、情理可容的异常状况 。 可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常 状况,就必须采取某种方式进行处理。

          除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

          不可查异常(编译器不要求强制处置的异常):包括运行时异常(RuntimeException与其子类)和错误(Error)。

         Exception 这种异常分两大类运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。

            运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

          运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
            非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

    堆栈的理解

    JVM 内存可简单分为三个区:
     
    1、堆区(heap):用于存放所有对象,是线程共享的(注:数组也属于对象)
     
    2、栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的(分为:虚拟机栈和本地方法栈)
     
    3、方法区(method):用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap)

    MVC三层架构原理图

    ActionForm、Action都属于Model部分;
    一个struts项目只能有一个Servlet


    Servlet关系图

     

    运算符优先级

    口诀:淡云一笔安洛三福 单目>算数运算符>移位>比较>按位>逻辑>三目>赋值

    单目运算符:+,-,++,--
    算数运算符:+,-,*,/,%
    移位运算符:<<,>>
    关系运算符:>,<,>=,<=,==,!=
    位运算符:&,|,~,^,
    逻辑运算符:&&,||
    三目运算符:表达式1?表达式2:表达式3;
    赋值运算符:=等

    内部类

    socket编程操作

  • 相关阅读:
    bzoj 2115: [Wc2011] Xor【线性基+dfs】
    bzoj 1027: [JSOI2007]合金【凸包+Floyd】
    bzoj 4824: [Cqoi2017]老C的键盘【树形dp】
    bzoj 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】
    bzoj 4822: [Cqoi2017]老C的任务【扫描线+树状数组+二维差分】
    bzoj 4823: [Cqoi2017]老C的方块【最大权闭合子图】
    bzoj 4826: [Hnoi2017]影魔【单调栈+树状数组+扫描线】
    洛谷 P3731 [HAOI2017]新型城市化【最大流(二分图匹配)+tarjan】
    洛谷 P3732 [HAOI2017]供给侧改革【trie树】
    poj 1474 Video Surveillance 【半平面交】
  • 原文地址:https://www.cnblogs.com/zhzJAVA11/p/10205702.html
Copyright © 2020-2023  润新知