📄 day17.txt
字号:
CoreJava(day17) 2007-12-25 -- 李艳
5.0的新特性:
泛型:
形式:<这里的内容不确定>
优点:
1、类--->不想限定某属性的类型,泛型可实现 (类一级的泛型:课堂代码:TestG.java)
变量泛型==变量类型可变
2、泛型不需要Cast(强制类型转换):增强了java的类型安全,可以在编译期间对容器内的对象进行类型检查,在运行期不必进行类型的转换。
注意:1、泛型不支持直接去new对象
2、泛型不支持多态,既不支持左右边的多态,左边右边必须类型一致
3、静态属性不能是泛型的,静态方法不能直接使用泛型。
方法级的泛型 (课堂代码:TestMethodG.java)
public static <E> void test(E e){
//与下面代码不一样的是这里不是多态,不需要强制类型转换
System.out.println(e);
}
//在编译时,此方法与上边的方法被认为是一样的,所以不能同时存在。但若使用这个方法,则在运行时是需要强制类型转换的
public static void test(Object e){
}
方法级的泛型可以在静态中使用
泛型的通配: (课堂代码: TestAllG.java)
(1)<?> 代表所有类,仅用于传参, <E> 可用于其它地方
(2)<? extends 类> 代表本类以及子类, <E extends 类> 可用于其它地方
(3)<? super 类> 代表本类及本类的父类,?支持super, E无对应的,E不支持super
注意:多重继承可以这样使用 public static <E extends Number & Serializable> void test(E e){}
(课堂代码:MyClass.java)
//可以用泛型整合多个接口/类的方法(增强了多态)
public static <E extends In1&In2> void test(E e){
e.test1();
e.test2();
}
泛型与异常:
(1)泛型可以extends Exception,但异常类却不支持泛型。 (课堂代码:TestExceptionG.java,MyException.java)
(2)泛型可以throws,但不支持catch
好处:(1)不需要cast(强制类型转换)
(2)可以限定集合中元素类型
(3)可以增强多态(继承多于接口而无需写继承类)
(4)保证参数有效
不可用:
(1)catch的括号中是不可用的
(2)new (不可用); 不能new一个泛型
(3)数组不可用泛型限定。例:E[] e=new E[10];//数组不能使用,无法初始化。
(4)static属性不能用泛型,静态的方法在返回值前可以用泛型,其它地方不可以用泛型。
(5)异常的子类中不可用(Throwable的子类)
(6)简单类型不可用。例:List<int> list;这是错误的
元数据(注释):
用于描述数据的数据
java.lang.annotation.Annotation 接口
java.lang.annotation.* +反射机制=元数据机制
(1)可以帮助编译器更好的工作
(2)完成参数配置(xml文件)
元数据与类代码一体,不需要再导入其它东西
xml配置,使代码分离,比较复杂的配置多用xml配置
元数据是在2004.9推出,xml是在1998年推出的,EJB3.0-->2005年
元数据的应用(会用)
三个sun公司内嵌的元数据:
@Override 方法覆盖 (课堂代码:TestStu.java)
@SuppressWarnings(String) 取消警告
@Deprecated 过时方法
自定义注释,说明(元数据) java.lang.annotation.Target
1.标记注释(使用时不需要传值)
@Override 用在覆盖方法前
@Deprecated 用在方法声明前,声明此方法已过期
2.单值注释(使用此注释时要传一个值)值可以是基本数据类型,String,枚举,以及它们的数组
@注释名(prameter=10)
int parameter
特例:
@注释名 (value “134” )
@SuppressWarnings(value={“ddd”,”aaa”,”ccc”})
@SuppressWarnings(value={"unchecked"}) //value可以省略,忽略警告
3.普通注释(多值注释)
(key1=value,……)
4.自定义注释
public @interface Test{
}
(1)new @interface(注释)可以有属性,类型为简单
在自定义注释时,要用注释来注释(描述)注释。有四种元注释即注释的注释
@Target(),用来描述(注释)注释所能够注释的程序员元素,描述这个注释将来用来注释什么。想使用Target必须导包java.lang.annotation.ElementType
@Retention(),描述(注释)注释要保留多久。定义一个注释的信息会保留到什么时候
SOURCE 被编译器丢弃的注释,自定义的注释不该写SOURCE
CLASS 存在.class文件中,但在类加载时丢掉
RUNTIME注释存进.class中,并在加载时也保留,一般情况下,自己写的注释,一定是RUNTIME
@Inherited指示注释被自动继承,是一个标记注释
@Documented 指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。
注释
(1)new @interface(注释):可以有属性
注释的属性类型可以是
8种基本类型
String
Enum
Annotation 注释对象,注释=接口
以及它们的数组
(2)为注释写注释:@Target,@Retertion(结合ElementType,RetentionPolicy)
(3)注释的使用:@名字(属性...)
(4)解析注释(用反射)
Class.forName()
getMethods(看情况)
做是否有了判断(isAnnotationPresent)
getAnnotation
并发线程池
java.util.concurrent 并发
java.util.concurrent.atomic 原子性(同步)
java.util.concurrent.locks 锁
线程池--->池--->空间(池所用)---->内存
重要的:java.util.concurrent包中
public interface Executor
public interface ExecutorService extends Executor 可以终止线程,可以提供线程池
public interface ScheduledExecutorService extends ExecutorService 可以计划做任务
public class Executors extends Object
Callable---->Runnable
call()----->run()
增强之处:
1、可获取信息:run()无返回值
call可返回任何对象
2、run()不可抛出异常,call()可抛任何异常
线程池编程:
Executors(入口)
newFixedThreadPool(个数)
得到ExecutorService(线程池)
submit(Callable c) ,得到Future---->get,cancel
java.util.concurrent.FutureTask<V>:在后台工作的类
java.util.concurrent.Semaphore:用于计数的类
java.util.concurrent.CountDownLatch:等待计数器。一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
原子性:当A改变时,B会被锁定
java.util.concurrent.locks.Lock
java.util.concurrent.locks.ReentrantLock 读写锁
core java 要掌握的:
1、基本编码能力(调错,API,编程的思路)
2、概念:
面向对象三大特性:
封装:私有化属性,提供公开的方法,在构造器中也要调用set方法,保证属性的有效和完整
继承:类与类、类与接口单继承,接口与接口多继承
多态:参数多态,类多态(父类可以指向自身,也可以指向子类)
重写:父类方法不能满足子类需要时重写
重载:
super: 父类
this: 本类
3、类库:
国际化
泛型
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -