对象数组
{1,2,3, 4,5,6,null,null,null}
用于存储一组相同类型的对象
在使用对象数组时,我们要遵循以下原则:
(1)保正数组元素的插入顺序
(2)保正数组元素的连续性
(3)添加元素一般在数组的末尾添加
(4)插入元素需要把插入位置之后的元素往后移动一位
(5)删除无素时需要把删除位置之后的元素往前移动一位
(6)当数组添加满后,需要重新生成新数组来完成容量的扩充
(具有该功能的数组称为动态数组)
(7)扩充数组的算法一般使用两种:
原来数组的长度*3/2+1 :扩充原来数组的一半
原来数组的长度*2:扩充原来数组的一倍
思考:
数组的扩充的次数过多势必会影响性能,并造成内存浪费
数组的删除插入操作效率不高
提高移动数组元素的方法可以使用System.arraycopy方法
增强for循环与可变参数
1、增强for(JDK1.5新增的功能)
String[] names ={"1","2","3","4"};
for(String s : names){
System.out.println(s);
}
for(int i=0;i<names.length;i++){
}
2、可变参数
(1)在声明可变参数时只能有一个
(2)声明的的可变参数在参数列表中必须是最后一个
(3)可变参数在使用时作为一个数组
print("a","b","c");
public void print(int num,String... s){
}
代码块
(1)普通代码块:
在方法内部使用
(2)构造块:(一般不使用)
直接在类中使用
(3)静态代码块:
在类中使用static{ ... }
特点:普通代码块可以在一个方法中用来化分作用域
构造块是在创建对象时优先构造方法被调用(不使用)
静态代码块,在该类被调用时只会执行一次,在实际开发中
通常用于初始化应用程序需求的数据等。(常用)
{}:大扩号是用于组织代码的结构,用于限制代码块的作用域(范围)
示例:
class Demo{
static{
System.out.println("静态代码块");
}
{
System.out.println("构造块");
}
public void show(){
{//普通代码块
int i = 0;
}
int i = 0;
}
}
单例设计模式
设计模式:GOF 设计模式(23种)
1、基本思想,解决什么问题
2、如何实现及优缺点
3、应用场景
单例模式,解决在同一个类中创建多个对象与创建一个对象去调用方法,区别不大
这种情况下,我们使用一个对象可能会节省内存,减少垃圾对象的产生。
从而提高效率。
面试题:写出一个单例模式
(1)构造方法私有化
(2)定义一个静态的本类对象
(3)对外提供一个静态的方法来获取本类对象
实现单例可以有两种方式:懒汉式和饿汉式
public classSingleton{
private static Singleton singleton=null;
private Singleton(){}
public static Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
public String getDate(){
java.util.Date date = newjava.util.Date();
SimpleDateFormat df = newSimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
return df.format(date);
}
}
在实际开发中的应用场景
通常在一些工具类中使用
思考:
实现一个工具类通常:
1、普通类
2、私有化构造方法,功能方法静态化(完全没有对象)
3、使用单例模式(有一个对象)