zoukankan      html  css  js  c++  java
  • Java学习笔记(19)

    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 文件名过滤器

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

  • 相关阅读:
    浅谈PHP7新特性
    TP5与TP3.X对比
    深入源码理解Spark RDD的数据分区原理
    OpenGL的一些基础概念
    关于Spark RDD 的认识
    Ubuntu安装Cloudera Manager以及CDH5.15.2
    小甲鱼零基础汇编语言学习笔记第六章之包含多个段的程序
    小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令
    机器学习入门之决策树算法
    机器学习的基本概念
  • 原文地址:https://www.cnblogs.com/zhangwugai/p/10816763.html
Copyright © 2011-2022 走看看