---恢复内容开始---

一、包装类——Wrapper

1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类)

   boolean——Boolean          byte——Byte

   short——Short                   int——Integer

   long——Long                    char——Character

   float——Float                     double——Double

2.作用:有了类的特点,就可以调用类中的方法

3.注意事项

(1)基本数据类型和包装类的转换:JDK5.0以后,自动装箱和拆箱,即基本数据类型和包装类可以无缝连接,自动转换。

(2)基本数据类型、包装类 - -> String类:调用String类的静态的重载的valueOf(Xxx  xx)方法,例:

int i = 10;
// Integer ii = 10;
String str = String.valueOf(i);//"10"
// String str1 = String.valueOf(ii);

(3)String类 - ->基本数据类型、包装类:调用包装类的parseXxx(String str)方法,例:

String str = "10";
int i = Integer.parseInt(str);

 二、设计模式之单例模式

1.概述:使一个类只能创建一个对象

2.特点

(1)私有化构造器,使得在类的外部不能调用构造器创建对象

(2)在类的内部创建一个静态的私有的类的实例,因为静态的方法只能调用静态的变量和方法

(3)通过一个静态的类的方法来返回实例

3.代码

public class Test{
    
    public static void main(String[] args){
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);//输出true,说明是同一个实例
    }
}
//饿汉式
class Singleton{
    
    //私有化构造器
    private Singleton(){    
    }    
    //在类的内部创建实例
    private static Singleton instance = new Singleton();
    
    //通过公共的静态的方法来返回实例
    public static Singleton getInstance(){
        return instance;
    }
}
//懒汉式:延迟加载方式,可能存在线程安全问题
class Singleton1{
    
    private Singleton1(){}
    
    private static Singleton1 instance = null;
    
    public static Singleton1 getInstance(){
        if(instance == null){
            instance = new Singleton1();
        }
        return instance;
    }
}

三、抽象类——abstract

1.abstract修饰类,即抽象类的特点

(1)抽象类不可被实例化

(2)抽象类有构造器(凡是类都有构造器)

(3)抽象方法所在的类一定是抽象类

(4)抽象类中可以没有抽象方法

(5)只有通过子类继承抽象类并重写了所有的抽象方法后,该子类才可以实例化,否则,该子类还是一个抽象类,必须声明为抽象类

2.abstract修饰方法,即抽象方法的特点

(1)格式:没有方法体,没有{},如:public abstract void eat();

(2)抽象方法只保留方法的功能,而具体的执行交给继承抽象类的子类,由子类来重写此方法。

(3)abstract关键字不能修饰属性、私有方法、构造器、静态方法、final的方法。

3.模版方法设计模式——TemplateMethod

(1)概述:抽象类体现的就是一种模版模式的设计,抽象类作为多个子类的通用模版,子类在抽象类的基础上进行改造拓展。

(2)作用:当功能内部的一部分实现是确定的,一部分实现时不确定的,这时可以把不确定的部分暴露出去,让子类去实现。

(3)代码:

abstract class GetTime{
    public final void getTime(){//此功能不需要重写,加final修饰
        long start = System.currentTimeMillis();
        code();//不确定的功能部分,提取出来,通过抽象方法实现
        long end = System.currentTimeMillis();
        System.out.println("花费的时间是:"+(end-start));
    }
    
    public abstract void code();//不确定的功能由子类来重写实现
    
}

class SubDemo extends GetTime{//子类实现code()抽象方法
    public void code(){
        for(int y = 0;y < 1000;y++){
            System.out.println("y");
        }
    }
}

四、接口——interface

1.概述:接口可以看成一个特殊的抽象类,是常量和抽象方法的一个集合,不能包含变量、一般的方法。

2.特点

(1)接口没有构造器

(2)常量和抽象方法的修饰符都是固定的:

  常量:public static final

  方法:public abstract

(3)接口定义的是一种未实现的功能,由类来实现(implements),如:class CC extends DD implements AA

(4)实现接口的类,必须重写接口所有的抽象方法,才可以实例化,否则这个类仍为抽象类

(5)一个类可以实现多个接口

(6)接口与接口之间也可以是继承的关系,而且可以多继承,而类之间的继承只能是单继承的。

 

---恢复内容结束---

一、包装类——Wrapper

1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类)

   boolean——Boolean          byte——Byte

   short——Short                   int——Integer

   long——Long                    char——Character

   float——Float                     double——Double

2.作用:有了类的特点,就可以调用类中的方法

3.注意事项

(1)基本数据类型和包装类的转换:JDK5.0以后,自动装箱和拆箱,即基本数据类型和包装类可以无缝连接,自动转换。

(2)基本数据类型、包装类 - -> String类:调用String类的静态的重载的valueOf(Xxx  xx)方法,例:

int i = 10;
// Integer ii = 10;
String str = String.valueOf(i);//"10"
// String str1 = String.valueOf(ii);

(3)String类 - ->基本数据类型、包装类:调用包装类的parseXxx(String str)方法,例:

String str = "10";
int i = Integer.parseInt(str);

 二、设计模式之单例模式

1.概述:使一个类只能创建一个对象

2.特点

(1)私有化构造器,使得在类的外部不能调用构造器创建对象

(2)在类的内部创建一个静态的私有的类的实例,因为静态的方法只能调用静态的变量和方法

