IO流相关
多线程
解决方法:线程同步机制(线程排队执行,不能并发)
线程安全问题:
第三种创建线程的方法:FutherTask类+实现Callable接口。
优点是可以获得线程执行结果,缺点是效率较低(等待返回值时可能会造成主线程阻塞)
拿到返回值:
反射机制![在这里插入图片描述](https://img-blog.csdnimg.cn/23b15b070fb948f489c9cb5cab67bc4b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzA0NzU1Mw==,size_16,color_FFFFFF,t_70)
获取class文件的方式:
方法一:静态forName()方法
方法二:getClass()方法
方法三:类型+.class
快速获取properties文件内容:ResourceBundle
总结
反射机制的优点:
结合Properties, String className =Pro.getProperties(ClassName)
Class c=Class.forName(className)
Object o=c.newInstance() 注意:底层相当于调用无参构造!
forName()方法的执行会导致类加载,类加载的时候静态代码块执行。
【重要!】一种获取绝对路径的通用方法:(文件必须在类路径下,即src目录;name从src开始写)
JDK中的类加载器:
优先级:启动类加载器(父加载器)—>扩展类加载器(母加载器)—>应用类加载器
称为双亲委派机制
注解:
元注解:
RUNTIME可以被反射机制使用。
注解中的属性可以是哪些类型?
注:属性名value可省略,数组只有一个元素,“{}”可省略。
判断类上是否有该注解:
Class c = Class.forName("com/practice/MyAnnotation");
System.out.println(c.isAnnotationPresent(MyAnnotation.class));
true