JavaSE# 笔记【枚举 单例设计模式 多例设计模式 工厂设计模式 正则表达式】@Gray

1.枚举

1.1 之前在哪里听过枚举

java中的数据类型
	基本数据类型
		四类八种
	引用数据类型
		数组
		类
		接口
		枚举
		注解

1.2 作用

​ 枚举用来表示固定的对象。如果一个类的对象是固定的个数,就可以定义成枚举类型

​ 比如季节,星期,月份。

1.3格式

public enum 名称{
    对象1,对象2,对象3;
}

1.4 代码演示

//定义枚举表示性别
public enum Sex {
	//男性  女性
    MALE, FEMALE;
}
public class Student {
    private String name; //姓名
    private int age;    //年龄
    private Sex sex;   //性别

    public Student() {
    }

    public Student(String name, int age, Sex sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}


public class Test01 {
    public static void main(String[] args) {
        //学生对象
        Student s = new Student("石原里美",28,Sex.FEMALE);
        System.out.println(s);
    }
}

2.单例设计模式

2.1 作用

​ 如果一个类只允许创建一个对象,那么就可以使用单例设计模式。

2.2 实现步骤

  1. 把构造方法私有化
  2. 类的内部自己创建一个对象
  3. 提供一个公共的方法获取这个对象

2.3 代码实现

  • 饿汉式

    • 饿的意思就是饥饿,不管有没有人获取,都提前创建对象。
    • 浪费内存空间,获取对象速度快
    public class Student {
        //把构造方法私有化
        private Student(){}
    
        //类的内部自己创建一个对象
        private static Student s = new Student();
    
        //提供一个公共的方法获取这个对象
        public static Student getInstance() {
            return s;
        }
    }
    
  • 懒汉式

    • 懒就是懒惰,什么时候获取对象,什么时候再创建。
    • 节约内存空间,减慢对象获取速度
    public class Student2 {
    
        //构造方法私有化
        private Student2(){}
    
        //定义学生对象
        private static Student2 s = null;
    
        //获取的方法
        //静态同步方法的锁对象是当前类的.class字节码对象
        public static synchronized Student2 getInstance(){
            //做判断,判断对象是否已经创建
            if(s == null){
                s = new Student2();
            }
    
            return s;
        }
    }
    
  • 测试类

    public class Test01 {
        public static void main(String[] args) {
    
            //获取学生对象
            Student s1 = Student.getInstance();
            Student s2 = Student.getInstance();
            Student s3 = Student.getInstance();
    
            //不管获取多少次获取的都是同一个对象
        }
    }
    

3.多例设计模式

3.1 作用

​ 一个类要创建指定固定个数的多个对象.

3.2 代码演示

import java.util.ArrayList;
import java.util.Random;
//多例模式
public class Student3 {
    //构造方法私有化
    private Student3(){}

    //定义集合存储多个对象
    private static ArrayList<Student3> list = new ArrayList<>();

    //静态代码块 只会执行一次
    static{
        //创建对象放在集合中
        list.add(new Student3());
        list.add(new Student3());
        list.add(new Student3());
    }

    //定义获取对象的方法
    public static Student3 getInstance(){
        //随机获取集合中的一个对象返回
        Random r = new Random();
        //获取随机索引
        int i = r.nextInt(list.size());
        //返回获取到的对象
        return list.get(i);
    }
}


public class Test02 {
    public static void main(String[] args) {

        //获取10次学生对象
        for (int i = 0; i < 10; i++) {
            Student3 s = Student3.getInstance();
            System.out.println(s);
        }
        //效果:打印的10个对象地址值一共只有3个。
    }
}

4.工厂设计模式

4.1 介绍

​ 工厂是专门来创造东西的,工厂的作用就是专业的人来干专业的事儿,提高管理效率。

4.2 代码演示

//工厂
public class Factory {

    //获取汽车的方法
    public static Car getCar(String name){
        //定义汽车变量
        Car c = null;

        if(name.equals("BenZ")){
            c =  new BenZ();
        }else if(name.equals("BWM")){
            c =  new BWM();
        }else if(name.equals("QQ")){
            c =  new QQ();
        }
        return c;
    }
}


public class Test01 {
    public static void main(String[] args) {
        //使用工厂创建对象
        Car c1 = Factory.getCar("BenZ");

        Car c2 = Factory.getCar("BWM");
    }
}

5.正则表达式

5.1 介绍

​ 正则表达式是对字符串做校验的工具。

​ 很多时候字符串需要满足指定的内容限制,就可以用正则表达式来对字符串做限制。

​ 比如:账号密码等等的限制。

5.2 字符类

[abc]	表示一个字符可以是a或b或c
[0-9]   表示一个字符可以是0到9的数字
[a-z]   表示一个字符可以是a到z的字母
[A-Z0-9]表示一个字符可以是A到Z或0-9
[^abc]  表示一个字符不能是a不能是b不能是c

5.3 预定义字符

.		:代表任意字符
\d		:代表数字字符
\w	    :代表单词字符【包含数字 大小写字母 _ 】

5.4 数量词

?		:表示零次或一次
+		:表示一次或多次
*       :表示任意次

{5}		:表示固定n次
{m,n}	:表示m次到n次
{m,}    :表示m到任意次

  • 案例

    1.匹配手机号
     要求: 第一位必须是1,第二位要求是135679之中的数字,别的只要是数字就行一共必须是11位
         String reg = "[1][135679]\\d{9}";
         String username = "17611139876";
         //匹配username是否符合reg的要求
         System.out.println(username.matches(reg));
    
    2.Gray1107@qq.com
      要求:  前面是612位字母或数字或下划线  + @ + 2-6位字母或数字 + .com
        String reg = "\\w{6,12}@[0-9a-zA-z]{2,6}[.]com";
    	String email = "jin_gang@itcast.com";
    	System.out.println(email.matches(reg));
            
    

5.5分组括号

分组的功能是匹配相同的字符。
()作为分组,第一个小括号是第一组,第二个小括号是第二组,依次类推
\\1表示和第一组字符一样,\\2表示和第二组字符一样

1.要求: 要3个连续的同样的数字
        String reg = "(\\d)\\1\\1";
        String s = "777";
        System.out.println(s.matches(reg));
        
2.要求:要任意字符的叠词 比如:大大小小  7788   aabb   蹦蹦跳跳
        String reg = "(.)\\1(.)\\2";
        String s = "7788";
        System.out.println(s.matches(reg));

5.6介绍两个字符串中和正则表达式相关的方法

  • matches() :使用字符串和正则表达式匹配

  • split() :按照正则表达式切割字符串

    String s = "192.168.12.53";
    
    //切割方法的参数其实是正则表达式
    String[] sts = s.split("[.]");
    //遍历数组
    for (String st : sts) {
        System.out.println(st);
    }
    
  • replaceAll() :按照正则表达式替换字符串

    String s = "我是特朗普,我今天失败了,我要离开白宫了。。。。";
    
    //正则表达式替换
    String s3 = s.replaceAll("[,。]", "!");
    System.out.println(s3);
    
    练习:
    //要求:今天 我要 嫁给你
    String s = "今天2384239我要97嫁给你2357";
    
    String s1 = s.replaceAll("\\d+"," ");
    System.out.println(s1);
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值