1、java提供了一种带标签的 break ,可以用于任何可以用break跳出的地方,标签必须放在希望跳出的最外层语句之前,后面以冒号结尾,例如:
//a就是标签,有了这个标签,该循环就不会是死循环
a:
while(true) {
System.out.println(1);
while(true) {
System.out.println(2);
break a;
}
}
==========================================================================
int i = 0;
a:
if (true) {
switch (i) {
case 0:
System.out.println(i);
break a;
}
System.out.println("if语句内!");
}
System.out.println("if语句外!");
}
2、同样的,还有一种带标签的continue语句,将跳到与标签匹配的循环首部,例如:
a:
for (int k = 0; k < 5; k++) {
System.out.println("k:"+k);
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue a;
}
System.out.println("i:" + i);
}
}
//i只能输出0和1,因为当i=2的时候,会返回最外层循环
3、当时用BigInteger或者BigDecimal类的时候,无法使用 '+','-',' * ',' / ',' % ' 这五种运算符,java除了对字符串的拼接重载了 '+' 运算符之外,并没有为其他运算符提供重载,也没有给java程序员在自己的类中重载运算符的机会,对应的在上述两个类中提供了 add,subtract,multiply,divide,mod 方法来提供五种运算方法;
BigInteger a=BigInteger.valueOf(6);
BigInteger b=BigInteger.valueOf(2);
System.out.println("加法:"+a.add(b));
System.out.println("减法:"+a.subtract(b));
System.out.println("乘法:"+a.multiply(b));
System.out.println("除法:"+a.divide(b));
System.out.println("求余:"+a.mod(b));
//BigDecimal中的方法类似上述例子
//BigDecimal中divide方法中的舍入方式请看博客Tips1
4、有个更加简单的便利数组的方式:
int[] arr= {12,23,4,5,6,16};
System.out.println(Arrays.toString(arr));
//输出:[12, 23, 4, 5, 6, 16]
int[][] arr={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
System.out.println(Arrays.deepToString(arr));
//输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
5、Arrsys类中有一个用于拷贝数组的方法,copyOf( ),第一个参数是需要拷贝的数组,第二个是新数组的长度,通过此方法拷贝的数组是一个全新的数组,通过此方法可以实现数组的扩容,也就是实现长度可变的数组,实际上集合底层就是这么做的,而用 '=' 拷贝的数组只是传递的引用,如果原本数组中的元素改变,新数组中的元素也会跟着改变;
6、Date,SimpleDateFormat,LocalDate
//Date类一般用来表示全球通用的公历日期,侧重表示是时间点
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
System.out.println(format.format(date));
//LocalDate类用来表示日期
//获得当前日期
System.out.println(LocalDate.now());
//使用指定的日期构造一个对象
LocalDate birthday = LocalDate.of(1992, 10, 10);
//plusDays方法会得到一个距当前日期对象指定天数的一个新的日期
LocalDate plusDays = birthday.plusDays(1000);
//获得plusDays的年月日
System.out.println(plusDays.getYear());
System.out.println(plusDays.getMonthValue());
System.out.println(plusDays.getDayOfMonth());
//获得周几
System.out.println(plusDays.getDayOfWeek());
//获得是一年当中的第几天
System.out.println(plusDays.getDayOfYear());
7、实际上Date类也有getDay,getYear以及getMonth等方法,但是并不推荐大家使用,因为这些方法曾经或者已经被标记为废弃不用或者已过时,因为类库的设计者已经意识到,应该提供单独的类来处理日期,虽然目前仍然可以使用,但有可能在将来某个版本的类库版本会彻底删除这些方法,难道到时候你要重新设计你的程序吗?
8、
9、日历
//获取当前时间,获得当前月与日
LocalDate now = LocalDate.now();
int month = now.getMonthValue();
int today = now.getDayOfMonth();
/**
* 获得距当前日-1天之前的日期
* 之后再获得date当天是周几
* 周一对应1,周日对应7,以此类推
*/
LocalDate date = now.minusDays(today-1);
DayOfWeek dayOfWeek = date.getDayOfWeek();
int value = dayOfWeek.getValue();
//打印日历表头
System.out.println("Mon\tTue\tWed\tThu\tFri\tSat\tSun");
for(int i=1;i<value;i++) {
System.out.print(" \t");
}
/**
* 开始循环,迭代条件是当月第一天累加1,循环条件是累加1之后的日期在当月内
*/
while(date.getMonthValue()==month) {
//如果日期为当天,则以x代替,否则打印日期
if(date.getDayOfMonth()==today) {
System.out.printf("%3s\t","x");
}else {
System.out.printf("%3d\t",date.getDayOfMonth());
}
//星期日之后执行换行
if(date.getDayOfWeek().getValue()==7) {
System.out.println();
}
date=date.plusDays(1);
}
10、集合的遍历推荐使用foreach或迭代器,foreach隐式的使用了迭代器,不推荐使用get方法,因为效率太低下;
11、可变长参数列表实际上就是数组,可以用asList方法,将可变长参数列表放入一个线性表内,或者可以用toArray方法,将线性表转换为数组;
12、Comparable接口用于比较实现了该接口,并重写了compareTo方法的对象;
Comparator接口比较的是没有实现Comparable接口,但实现了Comparator接口,并重写了compare方法的对象;
Comparable接口比较被称为自然顺序比较,Comparator接口比较被称为比较器比较;