静态导入 枚举

静态导入

JDK 1.5 增加的静态导入语法用于导入指定类的某个静态属性值(方法)或全部静态属性值(方法)
语法:
Import static 包名.类名.静态属性|静态方法|*
静态导入语句使用 import static 语句
导入指定类的单个静态属性:
import static java.lang.System.out
导入指定类静态方法 import static java.lang.Math.max
导入指定类全部静态属性和方法
import static java.lang.Math.*
如果要使用静态变量或者方法,必须给出该方法所在的类。而使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,这样就无需给出他们的类名了:
如加入以下导入语句:
import static java.util.EnumSet.noneOf;
就可以直接使用这个静态方法了:
EnumSet<Weather> enumSet2 = noneOf(Weather.class);
enumSet2.add(Weather.Sunny);
enumSet2.add(Weather.Rainy);

自动装箱、拆箱

自动装箱(autoboxing):把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 变量
自动拆箱:把包装类对象直接赋给一个对应的基本类型变量

Integer n= int m;//自动装箱

典型应用:
List list = new ArrayList();
list.add(1);
int j = (Integer)list.get(0);
增强for循环

语法格式:
for ( type 变量名:集合变量名 ) { … }
for(type varName : array | collection){
//varName 自动迭代访问每一个元素
}
//遍历list使用泛型
List<String> List=new ArryList();
List.add("name1");
List.add("name2");
List.add("name3");
for(String str:list){
System.out.println("str"+str);
}

//遍历list list中放置的javaBean
list<Person>list3=new ArryList()
List.add(new Person("aa",24));
List.add(new Person("name2",23));
List.add(new Person("name3",26));
for(Person person:list3){
System.out.println(person.get.Name()+" "+person.get.Age());

//遍历list没有泛型
List list2=new ArryList();
List2.add("name1");
List2.add("name2");
List2.add("name3");
List2.add("name4");
for(Object str:List2)
{
System.out.println("str"+str);
}

枚举
为什么需要枚举?
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。
JDK 5新增的 enum 关键字用于定义一个枚举类。

Java基础笔记 – 枚举类型的使用介绍和静态导入
1、枚举(Enum):
JDK5.0中加入了枚举类型,使用enum关键字定义,可以按照如下定义:
public enum Weather{
Sunny,
Rainy,
Cloudy,
}
1.1、枚举类型中的两个静态方法:
values()
获取枚举类型的所有枚举常量
valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
1.2、values方法的使用:
for(Weather weather : Weather.values()){
System.out.println(weather);
}
System.out.println(Weather.valueOf(Weather.class, "Sunny"));
1.2、values方法的使用:
for(Weather weather : Weather.values()){
System.out.println(weather);
}
//以下输出为Sunny
System.out.println(Weather.valueOf(Weather.class, "Sunny"));
1.3、创建包含私有成员变量的枚举常量:
public enum Weather{
Sunny("晴天"),
Rainy("雨天"),
Cloudy("多云");
//私有成员变量,保存名称
private String value;

public String getValue() {
return value;
}
//带参构造函数
Weather(String value){
this.value = value;
}
}
public static void main(String[] args) {
Weather weather1 = Weather.Sunny;
//以下输出为"晴天"
System.out.println(weather1.getValue());
}
1.4、枚举类型详细说明:
enum关键字的作用类似于class或interface,本质上是在定义一个类别,细节的实现由编译器完成。
自定义的枚举类型实质上继承自java.lang.Enum抽象类。而每一个成员常量其实就是自己定义的枚举类型的一个实例,都被定义为final,所有无法改变他们,另外他们是static,pulibc的,即:
public static final 枚举常量;
在运行期间我们无法再使用该枚举类型创建新的实例,这些实例是在编译期间就完全确定下来了的。
1.5、枚举的比较:
compareTo
public final int compareTo(E o)
比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时,分别返回负整数、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。

1.6、枚举的相关方法:
ordinal
public final int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 大多数程序员不会使用此方法。它被设计用于复杂的基于枚举的数据结构,比如 EnumSet 和 EnumMap。

抛出:
NullPointerException - 如果任意参数为 null,或 rest 为 null
EnumSet<Weather> enumSet = EnumSet.of(Weather.Sunny, Weather.Rainy);

for(Iterator<Weather> iter = enumSet.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
建一个具有指定元素类型的空枚举 set。
参数:
elementType - 此枚举 set 的元素类型的 class 对象
抛出:
NullPointerException - 如果 elementType 为 null
EnumSet<Weather> enumSet2 = EnumSet.noneOf(Weather.class);
enumSet2.add(Weather.Sunny);
enumSet2.add(Weather.Rainy);

for(Iterator<Weather> iter = enumSet2.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
3、List保存枚举类型:
List<Weather> list = new ArrayList<Weather>();
list.add(Weather.Sunny);
list.add(Weather.Cloudy);

for(Iterator<Weather> iter = list.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
4、EnumMap类:
public class EnumMap<K extends Enum<K>,V>
extends AbstractMap<K,V>
implements Serializable, Cloneable
与枚举类型键一起使用的专用 Map 实现。枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。
枚举映射根据其键的自然顺序 来维护(该顺序是声明枚举常量的顺序)。在 collection 视图(keySet()、entrySet() 和 values())所返回的迭代器中反映了这一点。
EnumMap
public EnumMap(Class<K> keyType)
创建一个具有指定键类型的空枚举映射。
参数:
keyType - 此枚举映射的键类型的 class 对象
抛出:
NullPointerException - 如果 keyType 为空
Map<Weather, String> enumMap = new EnumMap<Weather, String>(Weather.class);
enumMap.put(Weather.Sunny, "晴天");
enumMap.put(Weather.Rainy, "雨天");
5、枚举在实际开发中的使用:
public static String getString(Weather weather){
if(weather == Weather.Sunny){
return Weather.Sunny.getValue();
} else if(weather == Weather.Rainy){
return Weather.Rainy.getValue();
} else if(weather == Weather.Cloudy){
return Weather.Cloudy.getValue();
}
return "不符合的天气情况";
}
调用上面的方法:
Weather weather3 = Weather.Sunny;
System.out.println(getString(weather3));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值