1,方法覆盖是说子类重新定义父类的方法。方法覆盖必须有相同的方法名,参数列表和返回值类型。
2,servlet在多线程下其本身并不是线程安全的。如果在类中定义成员变量,而在service中,根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。
最好的方法是定义在局部变量中,由于方法中的局部变量是在栈中,彼此拥有独立的空间,不会互相干扰,因此才线程安全。
3,ServerSocket(int port);
4,实例代码块在执行构造方法之前执行。所以优先级高于构造方法。
5,类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义的时候初始化,否则在访问该变量的时候会出错。
6,局部变量,没有像成员变量那样加载的时候会有初始化赋值,所以要使用局部变量时,一定要显示的给它赋值,也就是定义的时候给它赋值
7,\D表示非数字(大写表示非)
8,java调试器jdb.exe
9, final修饰变量的时候会把它变成常量(不会改变的值)
10,equals默认比较的是地址,因为最初这个方法是定义在object上的,也就是比较地址的。
11,String是final类型,每次声明的都是不可改变的对象。所以每次操作都会产生新的String对象,然后将指针指向新的String对象。
StringBuffer,StringBuilder都是在原有的对象进行操作,所以如果需要经常改变字符串的内容,则采用这两者。
StringBuffer是线程安全的,StringBuilder是线程不安全的,StringBuilder性能更高,所以优先使用StringBuilder
但是在实际开发的过程中,安全方面也是很重要的,为什么要优先使用StringBuilder?多个线程访问同一个资源,才会造成安全问题,如果在每一线程都创建一个StringBuilder对象,那么就不会有多个线程访问一个资源。
12,抽象类:方法可以是抽象的,也可以是非抽象的,有构造方法
接口:方法都是抽象的,属性都是常量,默认使用public static final修饰
jdk1.8之后:接口里面可以有实现的方法,注意要在方法的声明上加上default或者static
13,Integer a = 10;
int b = 10;
system.out.println(a == b); tru