Java基础--结合第一阶段总结来背

1、关于多态的使用:静态方法编译看左边,运行也看左边

                                  成员方法编译看左,运行看有边

                                   成员变量编译看左,运行看左

编译看左边,运行看右边,也就是编译时候,会看左边引用类型是否能正确编译通过,运行的时候是调用右边的对象方法。

2、arraylist默认数组大小是10,扩容后的大小是扩容前的1.5倍,最大值小于Interger的最大值减8,如果新创建的集合带有初始值,默认就是传入的大小,也就就不会扩容

例如:ArrayList list = new ArrayList(20);------这个是默认传入的大小,不用进行扩容。

3、线程安全的类有:

java.util.concurrent.ConcurrentHashMap--线程安全

java,util.Hashtable----线程安全

synchronizedMap----线程安全。

4、关于二维数组:声明二维数组,第一个中括号必须要有值,它代表的是在该二维数组中有多少个一维数组

Java基础--结合第一阶段总结来背

 5、关于线程:1、线程通过使用synchronized关键字可获得对象的互斥锁定。

                        2、线程调度算法是平*立的。

6、关于重写和重载:

重载:在同一个类中方法名相同,参数列表不同,参数列表中的类型和参数个数不同,

重写:子类继承父类,方法名相同,参数列表相同,子类的修饰符不能下小于父类的修饰符,子类的返回值类型不能大于父类的返回值类型,子类的抛出异常类型不能大于父类的抛出异常类型。

简称一大(子类修饰符>父类修饰符),两同(方法名相同,参数列表相同),两小(子类抛出异常类型<父类抛出异常类型,子类返回值类型<父类返回值类型)。

7、代码块之间的顺序:静态代码块>构造代码块>构造方法>普通方法>局部代码块>局部方法。

8、接口和抽象类的区别:

1、接口是用interface来定义的

     抽象类是用class来定义的

2、接口的方法都是抽象方法

      抽象类中的方法可以是抽象方法,也可以是构造方法

3、接口中的都是静态常量

      抽象类中可以有普通的成员变量

4、接口没有构造方法,不可以实例化

      抽象类有构造方法,但是不可以实例化

5、接口是先天设计的结果,抽象是后天重构的结果

6、接口可以多实现,抽象类只能单继承。

9、java中的main方法,必须满足以下要求:

方法的名字必须是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、常见的代码优化技术有:复写传播,删除死代码,强度削弱,归纳变量删除。

上一篇:Leetcode557.反转字符串中的单词|||


下一篇:String,StringBuffer,StringBuilder之间的区别于适用场景