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 实现步骤
- 把构造方法私有化
- 类的内部自己创建一个对象
- 提供一个公共的方法获取这个对象
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 要求: 前面是6到12位字母或数字或下划线 + @ + 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);