同步锁:
条件:有没有共享数据+有多条语句操作共享数据
锁对象:类名.class
可以直接把方法加锁,也可以加同步代码块:
普通方法;默认自动分配对象 是this,普通资源锁对象任意只要是同一个锁对象就可以
静态方法: 静态资源的锁对象 是类名.class
设计模式:
概述:23种设计模式,代码设计经验的总结,代码的可靠性、程序的重用性
一、单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
静态方法:static,静态只能调静态
构造方法被私有化,不能被new,只能类名.方法名()
演示:
class Person{
//1、私有化构造方法:不让外界随意new
private Person(){}
//2、在类的内部,new好一个对象
static private Person person=new Person();
//3、提供公共的访问方式getPerson,获取person对象
static public Person getPerson(){
return person;
}
}
好处:控制外界new的权利,节省内存 节省时间---SSM大量使用
(一)饿汉式--学习工作中使用
class Student{
//1,私有化
private Student () {
}
//2、创建一个对象
static private Student student=new Student();
//3、对外提供一个公共getX
static public Student getStudent() {
return student;
}
}
(二)懒汉式--面试重点(必须手写出来)
1、延迟加载:把加载时间往后放一放
一开始不占用内存,什么时候用什么时候占用内存
2、线程安全:多线程编程中,共享资源student,被多条语句操作,一定会有安全隐患--必须加锁
class Teacher{
private Teacher () {
}
private static Teacher teacher;//null 延迟加载
//保证地址值始终不变
//4、多线程编程中,共享资源student,被多条语句操作,一定会有安全隐患--必须加锁
//
synchronized static public Teacher getTeacher() {//get 则new使用
if(teacher==null) {
teacher=new Teacher();
}
return teacher;
}
}
注解:
概述:注解用来辅助开发,每个注解都有自己的功能
分类:JDK注解
元注解
自定义注解
(一)JDK注解,就5个
- @Override
- @Deprecated标记就表名这个方法已经过时了,但我就要用,别提示我过期
- @SuppressWarnings(“deprecation”)忽略警告
- @SafeVarargs jdk1.7出现,堆污染,不常用
- @FunctionnallInterface jdk1.8出现,配合函数式编程拉姆达表达式,不常用
(二)元注解,就5个
- @Target 指定注解出现的位置:类上、方法上、属性上
- @Retention 注解的生命周期:源文件中、class文件中、运行中
- @Inherited 允许子注解继承
- @Documented 生成javadoc时会包含注解,不常用
- @Repeatable注解为可重复类型注解,可以在同一个地方多次使用,不常用
1、@Target (ElementType.class)
描述注解的适用范围:
- ElementType.ANNOTATION_TYPE 注解类型
- ElementType.METHOD 方法级
- ElementType.CONSTRUCTOR 构造方法
- ElementType.FIELD 字段或者属性
- ElementType.LOCAL_VARIABLE 局部变量
- ElementType.PACKAGE 包声明
- ElementType.PARAMETER 方法的参数
- ElementType.TYPE 类的元素
多个位置内使用:@Target({ElementType.METHOD,ElementType.TYPE,3,4......})
2、@Retention RetentionPolicy.class
- RetentionPolicy.SOURCE 源文件中有效;源文件保留
- RetentionPolicy.CLASS class文件中有效:class保留
- RetentionPolicy.RUNTIME 运行时有效:运行时保留
(三)自定义注解
1、定义注解
@interface 注解名称{
}
2、使用注解