丨你微笑时好美丶

博客园 首页 联系 订阅 管理

jdk1.5新特性之------静态导入

静态导入的作用:简化书写
静态导入的格式:
  import static 包名.类名.静态的成员
静态导入可以作用于一个类的所有静态成员

静态导入要注意的事项:
  1.如果静态导入的成员与本类的成员存在同名的情况下,那么默认使用本类的静态成员,如果需要指定使用静态导入的成员,那么需要在静态导入的成员前面加上类名

package cn.itcast.jdk15;

import java.util.ArrayList;
import java.util.Collections;
/*
 
  jdk1.5新特性之------静态导入
  
  静态导入的作用:简化书写
      静态导入的格式:
          import static 包名.类名.静态的成员
 静态导入可以作用于一个类的所有静态成员
  
  静态导入要注意的事项:
      1.如果静态导入的成员与本类的成员存在同名的情况下,那么默认使用本类的静态成员,如果需要指定使用静态导入的成员,那么需要在静态导入的成员前面加上类名
  
  */
/*import static java.util.Collections.sort;
import static java.util.Collections.binarySearch;
import static java.util.Collections.max;*/
import static java.util.Collections.*;
public class Demo1Static {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Integer> list=new ArrayList<Integer>();
        list.add(13);
        list.add(9);
        list.add(10);
        list.add(19);
        
        //排序
        Collections.sort(list);
        System.out.println("集合的元素:"+list);
        System.out.println("索引值:"+binarySearch(list, 13));
        System.out.println("最大值:"+max(list));
    }
    
    public static void sort(ArrayList<Integer> list) {
        System.out.println("本类的sort方法");
    }
}

结果:
集合的元素:[9, 10, 13, 19]
索引值:2
最大值:19

增强for循环
作用:简化迭代器的书写格式
适用范围:如果是实现了Iterable接口的对象或者是数组的对象都可以使用增强for循环
格式:
for (数据类型 变量名:遍历的目标) {

}

 

package cn.itcast.jdk15;

import java.util.HashSet;
import java.util.Iterator;

/*
 
  增强for循环
      作用:简化迭代器的书写格式    (注意:增强for循环的底层还是使用了迭代器遍历。)
      适用范围:如果是实现了Iterable接口的对象或者是数组的对象都可以使用增强for循环     自定义类只要实现了Iterable接口也可以使用
      格式:
          for (变量类型 变量名:遍历的目标) {
          
          }
  增强for循环要注意的事项:
      1.增强for循环底层也是使用了迭代器获取的,只不过获取迭代器由jvm完成,不需要我们获取迭代器而已,所以在使用增强for循环遍历元素的过程中不准使用集合对象对集合的个数进行修改
      2.迭代器遍历元素与增强for循环遍历元素的区别:使用迭代器遍历集合的元素时可以删除集合的元素,而增强for循环遍历集合的元素时,不能调用迭代器的remove方法删除元素
      3.普通for循环与增强for循环的区别:普通for循环可以没有b遍历的目标,而增强for循环一定要由遍历的目标
      4.Map集合不能直接使用增强for循环,因为没有实现Iterable接口,但是可以借助entrySet方法来变成Set集合使用
 
  */
public class Demo2For {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashSet<String> set=new HashSet<>();
        //添加元素
        set.add("狗娃");
        set.add("狗剩");
        set.add("铁蛋");
        
        //迭代器
        /*Iterator<String> it=set.iterator();
        while (it.hasNext()) {
            System.out.println("元素:"+it.next());
        }*/
        
        //使用增强for循环
        for (String item:set) {
            System.out.println("元素:"+item);
        }
        
        int[] arr= {12,5,6,1};
        //使用增强for循环实现的
        for (int item:arr) {
            System.out.println("元素:"+item);
        }
    }

}

结果:
元素:狗娃   
元素:铁蛋
元素:狗剩
元素:12
元素:5
元素:6
元素:1

 凡是数组的内存地址都是以中括号开始的

可变参数:

可变参数的格式是:
  数据类型... 变量名

可变参数要注意的细节:
  1.如果一个函数的形参使用了可变参数之后,那么调用gai该方法的时候可以传递参数也可以不传递参数
  2.可变参数实际上是一个数组对象
  3.可变参数必须位于形参中的最后一个
  4.一个函数最多只能有一个可变参数,因为可变参数要位于形参中的最后一个位置上

package cn.itcast.jdk15;
/*
 凡是数组的内存地址都是以中括号开始的
  可变参数:
  
  可变参数的格式是:
          数据类型...    变量名
  可变参数要注意的细节:
      1.如果一个函数的形参使用了可变参数之后,那么调用gai该方法的时候可以传递参数也可以不传递参数
      2.可变参数实际上是一个数组对象
      3.可变参数必须位于形参中的最后一个
      4.一个函数最多只能有一个可变参数,因为可变参数要位于形参中的最后一个位置上
      
  */
public class VariableParameters {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*int[] arr= {1,2,3,45,8,6,7};
        add(arr);*/
        add(1,2,3,45,8,6,7);
    }

    public static void add(int... arr) {
        int result=0;
        for (int item:arr) {
            result+=item;
        }
        System.out.println("总和:"+result);
    }
}

结果:
总和:72

 

自动装箱与拆箱:

自动把Java中的基本数据类型数据转换成对象类型数据

