对象数组

{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、使用单例模式(有一个对象)