------- android培训、java培训、期待与您交流! ----------
一、静态导入 :import static...
1.5以前如果调用一些类的静态方法,需要用类名.静态方法来调用
1.5以后可以直接静态导入类,直接调用其中的方法就可以了,不用写类名
事例需求:计算两个数的最大值和相减结果的绝对值。
1
2
3
4
5
6
7
8
9
10
|
package
lann.Day1;
import
static
java.lang.Math.*;
public
class
StaticImport {
public
static
void
main(String[] args) {
//比较两个数的最大值并打印,需要调用Math类中的静态方法
//1.5版本前是用Math.max(int x,int y)来完成的,出现静态导入后可以省略前面的Math了
System.out.println(max(
3
,
6
));
System.out.println(abs(
3
-
6
));
}
}
|
二、基本数据类型的自动装箱和拆箱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package
lann.Day1;
public
class
AutoBox {
public
static
void
main(String[] args) {
//1.5之前需要new Integer(3),1.5之后不需要了;
Integer iobj =
3
;
//自动装箱
//自动拆箱,因为iobj是对象引用,不能进行加法计算,所以会将对象自动转成基本数据类型
System.out.println(iobj +
3
);
//小例子,判断2个变量是否相等;
Integer i1 =
3
;
Integer i2 =
3
;
System.out.println(i1 == i2);
//结果为true,说明并没有在堆内存中开辟2个空间
//另一个类似的例子
Integer i3 =
129
;
Integer i4 =
129
;
System.out.println(i3 == i4);
//结果为false,说明开辟了新的空间
//总结:将一个数据封装成对象时,如果数据大小在一个字节内,也就是-127~128之间时,不会在堆内存中开辟新的空间,而是暂时存储到缓冲池中,再调用该数字时先在缓冲池中查找。
//因为对于一些小数据使用频率是很高的,如果每次都开辟空间的话对资源是一种浪费,为了尽可能的减少使用内存的次数,有了这种设计模式,叫做享元模式;
//享元模式:如果很多小的对象,他们有很多相同的属性,可以将这些相同的属性封装成一个对象,称为内部状态,对于那些不同的属性,把他们作为方法的参数传入,称为方法的外部状态
}
}
|
三、可变参数
在我们写程序时,会经常遇到某个方法需要传入很多参数,参数的个数不确定, 比如,计算几个数的和,但不确定几个数。
以往的思路是创建一个方法,然后通过重载来实现对应参数数的方法,比较麻烦,所以1.5以后出现可变参数。
特点:1、只能出现在参数列表的最后,后面不能再定义新的参数;
2、...位于参数类型和变量名之间;
3、调用可变参数方法是,编译器会为参数隐性创建一个数组,在方法体中以数组形式访问可变参数。
四、for循环增强
需求:写一个求和的方法,要求传入可变参数,并用到增强for循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package
lann.Day1;
public
class
VeriableParameter {
public
static
void
main(String[] args) {
System.out.println(add(
1
,
3
,
54
,
6
,
71
,
8
,
23
,
4
));
System.out.println(add(
12
,
33
,
52
,
6
,
72
,
8
,
23
,
4
));
}
//定义一个求和的方法
public
static
int
add(
int
x,
int
... args){
int
sum =
0
;
//for循环增强
for
(
int
i : args) {
sum += i;
}
System.out.println(sum);
//普通for循环
/*for (int i = 0; i < args.length; i++) {
sum += args[i];
}*/
return
sum;
}
}
|
五、枚举
枚举的作用:枚举就是用来让某个变量的值只能是几个固定的值中的一个。
枚举可以让程序在编译时就能够控制非法值的出现。
实例:定义一个星期天的枚举类和交通灯的枚举类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package
lann.Day1;
public
class
EnumTest {
public
static
void
main(String[] args) {
//获取WeekDay对象
WeekDay weekDay = WeekDay.SUN;
//获取名字
System.out.println(weekDay.name());
//获取该元素在类中的第几位
System.out.println(weekDay.ordinal());
//获取该元素所在的类
System.out.println(weekDay.getClass());
//获取所有元素,返回一个数组
System.out.println(WeekDay.values().length);
//字符串转换成元素所在类的对象
System.out.println(WeekDay.valueOf(
"SUN"
));
}
//类只能用public和默认的修饰符,但是类如果放到成员的位置上,就可以用成员的修饰符
public
enum
WeekDay{
//元素列表必须放到第一行,元素后面不加括弧时默认用无参数构造方法,加上括弧并传入参数则执行相对应的构造方法
SUN(
1
),MON,TUE,WED,THI,FRI,SAT;
//定义一个无参数构造方法
private
WeekDay(){}
//定义一个有参数构造方法
private
WeekDay(
int
day){}
}
//实例二:交通灯,比较复杂的枚举
public
enum
TrafficLamp{
//定义三个灯元素,代表该类的对象。每个对象后面()代表调用该类的构造方法,{}是内部类,代表该类的子类,复写该类的抽象方法
RED(
30
){
public
TrafficLamp nextLamp(){
return
GREEN;
}
},
GREEN(
45
){
public
TrafficLamp nextLamp(){
return
YELLOW;
}
},
YELLOW(
10
){
public
TrafficLamp nextLamp(){
return
RED;
}
};
private
int
time;
private
TrafficLamp(
int
time){
this
.time = time;
}
public
abstract
TrafficLamp nextLamp();
}
}
|
------- android培训、java培训、期待与您交流! ----------