----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------
黑马程序员_java高级篇JDK1.5的新特性系列Day9
2013年12月9号,看张老师视频记录Jdk1.5的一些新特性与细节问题。同时提醒自己学习要一步一个脚印。
#杂七杂八的java细节#
1, 要注意平时记录单词
Javaee java platform enterprise edition
Ide Integrated development environment
Jndi java namingand directory interface
JMX java management extension
Perspective 透视图
2, 可以为我们平时的代码带入模板
以前一提模板,总觉得是那么的遥远,其实这个代码模板导入还真不难。
在myeclipes中window/java/editor/temple/New
嘛意思呢?
就是当我们想要简单的输入几个单词就可以提示出平时的代码。
如Syso加上alt+’/’就可以提示,不过这回要提示的内容是你自己定义的。
3,导入
导入已有的工程:先把要导入的工程copy到Workspace文件目录下,然后:import-->Existing Projects intoWorkspace,确认即可。导入的工程后,有可能工程原来所用的JRE与Workspace中的JRE不一致,导致一些编译运行错误。这时可以点击右键,buildPath-->configure buildPath,先删除已有的JRE库,再增加原来的JRE库,即可。
#JDK1.5的新特性#
1,静态导入
我们知道import可以导入许多包中的类,同时我们是否可以导入方法呢?jdk1.5的新特性提供给我们这样的特性了,你可以直接用Import static java.lang.math.*导入方法
加上那句我们调用math包中的函数可以直接写,如:min()
System.out.println(min(1,3))
使用静态导入的类,该类的可以同时存在静态成员和非静态成员,导入时会会自动选择静态的成员导入,非静态的不导入
2, 可变参数
先来看下例子吧。
public static int Add(int a,int...args)
{
int sum=a;
for(int i=0;i<args.length;i++)
{
sum=a+args[i];
}
return sum;
}
注意Add()函数里面的三个点,这就是多个参数的象征,当我们加上这个就表示后面是一个数组,你看我们这个求和函数调用可以这样Add(1,2),也可以这样Add(1,2,3)
也可以这样Add(1,2,3,4,5,6),args后面不再要加任何的参数。
3,for循环的增强
增强for循环主要为了简化遍历集合和数组的步骤。
如果我把可变参数中的例子改一下,我么看一下:
for(int i:args)
{
sum=a+i;
}
这就是for增强
增强for循环的适用对象:数组、所有实现了Iterable接口的实现类的对象(如:map不能直接使用,因为map没有实现Iterable接口)
如下:
List<String> l=newArrayList<String>();
l.add("hello");
l.add("world");
for(String str:l)
{
System.out.println(str);
}
注意:对象不能为空,如果传入的数组或集合为null,编译报错
问题:map也想使用增强for,那么可以参照map使用iterator的方法,先把map集合转成Set集合,然后可以使用增强for,示例:
Set<Map.Entry<K,V>> set =map.entrySet();
for(Map.Entry<K,V> entry:set)
{
循环体;//得到的元素是Map.Entry<K,V>键值对关系
}
Map<Integer, String> map = newHashMap<Integer, String>();
map.put(1,"hello");
map.put(2,"world");
Set<Map.Entry<Integer,String>> set=map.entrySet();
for(Map.Entry<Integer, String> m:set)
{
System.out.println(m.getKey());
}
4装箱与拆箱
当我们定义了Integer对象时,如果我们给的值是-128~127之间,一旦我们建立后,将会把它缓存起来,下一次我们又建立这个数据对象时,我们从里面拿来,
这样就节省了内存空间。如果我们每建立一个对象就开辟一个内存,是不是太浪费了呢?
如下:
Integer a=137;
System.out.println("数字:"+a);
Integer b=137;
System.out.println("数字:"+b);
System.out.println(a==b);
输出false,虽然这个值相同,但是他们是不同的对象。
如果这样输出就知道了
System.out.println(a.intValue()==b.intValue());
这样就是true
5,享元模式
先打一个比方,如果我们在记事本中建立一个文本“abcdasrf,..”,我们是否每一个字符就建立一个对象呢?这样如果几千个单词,不是几千个对象了吗?是否有一种更好的方法呢?那就是享元模式了,我们先建立好26个字母,在去这里面找,是不是就可以只建立26个对象。
享元模式模式的定义就是我们把很对对象之间的共性拿出来,作为一个对象,那些不同点以参数传入。
如上面的例子:
Showchar(char a,int x,int y),我们可以建立一个函数,这个函数就是会展示我们的字符,共性是字符,不同的是这些字符出现的位置不一样,所以我们传给他坐标x,y
6枚举
聊到枚举大家应该很熟悉,C语言里面也有枚举,
在java中定义
public enum Week
{
MON,TUE,WED;
}
我们可以定义成这样去调用Week w= Week.MON;
如果我们在枚举中增加构造方法呢?
private Show()
{
System.out.println("fir");
}
private Show(int i)
{
System.out.println("sec");
}
那么我们要调用就直接定义成这样SUN,MON(1);后面跟个数字表示调用的是第二个构造方法。
@枚举实现的原理@
public abstract class WeekDay {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
}
private WeekDay()
{}
public final static WeekDay MON=new WeekDay(){
@Override
public String nextDay() {
// TODO Auto-generatedmethod stub
{
if(this==SUN)
{
return "MON";
}
else
{
return "SUN";
}
}
}
};
public final static WeekDay SUN=new WeekDay(){
@Override
public String nextDay() {
// TODO Auto-generatedmethod stub
{
if(this==SUN)
{
return "MON";
}
else
{
return "SUN";
}
}
}};
public abstract StringnextDay();
}
就是说我们这里定义什么对象,调用就只能用什么对象。
这个程序中可能不太好理解的是内部类,如果你想要详细了解内部类,这里就不一一陈述了。
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------