1、关于多态的使用:静态方法编译看左边,运行也看左边
成员方法编译看左,运行看有边
成员变量编译看左,运行看左
编译看左边,运行看右边,也就是编译时候,会看左边引用类型是否能正确编译通过,运行的时候是调用右边的对象方法。
2、arraylist默认数组大小是10,扩容后的大小是扩容前的1.5倍,最大值小于Interger的最大值减8,如果新创建的集合带有初始值,默认就是传入的大小,也就就不会扩容
例如:ArrayList list = new ArrayList(20);------这个是默认传入的大小,不用进行扩容。
3、线程安全的类有:
java.util.concurrent.ConcurrentHashMap--线程安全
java,util.Hashtable----线程安全
synchronizedMap----线程安全。
4、关于二维数组:声明二维数组,第一个中括号必须要有值,它代表的是在该二维数组中有多少个一维数组
5、关于线程:1、线程通过使用synchronized关键字可获得对象的互斥锁定。
2、线程调度算法是平台独立的。
6、关于重写和重载:
重载:在同一个类中方法名相同,参数列表不同,参数列表中的类型和参数个数不同,
重写:子类继承父类,方法名相同,参数列表相同,子类的修饰符不能下小于父类的修饰符,子类的返回值类型不能大于父类的返回值类型,子类的抛出异常类型不能大于父类的抛出异常类型。
简称一大(子类修饰符>父类修饰符),两同(方法名相同,参数列表相同),两小(子类抛出异常类型<父类抛出异常类型,子类返回值类型<父类返回值类型)。
7、代码块之间的顺序:静态代码块>构造代码块>构造方法>普通方法>局部代码块>局部方法。
8、接口和抽象类的区别:
1、接口是用interface来定义的
抽象类是用class来定义的
2、接口的方法都是抽象方法
抽象类中的方法可以是抽象方法,也可以是构造方法
3、接口中的都是静态常量
抽象类中可以有普通的成员变量
4、接口没有构造方法,不可以实例化
抽象类有构造方法,但是不可以实例化
5、接口是先天设计的结果,抽象是后天重构的结果
6、接口可以多实现,抽象类只能单继承。
方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数
10、先进先出的容器是:队列
11、在一个抽象类中,抽象类可以包含抽象方法
类中定义成员和方法,不能直接进行运算,可以写在代码块{}或者静态代码块中static{}
抽象方法不能有方法体,即便里面是空的也不行。
12、定义变量:1、数字,字母,符号(只有_和$两种),不能以数字开头
2、不能以关键字定义变量
13、string,stringBuilder和StringBuffer
1)string:适用于少量字符串操作
stringbuilder:适用于单线程下在字符串缓冲区进行大量操作(非线程安全)
stringbuffer:适用于多线程下在字符串缓冲区进行大量操作。(线程安全)
2)string是final类不能被继承且为字符串常量,stringbuilder和stringbuffer均为字符串变量
3)string创建之后长度内容是不可变的,每次拼接字符串都会产生新的对象,stringbuilder是一个长度可变的字符串序列,在创建时,会有一个长度为16的默认空间,当拼接字符串的时候,时在原对象的基础上进行拼接,如果长度不够就扩容。
4)stringbuilder和stringbuffer转成string用的是tostring()方法,
string转stringbuilder是通过new stringbuilder,传参进行的。
String s = “abc”; StringBuilder sb = new StringBuilder(s);
14、单例模式:属于创建型模式,提供了一种创建对象的最佳方式。这个类提供了一种访问唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
特点:
单例只有一个实例。
单例必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。---构造方法私有。
15、线程私有:Java虚拟机栈,程序计数器,本地方法栈。
线程共享:Java堆,方法区。如下解释:
堆:由于堆是在进程空间中开辟出来的,所以它是理所当然的被共享,因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
全局变量:它是与具体某一函数无关的,所以也与特定线程无关,因此也是共享的。
静态变量:虽然对应局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存在于堆中开辟的.bss和.data段,是共享的。
文件等公用资源:这个是共享的,使用这些公共资源的线程必须同步,包括信号,临界区,事件和互斥体。
16、Java反射机制主要提供了那些功能:
1)、在运行时判断一个对象所属的类
2)、在运行时构造一个类的对象
3)、在运行时判断一个类所具有的成员变量和方法
4)、在运行时调用一个对象的方法。
17、常见的代码优化技术有:复写传播,删除死代码,强度削弱,归纳变量删除。