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; 

贤魚
20 声望1 粉丝

如露亦如电