day11
为什么要有泛型?
泛型的使用:泛型类
自己定义一个泛型类
/*
此次的泛型T可以任意的取名,A,B,V
一般使用T,意义为type
*/
public class A<T> {
private T key;
public void setKey(T key){
this.key = key;
}
public T getKey(){
return this.key;
}
}
什么都不写<string,int>,则是object类型
泛型的使用:2泛型接口
如果已经传入实参了呢?
B1 B2用起来什么区别呢?(B2已经确定好了是string)
但是最主要的还是实现接口的差别
泛型的使用:3泛型方法
如果是带泛型的类
调用
泛型通配符
有限制的通配符
1、
调用
2、
3、接口
在class Dd里。
枚举类
原有的方法:(单例模式?忘了)
public class Season1 {
private final String NAME;
private final String DESC;
final static Season1 spring = new Season1("春天", "春暖花开");
final static Season1 summer = new Season1("夏天", "炎炎夏日");
final static Season1 autumn = new Season1("秋天", "秋高气爽");
final static Season1 winter = new Season1("冬天", "寒风凛冽");
private Season1(String name, String desc){
this.NAME = name;
this.DESC = desc;
System.out.println(this.NAME + ": " + this.DESC);
}
public static Season1 getSpring(){
return spring;
}
public static Season1 getSummer(){
return summer;
}
}
public class Test {
public static void main(String[] args) {
Season1.getSpring();
Season1.getSummer();
}
}
/*
春天: 春暖花开
夏天: 炎炎夏日
秋天: 秋高气爽
冬天: 寒风凛冽
*/
使用enum定义枚举类
enum Season{
//每一个小的枚举,都是在调用构造方法。返回的是枚举对象
//此处相当于在调用有参的私有构造private Season(String name, String desc)
SPRING("春天", "春暖花开"),
SUMMER("夏天", "炎炎夏日"),
AUTUNMN("秋天", "秋高气爽"),
WINTER("冬天", "寒风凛冽");
private final String name;
private final String desc;
private Season(String name, String desc){
this.name = name;
this.desc = desc;
}
public void showInfo(){
System.out.println(this.name + ": " + this.desc);
}
}
public class TestEnum {
public static void main(String[] args) {
//Season.SPRING;这段执行就是获取一个season的对象
Season spring = Season.SPRING;
spring.showInfo();
Season summer = Season.SUMMER;
summer.showInfo();
//每次执行Season.SPRING获得的是相同的对象,枚举类中的每个枚举都是单例模式的
Season spring1 = Season.SPRING;
System.out.println(spring.equals(spring1));
}
}
//春天: 春暖花开
//夏天: 炎炎夏日
//true
实现接口的枚举类
- 和普通java类一样,枚举类可以实现一个或多个接口;
- 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法。
定义接口
interface InterfaceDemo {
void test();
}
实现方法
public class EnumDemo {
public static void main(String[] args) {
Season spring = Season.SPRING;
spring.showInfo();
Season spring1 = Season.SPRING;
spring1.showInfo();
System.out.println(spring.equals(spring1));
spring1.test();
}
}
//实现接口
enum Season implements InterfaceDemo{
SPRING("春天", "春暖花开"),
SUMMER("夏天", "炎炎夏日"),
AUTUNMN("秋天", "秋高气爽"),
WINTER("冬天", "寒风凛冽");
private final String name;
private final String desc;
private Season(String name, String desc){
this.name = name;
this.desc = desc;
}
public void showInfo(){
System.out.println(this.name + ": " + this.desc);
}
@Override
public void test() {
System.out.println("这是实现的ITest接口的test方法");
}
}
/*
春天: 春暖花开
春天: 春暖花开
true
这是实现的ITest接口的test方法
*/
枚举类的方法(一般不用)
注解
概述
- 从JDK5.0开始,java增加了对元数据(matedata)的支持,也就是annotation(注释)。
- annotation其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
- annotation可以像修饰符一样被使用,可用于修饰包、类、构造方法、方法、成员变量、参数、局部变量的声明,这些信息被保存在annotation的“name=value”对中。
- annotation能被用来为程序元素(类、方法、成员变量等)设置元数据。
基本的annotation
- 使用annotation时要在其前面增加@符号,并把该annotation当初一个修饰符使用。用于修饰它支持的程序元素。
- 三个基本的annotation:
- @Override:限定重写父类方法,该注释只能用于方法;
- @Deprecated:用于表示某个程序元素(类、方法等)已经过时;
- @SuppressWarnings:抑制编译器警告。
自定义annotation
一般用不到!
day12
io主要内容
File类_1
File类智能操作文件本身,但是不能操作文件内容。类似于,你可以把一个日记本放在各种地方,但是在日记本中写文件。
访问文件名
文件检测
File类_2
相关操作
File类递归遍历文件
io与io流体系
JAVA IO原理
不论输入还是输出,都是指的计算机。
流的分类
文件字节流
文件字节输入流
in.read读取的长度赋值给len,判断是否等于-1,==就是读完了。
文件字节输出流
从jvm里出来就是对文件的写入?
字节流复制文件
文件字节流练习:编写一个程序,把一个文件复制到指定文件夹下。
更通用
文件字符流
输入流
文件字符输入流FileReader
文件字符输出流FileWriter
copy文件
注意
定义文件路径时,可以使用“/”或者“\\”,
在写入一个文件时,如果目录下有同名文件将被覆盖。
在服务文件时,必须保证该文件已存在,否则出异常。