牛客网-易错点集锦

抽象类和接口区别?

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编程操作

原文地址:https://www.cnblogs.com/zhzJAVA11/p/10205702.html