API:应用程序编程接口。(Application Programming Interface) 参数的问题: * 基本数据类型:形参的改变对实参没有影响。 * 引用数据类型:形参的改变直接影响实参。
StringBuffer和StringBuilder、string区别
1:StringBuffer和StringBuilder都是可变的字符序列。
而String一旦被赋值,内容就不可以再改变。
2:StringBuffer是线程安全的,效率低。
StringBuilder是线程不安全的,效率高。 StringBuffer添加元素使用的是同一个对象的区域,并且可以添加任意类型的元素。 append:添加元素 insert:在指定的位置添加元素 StringBuffer 和 StringBuilder 的区别: StringBuffer线程安全。 StringBuilder线程不安全。 单线程操作,使用StringBuilder 效率高。 多线程操作,使用StringBuffer 安全。 同步:★★★★★ 好处:解决了线程安全问题。 弊端:相对降低性能,因为判断锁需要消耗资源,产生了死锁。 定义同步是有前提的: 1,必须要有两个或者两个以上的线程,才需要同步。 2,多个线程必须保证使用的是同一个锁。 同步代码块和同步函数的区别? 同步代码块使用的锁可以是任意对象。 同步函数使用的锁是this,静态同步函数的锁是该类的字节码文件对象。 在一个类中只有一个同步,可以使用同步函数。如果有多同步,必须使用同步代码块,来确定不同的锁。所以同步代码块相对灵活一些。 解决线程安全问题使用同步的形式,(同步代码块,要么同步函数)其实最终使用的都是锁机制。 到了后期版本,直接将锁封装成了对象。线程进入同步就是具备了锁,执行完,离开同步,就是释放了锁。 在后期对锁的分析过程中,发现,获取锁,或者释放锁的动作应该是锁这个事物更清楚。所以将这些动作定义在了锁当中,并把锁定义成对象。 所以同步是隐示的锁操作,而Lock对象是显示的锁操作,它的出现就替代了同步 匿名内部类:没有名字的内部类。就是内部类的简化形式。一般只用一次就可以用这种形式。匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口。 Collection接口有两个子接口:List(列表) ,Set(集) List:可存放重复元素,元素存取是有序的。 Set:不可以存放重复元素,元素存取是无序的 Collection: |--List:元素有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。 |--Set:元素无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。 泛型中的通配符:可以解决当具体类型不确定的时候,这个通配符就是 ? ;当操作类型时,不需要使用类型的具体功能时,只使用Object类中的功能。那么可以用 ? 通配符来表未知类型。 泛型限定: 上限:?extends E:可以接收E类型或者E的子类型对象。 下限:?super E:可以接收E类型或者E的父类型对象。 上限什么时候用:往集合中添加元素时,既可以添加E类型对象,又可以添加E的子类型对象。为什么?因为取的时候,E类型既可以接收E类对象,又可以接收E的子类型对象。 下限什么时候用:当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收。 数组中的数据是固定的 为什么出现集合: 面向对象的语言对事物都是以对象的形式,所以为了方便对象操作,就对对象进行储存,集合就是储存对象最常用的一种方式 由于数据在存储的时候,数据结构不一样,所以就会出现多种类型的集合方便我们操作 集合体系的由来
|