静态引用
导入(import)表示去找哪一个类,去哪一个包下去找哪些被使用到的类。
在java中有一个语言核心包:java.lang.
使用java.lang包中的API,不需要引用,直接能找到,但是,如果我们使用到的API不呼吁java.lang包甚至java.lang的字包(java.lang.reflect),此时,我们就得把使用到的API引入到当前的java文件中
语法:
import 被引用类的全限定名
如:import包*:去哪个包下去找哪些被使用到的类,此时,并不是说*就表示指定包中所有的类/接口,而是指在当前文件夹中使用到的属于该包的API(通俗来讲就是用到的时候才会去指向需要的类/接口)。
如果我们需要使用某一个类中的静态成员(字段/方法,内部类),此时我们有更加简单的方式来引用
语法:
import static 被引入类的全限定名.静态的成员
如:import java.util.Date;
import static 被引入类的全限定名.*
静态引入,属于语法糖,仅仅是为了方便程序猿操作简单,在开发中不推荐使用静态引用,因为都不知道静态成员到底来源于哪一个类
练习代码:
package com.test;
import static java.lang.Math.PI;
import static java.util.Arrays.*;import java.util.ArrayList;
import java.util.List;
public class StaticDemo {public static void main(String[] args) {/*不用再Math.PI*/System.out.println(PI);List<Integer> a = new ArrayList<>();/*此时不用写Arrays.asList*/a=asList(1,4,2,3);/*从大到小排序传统写法*/
/* a.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o2, o1);}});*//*lambda表达式写法*/a.sort((o1,o2)->Integer.compare(o2, o1));System.out.println(a);}
}
本来想看看反编译后的内容,可惜jad出问题了就把视频中的图片截下来当做参考吧!
由图可看出编译后还是传统写法。
方法的可变参数
参考博客:点击打开链接
String的工具类StringUtil
参考博客:点击打开链接
foreach操作
1.foreach循环的语句格式
for(数据类型 变量名:对象)
{
//循环体为引用了变量的Java语句
}
注意:
a.其中变量名可以是任意的但是数据类型必须与遍历对象的数据类型相同。
b.对象为一个容器,例如数组或是集合等
c.无法再循环中改变对象中的值,即任何在循环体中改变对象中的值都是无效的,对象中的值不会被改变。这也是foreach循环较for循环的重要区别,foreach实现对象的遍历代码更加简洁,for循环可以改变对象中的值。
{
//循环体为引用了变量的Java语句
}
注意:
a.其中变量名可以是任意的但是数据类型必须与遍历对象的数据类型相同。
b.对象为一个容器,例如数组或是集合等
c.无法再循环中改变对象中的值,即任何在循环体中改变对象中的值都是无效的,对象中的值不会被改变。这也是foreach循环较for循环的重要区别,foreach实现对象的遍历代码更加简洁,for循环可以改变对象中的值。
2.代码实现
Set<String> set = new HashSet<String>();set.add("1");set.add("2");set.add("3");set.add("4");set.add("5");set.add(String.valueOf((int)Math.random()*10));for (String string : set) {System.out.println(string);}
foreach和Iterator选用
- for循环一般用来处理比较简单的有序的,可预知大小的集合或数组
- foreach可用于遍历任何集合或数组,而且操作简单易懂,他唯一的不好就是需要了解集合内部类型
- iterator是最强大的,他可以随时修改或者删除集合内部的元素,并且是在不需要知道元素和集合的类 型的情况下进行的(原因可参考第三点:多态差别),当你需要对不同的容器实现同样的遍历方式时,迭代器是最好的选择
package com.test;import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;public class MainDemo {public static void main(String[] args) {Set<String> set = new HashSet<String>();set.add("1");set.add("2");set.add("3");set.add("4");set.add("5");set.add(String.valueOf((int)Math.random()*10));System.out.println("------------之前状态---------------");for (String string : set) {System.out.println(string);}for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {String next = (String)iterator.next();Integer of = Integer.valueOf(next);if(of>3){iterator.remove();//删除操作}}System.out.println("-------------删除后的状态--------------");for (String string : set) {System.out.println(string);}}
}
自动装箱和拆箱的设计以及缓存设计
推荐博客:点击打开链接
泛型
我的文章:点击打开链接
枚举
推荐博客:点击打开链接
代码练习:
package com.test;
enum Week{Mon,Stu,THU,FOu,FIR,SAT,SUN;
}
public class xx {Week we;void setWeek(Week we){this.we=we;}Week getWeek(){return we;}public static void main(String[] args) {xx x = new xx();x.setWeek(Week.Mon);if(x.getWeek().equals(Week.Mon)){System.out.println("星期一");}//Switch支持枚举类型switch(x.getWeek()){case Mon:System.out.println("星期一");break;case Stu:System.out.println("星期二");break;case THU:System.out.println("星期三");break;default :break;}//获取枚举对象Week wk = Week.valueOf("Mon");System.out.println(wk);String str ="hello";switch(str){}}
}