泛型
Java中的泛型,只在编译阶段有效。再编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
定义泛型接口
interface Generator<T>
{
T next();
}`
如果实现接口时指定接口的泛型的具体数据类型,这个类实现接口所有的方法的位置都要泛型替换实际的具体数据类型
无返回值的泛型方法
public <t> void test(T s)
{
T t=s;
}
有返回值的泛型方法
public <T> T test1(T s)
{
return s;
}
形参为可变参数的泛型方法
public <t> void test2(T……str>
{
for(T s:strs)
{
System.out.println(s);
}
在静态方法中,不能使用类定义的泛型,如果要使用泛型,只能使用静态方法自己定义的泛型。
泛型方法,在调用之前没有固定的数据类型
在调用时,传入的参数是什么类型,就会把泛型改成什么类型
也就是说,泛型方法会在调用时确定泛型具体数据类型
通配符
当不确定集合中的元素具体的数据类型,使用?表示所有类型
public void test(List<?> list)
{
System.out.println(list);
}
枚举类
enum SeasonEnum
{
SPRING("春天","春天来了"),
SUMMER("夏天","夏天到了"),
AUTUMN("秋天","秋天到了"),
WINTER("冬天","冬天来了");
private final String seasonName;
private final String seasonDesc;
private SeasonEnum(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
public void showInfo(){
System.out.println(this.seasonName+":"+this.seasonDesc);
}
}
public class Test {
public static void main(String[] args) {
SeasonEnum sea=SeasonEnum.SPRING;
sea.showInfo();
SeasonEnum sea1=SeasonEnum.SPRING;
System.out.println(sea.equals(sea1));
}
}
说明每次执行SeasonEnum.SPRING获得是相同的对象,枚举类中的每个枚举都是单例模式
注解
IO流
File 类
File f1=new File("D:\\test\\abc\\tt.text");
File f2=new File("D:/test/abc/tt.text");
File f3=new File("D:"+File.separator+"test\\abc\\tt.text");
File f4=new File("D:\\test","abc\\tt.text");
递归遍历忘文件
public void test(File file){
if(file.isFile()){
System.out.println(file.getAbsolutePath()+"是文件”);
}else{
System.out.println(file.getAbsoultePath()+"是文件夹");
File[] fs=file.listFiles();
of(fs!=null&&fs.length>0){
for(File ff:fs){
test(ff);
}
}
注意:文件字节流非常通用,可以用来操作字符的文档,还可以操作任何的其他类型文件(图片,压缩包等等),引用字节流直接使用二进制
package com.max.day01;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws FileNotFoundException {
/*testFileInput();*/
copyFile("D:\\IDEA-2020\\测试\\test.text","D:\\IDEA-2020\\测试\\测试1\\test.text");
}
public static void testFileInput(){
try {
FileInputStream in=new FileInputStream("D:\\IDEA-2020\\测试\\test.text");
byte[] b=new byte[10];
int len=0;
while((len= in.read(b))!=-1){
System.out.println(new String(b,0,len));
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void testFileOutput(){
try {
FileOutputStream out=new FileOutputStream("D:\\IDEA-2020\\测试\\test1.text");
String str="This is java !";
out.write(str.getBytes());//将数据写进内存
out.flush();//将内存刷进硬盘
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void copyFile(String inPath,String outPath){
try {
FileInputStream in=new FileInputStream(inPath);
FileOutputStream out=new FileOutputStream(outPath);
byte []b=new byte[100];
int len=0;
while((len=in.read(b))!=-1)
{
out.write(b,0,len);
}
out.flush();
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:定义文件路径时,可以用“/“或者“\”。在写入一个文件时,如果目录下有同名文件将被覆盖。在读取文件时,必须保证该文件已存在,否则出异常。
注意:缓冲流是把数据缓冲到内存中
转换流的编码格式要一致,否则会出现乱码
当字节流中都是字符时,将字节流转换成字符流输出效率更高
public static void writeToText()throws Exception
{
InputStreamReader is=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(is);
BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\IDEA-2020\\学习\\src\\com\\max\\day02\\tt4.text"));
String line="";
while((line=br.readLine())!=null){
if(line.equals("over")){break;}
bw.write(line);
}
bw.flush();
bw.close();
br.close();
is.close();
}
验证控制台内容与已存在的文件是否相同
public static void checkUser()throws Exception{
InputStreamReader is=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(is);
BufferedReader br1=new BufferedReader(new FileReader("D:\\IDEA-2020\\学习\\src\\com\\max\\day02\\tt4.text"));
String pUser=br1.readLine();
String pWord=br1.readLine();
System.out.println("请输入用户名账号:");
String nUser=br.readLine();
System.out.println("请输入登录密码:");
String nWord=br.readLine();
if(pUser.equals(nUser)&&pWord.equals(nWord)){
System.out.println("登录成功!");
}else {
System.out.println("用户名密码输入错误!");
}
}
将控制台内容写入文件,再与另一个文件作比较
public static void isExistText()throws Exception
{
InputStreamReader is=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(is);
BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\IDEA-2020\\学习\\src\\com\\max\\day02\\tt5.text"));
String line="";
while((line=br.readLine())!=null){
if(line.equals("over")){break;}
bw.write(line);
bw.newLine();
}
bw.flush();
BufferedReader br1=new BufferedReader(new FileReader("D:\\IDEA-2020\\学习\\src\\com\\max\\day02\\tt4.text"));
String pUser=br1.readLine();
String pWord=br1.readLine();
BufferedReader br2=new BufferedReader(new FileReader("D:\\IDEA-2020\\学习\\src\\com\\max\\day02\\tt5.text"));
String nUser=br2.readLine();
String nWord=br2.readLine();
if(pUser.equals(nUser)&&pWord.equals(nWord)){
System.out.println("登录成功!");
}else {
System.out.println("pUser:"+pUser+",pWord:"+pWord);
System.out.println("nUser:"+nUser+",nWord:"+nWord);
System.out.println("用户名密码输入错误!");
}
br2.close();
br1.close();
bw.close();
br.close();
is.close();
}
注意:对象的序列化与反序列化使用的类要严格要求一致,包名,类名,类机构等等所有都要一致!
RandomAccessFile类
注意:每一行的数据后面还有个“\n”算一位