自动把引用类型的数据转换成基本类型的数据

Integer类内部维护了缓冲数组,该缓冲数组存储的-128-127在一个数组中,如果你获取的数据是落入在这个范围之内的,那么就直接从该缓冲区中获取对应的数据

 

枚举值:某些方法所接受的数据必须是在固定范围之内的,这时候我们的解决方案就是自定义一个类解决,然后私有化构造函数,在自定义中创建本类的对象对外使用

package cn.itcast.jdk15;

public class Demo6 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person p=new Person();
        p.setName("狗娃");
        p.setSex(Gender.woman);
        System.out.println("名字:"+p.getName()+" 性别:"+p.getSex().value);
    }

}
class Person {
    private String name;
    private Gender sex;
    
    public Person() {}
    /*public Person(String name, String sex) {
        super();
        this.name = name;
        this.sex = sex;
    }*/
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public Gender getSex() {
        return sex;
    }

    public void setSex(Gender sex) {
        this.sex = sex;
    }
    
    
}
//自定义一个性别类
class Gender {
    String value;
    
    public static final Gender man=new Gender("男");
    public static final Gender woman=new Gender("女");
    
    private Gender(String value) {
        super();
        this.value = value;
    }
    
}

结果:
名字:狗娃 性别:女

枚举类:

定义格式:

  enum  类名{

    //枚举值

  }

枚举要注意的事项:

  1. 枚举类也是一个特殊的类
  2. 枚举值默认的修饰符是public static final
  3. 枚举值的数据类型是枚举值所属类的数据类型,然后枚举值是指向了本类的对象的
  4. 枚举类的构造方法默认的修饰符是private
  5. 枚举类可以定义自己的成员变量与成员函数
  6. 枚举类可以自定义构造函数,但是构造函数的修饰符必须是private
  7. 枚举累可以存在抽象的方法,但是必须实现这种抽象的函数
  8. 枚举值必须要位于枚举类的第一个语句

switch 语句也可以使用枚举类型

注意:case语句后面跟的枚举值,只需要单写枚举值即可,不需要再声明该枚举值是属于哪个枚举类的

 

IO流:

IO技术主要解决设备与设备之间的数据传输问题

FIle类可以描述yi一个文件或者一个文件夹

public class Demo1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //File file=new File("E:\\QQ.jar");
        File parentFile=new File("E:\\");
        File file=new File(parentFile, "QQ.jar");
        File file2=new File("E:\\", "QQ.jar");
        System.out.println("存在吗?"+file.exists());//判断该文件是否存在,存在返回true,不存在返回false
        
    }

}

结果:
存在吗?true

目录分隔符:

在Windows机器上的目录分隔符是\,在Linux机器上是/

注意:在Windows上面\与/都可以使用作为目录分隔符。而且,如果使用/,只需要写一个即可。

路径问题:

绝对路径:该文件在硬盘上的完整路径。绝对路径一般都是以盘符开头的。

相对路径:相对路径就是资源文件相对于当前程序所在的路径

. 当前路径

..上一级路径

 注意:如果程序当前所在的路径y与资源文件不在同一个盘下面,是没法写相对路径的。

 

创建:

   createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在就不创建然后返回false

      mkdir()         在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。

      mkdirs()     在指定位置创建目录,这会创建路径中所有不存在的目录。

      renameTo(File dest)   重命名文件或文件夹,也可以操作非空的文件夹,文件不同时相当于文件的剪切,剪切时候不能操作非空的文件夹。移动/重命名成功则返回true,失败则返回false。

renameTo:如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名,如果目标文件与源文件不是在同一个路径下,那么renameTod的作用就是剪切,而且还不能操作文件夹。

重命名可以操作文件夹

删除:

delete()     删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回false。

deleteOnExit()  在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除

delete方法不能用于删除非空的文件夹,会马上删除一个文件

判断:

exists()     文件或文件夹是否存在。

      isFile()     是否是一个文件,如果不存在,则始终为false。

      isDirectory()   是否是一个目录,如果不存在,则始终为false。

      isHidden()      是否是一个隐藏的文件或是否是隐藏的目录。

      isAbsolute() 测试此抽象路径名是否为绝对路径名。

获取:

getName()    获取文件或文件夹的名称,不包含上级路径。

getPath()       返回绝对路径,可以是相对路径,但是目录要指定

getAbsolutePath()  获取文件的绝对路径,与文件是否存在没关系

length()     获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。

getParent()     返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。

lastModified()  获取最后一次被修改的时间。

   文件夹相关:

staic File[] listRoots() 列出所有的根目录(Window中就是所有系统的盘符)

list()                返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。

list(FilenameFilter filter)  返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

listFiles()              返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。

listFiles(FilenameFilter filter)   返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

package cn.itcast.file;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file=new File("E:\\a.txt");
        System.out.println("文件的大小:"+file.length());
        long last=file.lastModified();
        Date date=new Date(last);
        SimpleDateFormat simple=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        System.out.println("文件最后一次修改时间:"+simple.format(date));
    }

}


结果:
文件的大小:4
文件最后一次修改时间:2019年07月13日 11:00:34

FilenameFilter 文件名过滤器

建议使用文件名过滤器,这样的话就可以复用

 

posted on 2019-07-13 12:43  丨你微笑时好美丶  阅读(208)  评论(0编辑  收藏  举报