黑马程序员_java高级篇JDK1.5的新特性系列Day9

 

      ----------------------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培训、期待与您交流! -----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值