(3)通过一个静态的类的方法来返回实例

3.代码

public class Test{
    
    public static void main(String[] args){
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);//输出true,说明是同一个实例
    }
}
//饿汉式
class Singleton{
    
    //私有化构造器
    private Singleton(){    
    }    
    //在类的内部创建实例
    private static Singleton instance = new Singleton();
    
    //通过公共的静态的方法来返回实例
    public static Singleton getInstance(){
        return instance;
    }
}
//懒汉式:延迟加载方式,可能存在线程安全问题
class Singleton1{
    
    private Singleton1(){}
    
    private static Singleton1 instance = null;
    
    public static Singleton1 getInstance(){
        if(instance == null){
            instance = new Singleton1();
        }
        return instance;
    }
}

三、抽象类——abstract

1.abstract修饰类,即抽象类的特点

(1)抽象类不可被实例化

(2)抽象类有构造器(凡是类都有构造器)

(3)抽象方法所在的类一定是抽象类

(4)抽象类中可以没有抽象方法

(5)只有通过子类继承抽象类并重写了所有的抽象方法后,该子类才可以实例化,否则,该子类还是一个抽象类,必须声明为抽象类

2.abstract修饰方法,即抽象方法的特点

(1)格式:没有方法体,没有{},如:public abstract void eat();

(2)抽象方法只保留方法的功能,而具体的执行交给继承抽象类的子类,由子类来重写此方法。

(3)abstract关键字不能修饰属性、私有方法、构造器、静态方法、final的方法。

3.模版方法设计模式——TemplateMethod

(1)概述:抽象类体现的就是一种模版模式的设计,抽象类作为多个子类的通用模版,子类在抽象类的基础上进行改造拓展。

(2)作用:当功能内部的一部分实现是确定的,一部分实现时不确定的,这时可以把不确定的部分暴露出去,让子类去实现。

(3)代码:

abstract class GetTime{
    public final void getTime(){//此功能不需要重写,加final修饰
        long start = System.currentTimeMillis();
        code();//不确定的功能部分,提取出来,通过抽象方法实现
        long end = System.currentTimeMillis();
        System.out.println("花费的时间是:"+(end-start));
    }
    
    public abstract void code();//不确定的功能由子类来重写实现
    
}

class SubDemo extends GetTime{//子类实现code()抽象方法
    public void code(){
        for(int y = 0;y < 1000;y++){
            System.out.println("y");
        }
    }
}

四、接口——interface

1.概述:接口可以看成一个特殊的抽象类,是常量和抽象方法的一个集合,不能包含变量、一般的方法。

2.特点

(1)接口没有构造器

(2)常量和抽象方法的修饰符都是固定的:

  常量:public static final

  方法:public abstract

(3)接口定义的是一种未实现的功能,由类来实现(implements),如:class CC extends DD implements AA

(4)实现接口的类,必须重写接口所有的抽象方法,才可以实例化,否则这个类仍为抽象类

(5)一个类可以实现多个接口

(6)接口与接口之间也可以是继承的关系,而且可以多继承,而类之间的继承只能是单继承的。

五、内部类

1.定义:在类的内部定义类,外面的类叫外部类,里面定义的类叫内部类。

2.分类:成员内部类(定义在类的内部且在方法外的);局部内部类(声明在方法内的)

3.特点

(1)内部类可以直接调用外部类的成员;外部类访问内部类时,需要创建一个内部类对象来访问内部类

(2)成员内部类相当于类的成员,可以使用各种修饰符(private public protected static final)

(3)创建静态内部类和非静态内部类成员时的区别(见代码)

(4)外部类和内部类的同名变量的使用(见代码)

public class Test{
    public static void main(String[] args){
        //创建静态内部类的对象,可以直接通过外部类调用静态内部类的构造器
        Person.Dog dog = new Person.Dog();
        //创建非静态内部类的对象,必须先创建外部类的对象,通过该对象调用内部类的构造器
        Person p = new Person();
        Person.Bird bird = p.new Bird();
        
        bird.info();
        bird.setName("杜鹃");
    }
}

class Person{
    String name="韩梅梅";
    int age;
    //成员内部类(非静态的)
    class Bird{
        String name="黄鹂";
        int id;
        public Bird(){
            
        }
        public void setName(String name){//同名变量的使用
            System.out.println(name);//杜鹃
            System.out.println(this.name);//黄鹂
            System.out.println(Person.this.name);//韩梅梅
        }
        public void info(){
            show();//直接调用外部类的方法
        }
    }
    //静态成员内部类
    static class Dog{
        
    }
    public void show(){
        System.out.println("我是外部类的show方法");
    }
}

4.局部内部类及匿名内部类的使用

public Comparable getComparable(){//返回值为Comparable这个接口的对象
    //创建一个实现Comparable接口的类:局部内部类
    class MyComparable implements Comparable{
        
        @Override
        public int CompareTo(java.lang.Object o){
            return 0;
        }
    }
    return new MyComparable();//返回一个实现类的对象
}
//使用方法二
public Comparable getComparable1(){
    //返回一个实现Comparable接口的匿名内部类的对象
    return new Comparable(){
        
        @Override
        public int CompareTo(java.lang.Object o){
            return 0;
        }
    }
}