注解:
不影响程序的运行,可以当做注释,也能被别的程序读取
内置注解:
@Override告诉去检查这是不是在重写方法,若不是则报错
@Deprecated:能调用但是不建议调用
SuppressWarnings:不再显示警告信息
zzz
自定义注解:
@Target:设置注解范围
下图 @Target:表示该注解只能用于方法前面
@Retention
下图此处表示:可以加到类和方法前面:
定义参数变量和数组,及默认值:
如果自定义注解只有一个参数且名字为value:
反射:
Class对象及获取方法:
所有int[]对应一个Class对象:
获取类的信息:
若构造方法被人为定义了,则编译器不会再自己添加了
调用方法,构造对象:
setAccessible:可以访问private属性了
操作泛型:
操作注解:
动态编译:
新建文件:
运行:
或通过反射运行:
invoke第一个参数是哪个对象在调用方法,有main是static,就没有对象,对是null:
js是解释性语言
执行js代码:
放入engine中的变量msg可以被java操作,也可以被js操作。
最后2行:js改变了msg的值,然后通过java来获取值
新建js文件并执行:
字节码操作:
使用javassist类库造一个java文件并编译:
先导入javassist.jar
生成.class文件:
利用XJad反编译:
获得指定类的信息:
自定义方法并加入到指定类中:
调用它:
修改指定类的方法体:
给指定类添加属性和set,get方法:
获得构造器:
获得注解:
设计模式需要遵守的七大原则:
单一职责:只做一件事
接口隔离原则:
依赖倒转原则:
多与接口发生依赖而不是具体的类
里氏替换 :
开闭原则(ocp):
创建者可以添加功能,但是使用者的代码不需要改动。
迪米特法则:
合成复用:
B若是想要A的方法:
UML:统一建模语言:
符号:
依赖:
泛化:
实现:
关联:
聚合:
组合:
设计模式:
单例:一个类只有唯一一个对象实例
饿汉式(静态常量):
饿汉式(静态代码块)
以上缺点是:无法实现懒加载
懒汉式(线程不安全):
懒汉式(线程安全):
双重检查(2个if)(推荐):
静态内部类(推荐):
在加载外部类时不会加载静态内部类从而实现懒加载,只有当调用getIstance方法时才会加载它。
枚举(推荐):
简单工厂模式:
不直接自己生产东西,而是委托一个工厂来生产东西, 到时候直接调用工厂的方法
Pizza类:
具体的Pizza:
创建一个专门用于生产某种pizza的工厂类:
建立一个订购pizza的类:
参数是System.in
建立一个类用于发出订购请求 :
使用静态进行变形:
工厂方法模式:
一个抽象工厂,多个具体工厂来实现方法
类图:
具体的pizza:
抽象工厂:
具体工厂:
执行:
抽象工厂模式:实现上面需求
类图:
一个工厂接口,多个具体工厂实现“”
接口:
工厂子类:
应用: