Arrays实用功能
public class ArraysFunc {
public static void main(String[] args) {
int[] i = new int[7];
int[] j = new int[10];
Arrays.fill(i, 47);//填充,可选范围
Arrays.fill(j, 99);
System.out.println("i="+Arrays.toString(i));//转换成字符串打印
System.out.println("j="+Arrays.toString(j));
System.arraycopy(i,0,j,0,i.length);//复制,可选范围
System.out.println("j="+Arrays.toString(j));
System.out.println(Arrays.equals(i,j));//比较
i = new int[]{4,1,2,3,5};
System.out.println(Arrays.binarySearch(i, 4));//二分查找,未排序,可选范围
List intList=Arrays.asList(i); //intList中就有一个Integer数组类型的对象,整个数组作为一个元素存进去的
for(Object o:intList){//就一个元素
System.out.println(o.toString());
}
Integer ob[]={4,1,2,3,5};
List<Integer> objList=Arrays.asList(ob); //数组里的每一个元素都是作为list中的一个元素
objList.add(7); //不能添加
for(int a:objList){
System.out.println(a);
}
}
}
Scanner
- 文本扫描器,可以使用正则表达式(作为结尾符)解析原始类型和字符串
- 默认使用空格和换行作为分隔符
- 常用构造函数string,stream,file
- 以控制台输入作为输入流传入 Scanner 的构造函数,那么这个方法会在有输入之前阻塞
public class UseScanner {
public static void main(String[] args) {
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.useDelimiter("s*fishs*");
while (s.hasNext()) {
System.out.println(s.next());
}
System.out.println("结束");//使用System.in构造,程序会一直阻塞到while循环里,出不来
s.close();
}
}
System
public class UseSystem {
public static void main(String[] args) throws IOException {
//System.arraycopy();//复制数组
System.out.println(System.currentTimeMillis());//ms时间戳
System.getProperties().list(System.out);//获取当前的各种系统属性
System.out.println(System.getProperty("user.dir"));//获取工程路径
Map<String,String> map = System.getenv();//当前系统环境的不可修改的字符串映射视图
for (String key :
map.keySet()) {
System.out.println("key:"+key+" value:"+map.get(key));
}
}
}
LocalDateTime
public class DateTime {
public static void main(String[] args) {
System.out.println(LocalDate.now()); //系统日期
System.out.println(LocalDate.of(1997,3,20)); //特定日月年of
System.out.println(LocalDate.parse("1997-03-20")); //特定日月年parse,中间必须用-
System.out.println(LocalTime.parse("06:30")); //特定时分秒parse,中间必须用:
System.out.println(LocalDateTime.parse("2015-02-20T06:30:00"));//中间必须有T
System.out.println(LocalDateTime.now());//默认带T
System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));//不可修改对象,返回新的
Period period = Period.between(LocalDate.of(2019, 10, 10), LocalDate.of(2020, 10, 20));
System.out.println("相差年: "+period.getYears()+" 相差月 :"+period.getMonths() +" 相差天:"+period.getDays());
//相差年: 1 相差月 :0 相差天:10
Duration duration = Duration.between(LocalTime.of(10, 30, 00), LocalTime.of(20, 00, 00));
System.out.println("相差时: "+duration.toHours()+" 相差分 :"+duration.toMinutes() +" 相差秒:"+duration.toMillis());
//相差时: 9 相差分 :570 相差秒:34200000
Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now());//LocalTime转时间戳
System.out.println(timestamp.getTime());//毫秒时间戳
System.out.println(timestamp.toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));//时间戳转LocalTime
}
}
}
- 时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数
- 为什么使用时间戳:在数据库系统中,不同的数据库对时间类型有不同的解释,如Oracle中的date和mysql中的date就不能直接兼容转换,为实现跨平台性,将时间记录为unix时间戳
Gson
public class GsonLearn {
public static void main(String[] args) {
Gson gson = new Gson();
String jsonString = gson.toJson(new Student("tianlu",23)); //对象转json
System.out.println(jsonString);
Student objFromJson = gson.fromJson(jsonString, Student.class); //json转对象
System.out.println(objFromJson);
List<Student> stuList = new ArrayList<Student>();
stuList.add(new Student("tianlu", 23));
stuList.add(new Student("haha", 24));
String listJson = gson.toJson(stuList); //对象数组转json
System.out.println(listJson);
Type stuListType = new TypeToken<ArrayList<Student>>(){}.getType();
List<Student> fromJson = gson.fromJson(listJson,stuListType); //json转对象数组
System.out.println(fromJson);
}
}
class Student{
public String name;
public int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
Junit
JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation:
@Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)
@After:释放资源 对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所有方法执行一次)
@Test:测试方法,在这里可以测试期望异常和超时时间
@Test(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常
@Ignore:忽略的测试方法
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@AfterClass:针对所有测试,只执行一次,且必须为static void
一个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每一个测试方法的调用顺序为:
@Before -> @Test -> @After;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。