设计模式
含义:解决一种特定问题的方式
常用的设计模式:
单例模式
解决的问题:
让一个类只能产生一个对象
核心:
不能让其在该类以外可以使用new关键字调用构造函数
分类:
懒汉式单例
核心:
需要在创建,不需要不创建
优点: 节省内存
缺点: 线程不安全
步骤:
1,私有化所有构造函数
2,声明一个属性是本类对象
3,提供公共静态获取该类对象 判断步骤2的对象是否为null 如果为null,创建该类对象赋值给属性 不管是否为null返回该对象
饿汉式单例
核心:
不管是否需要,提前创建
优点: 线程安全
缺点: 占用内存较多
步骤:
1,私有化所有构造函数
2,声明并创建一个属性是本类对象
3,提供公共静态获取该类对象 返回该对象
线程安全的懒汉式单例
优点:节省内存,线程安全 在懒汉式的公共方法上加锁,保证线程安全
工厂模式
解决的问题:
传递商品型号,生成对应商品
保证:所有商品要有同一个父类或父接口
监听者模式:
接口回调
生成者与消费者
装饰者模式:
包装流使用
反射
语言分类
编译执行
java c
优点;安全
缺点;不够灵活
解释执行
HTML,CSS,JS..
缺点:不安全
优点:灵活
在JDK1.5及以后版本推出反射概念,提高代码灵活性
思想: 万事万物皆对象
Class类:Java的所有的类对象
类对象:
概念:
Java文件在运行时,需要先编译class文件
JVM加载class文件
JVM在加载class文件时,会生成该class文件对应的对象,该对象称为类对象 一个class文件只有一个类对象
有什么?
类对象包含对应的class 文件的所有信息,包含但不限于属性,方法,类名,构造函数,父类,实现的接口等信息
获取类对象:
方式1:
方式2:
方式3:
Constructor:对应构造函数的类
类相关:
public String getName():获取类的名称,包含包名
public native Class getSuperclass():获取该类的父类的类对象
public Class[] getInterfaces():获取该类所有的实现接口的接口类对象
public String getSimpleName():获取类的类名
public Package getPackage():获取该类所在的包对象 Package包对应的类 方法: 包对象.
getName():获取包对象的名称
属性相关
public Field[] getFields():获取类中所有公共属性,包含父类继承到属性
public Field[] getDeclaredFields():获取类中所有属性
public Field getDeclaredField("属性名字符串"):获取类中对应的属性
Field:属性对应的类
方法: setAccessible(true):取消访问权限修饰符限制
set(对象名,属性值):给属性赋值
get(对象名):获取属性的值
如: Field namefield=class1.getDeclaredField("name"); namefield.setAccessible(true); Person zhangsan=(Person)class1.newInstance(); namefield.set(zhangsan, "张三"); System.out.println(namefield.get(zhangsan));
方法相关:
public Method[] getMethods():获取公开的方法,包括从父类继承的方法
public Method[] getDeclaredMethods():获取类中的所有方法,包括私有、默认、保护的 、不 包含继承的方法
public Method getMethod(String name, Class... parameterTypes):获取单个方法
name:方法名
parameterTypes:该方法的参数类型
public Method getDeclaredMethod(String name, Class... parameterTypes):获取 单个私有方法
name:方法名
parameterTypes:该方法的参数类型
Method:方法对应的类
方法: setAccessible(true):取消访问权限修饰符限制
invoke(对象,调用方法传入的参数):调用方法