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 类名{
//枚举值
}
枚举要注意的事项:
- 枚举类也是一个特殊的类
- 枚举值默认的修饰符是public static final
- 枚举值的数据类型是枚举值所属类的数据类型,然后枚举值是指向了本类的对象的
- 枚举类的构造方法默认的修饰符是private
- 枚举类可以定义自己的成员变量与成员函数
- 枚举类可以自定义构造函数,但是构造函数的修饰符必须是private
- 枚举累可以存在抽象的方法,但是必须实现这种抽象的函数
- 枚举值必须要位于枚举类的第一个语句
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 文件名过滤器
建议使用文件名过滤器,这样的话就可以复用