JDK5新特性

工具的使用:

Eclipse与MyEclipse的关系

MyEclipse是Eclipse的插件,是使Eclipse能够开发web项目的插件。MyEclipse集成了Eclipse和开发web的插件的功能。两者都是java语言开发出来的。都是IDE开发工具。

简写:

JavaEE:java Enterprize Environment   java企业级开发环境

IDE:intergrated developmentenvironment集成开发环境一般都是用工程化方式管理项目程序的开发过程。

JMS: Java Message Service java消息服务。

JMX: Java Management Extensions  Java管理扩展

JNDI: Java Naming and Directory Interface Java命名和目录接口

MyEclipse的使用:

1、  设置编译器的java版本  Windows->Reference->Java->Compiler选择存在的JDK

2、  设置运行时的java版本  Windows->Reference->Java->InstalledJREs选择存在的JRE

高版本的JDk兼容低版本的JDK,也就是说低版本的jdk编译过的class能够被高版本的Jdk执行,反之怎不能。

3、  工作空间:workspace。选择一个文件夹存放程序代码,目录不能用中文和空格。

切换工作间:File->Switch WorkSpace然后选择工作间。

Perspective:透视图,一组方便开发的视图的集合。View:视图。

4、  快捷键的配置(在整个workSpace内有效):

Alt+/:自动补齐代码。Windows->Reference->General->keys->content assist接触其绑定然后重新绑定。

模板代码:Windows->Reference->Java->Editor->Templates设定模板代码。

5、  导入工程:首先将工程复制到你想导入的工作台的目录下,然后再导入。

6、  增加jar包,File->BuildPath->add jars选择你要导入的Jar包。增加library导入库。

7、  断点调试

         1)可以对程序进行调试

         在行的开头双击左键打断点,用debug方式来运行程序,程序就会停留在断点位置

         F5跳入(step into)跳入方法内部  F6跳过,让当前行运行  F7跳出返回上一层程序

         resume直接运行到下一个断点

         2)查看源代码建议使用断点调试的方式,注意当前运行环境需要包含源码

 

JDK5新特性:

1、  静态导入

import语句可以导入一个类或某个包中的所有类

import static语句导入一个类中的某个静态方法或所有静态方法

1) 导入类的静态属性

import static java.lang.System.out;

out.println("haha");

2) 导入类的静态方法

import static java.lang.Math.*; // 导入Math类的所有静态成员

int num= abs(-10);

2、  可变参数

方法的参数的个数是不固定的,就是可变参数。

System.out.println(countScore(2,3,5));
System.out.println(countScore(1,2,3,5)); 

可变参数的特点:

(1)只能出现在参数列表的最后;这个要记住

(2)…位于变量类型和变量名之间,前后有无空格都可以;

(3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

 Overload和override的区别。

方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现

Override(重写):通常存在于子类和父类的继承关系之中,子类通过继承父类的方法并且对其进行重新以实现更丰富的功能。

重写的几个特点:(1)子类方法的方法名、参数、返回值必须与父类的相同。(2)子类方法不能缩小父类方法的访问权限。(3)子类方法不能抛出比父类更多的异常(子类方法也可以不抛出异常),即不能抛出新的异常,或者所抛出的异常为要么与父类方法一致,要么为父类所抛出异常的子类。(4)父类中被定义为final的方法不能被重写。(5)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

Overload(重载):通常存在于同一个类中,多个方法具有相同的名字,但具有不同的参数。

重载的几个特点:

1、  在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序都可以

2、  不能通过访问权限、返回值类型和抛出的异常的不同进行重载。

          3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来说,重载可以存在于父类和子类中、同类中如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

 3、 增强for循环

语法:for ( type 变量名:集合变量名 )  { … }

注意:(1)迭代变量必须在( )中定义!

 

(2)集合变量可以是数组或实现了Iterable接口的集合类

String [] arr = {"a", "b","c"};   //数组的静态定义方式,只试用于数组首次定义的时候

// 传统方式

for(int i=0; i<arr.length; i++) {

    // i依次表示数组的角标

    String s =arr[i];

    System.out.println(s);

}

System.out.println("-------------------------------------");

// 在jdk5中我们可以使用增强for循环迭代

// 增强for循环括号里写两个参数,第一个是声明一个变量,变量类型必须是数组元素的类型

// 第二个就是需要迭代的容器

// for循环会循环容器的length次, 每次都将容器的第n-1个元素赋值给声明的变量

for(String s : arr) {

    // 循环体, 执行arr.length

    // 每次都将arr中的第n-1个元素给s

    System.out.println(s);   //

}

 

 

 

4、  自动装箱与拆箱

基本数据对象的包装类

int --> Integer      byte --> Byte       short --> Short    long --> Long  

char --> Character  double --> Double    float --> Float    boolean --> Boolean

 

Integer  i = 3;自动装箱Integer j= 5+i;先自动拆箱然后自动装箱。

为了优化,虚拟机为包装类提供了缓冲池,Integer池的大小为一个字节,即-128-127.

Java为了优化字符串操作 提供了一个缓冲池

String s = “abc” 和 String s = new String(“abc”) 的区别

String s = new String(“abc”) 创建了几个对象 

String s = “a” + “b” + “c” + “d” 创建了几个对象

String s1 = “a” String s2 = “b”  String s3 = s1 + s2;  s3==”ab”?

 

/*1. String s = "abc", 虚拟机首先会检查String池里有没有"abc"对象(通过equals方法)

       // 如果有,直接返回引用,如果没有,会在池里创建一个“abc”对象,并返回引用

       Strings1 = "abc";

       Strings2 = "abc";

       System.out.println(s1==s2); // result: true

       */

       

       /* 2.String str = new String("abc");

不管缓冲池是否有"abc", 都会在堆内存创建一个"abc"对象,返回引用

       // 此时,负责检查并维护缓冲池,其实堆内存的对象是缓冲池中"abc"对象的一个拷贝

       Strings1 = new String("abc");

       Strings2 = new String("abc");

       System.out.println(s1==s2);// result: false

       */

       

       /* 3.String s = "a" + "b" + "c" + "d";  java编译器有个合并已知量的优化功能

        // 在编译阶段就把"a" + "b" +"c" + "d" 合并为 ”abcd“

       String s= "a" + "b" + "c" + "d"; 

    //  String s = "abcd"; 

       System.out.println(s=="abcd");//result: true

       */

       

       /*4.  String s1 = "a"; String s2= "b"; String s3 = s1 + s2;

       //String是常量,不能相加的,java如何实现的?

        StringBuilder sb = new StringBuidler(s1);

        sb.append(s2);

        s3 = sb.toString();

        

        也就是说实际上s3是方法返回的String对象

        凡是方法返回的字符串对象都是在堆内存的

       */

        String s1 = "a";

        String s2 = "b"; 

        String s3 = s1 + s2; // 堆内存的对象

        System.out.println(s3=="ab");// result:false

5、  枚举

作用:对象的值必须是固定的几个值中的其中一个,否则编译不通过。

实现枚举类的原理步骤:(1)私有化构造函数。(2)将类的成员变量设置为final static ,并且类型为本类类型。这样该类的对象的取值就只能为其内部规定的几个值。

publicabstractclass WeekDay {

   //WeekDay模拟枚举类的实现

   private WeekDay(){};

   publicfinalstatic WeekDaySUN = new WeekDay(){

 

      @Override

      public WeekDay nextDay() {

         //TODO Auto-generated method stub

         returnMON;

      }};

      

      //定义为抽象方法并将该类给位一个抽象类,

      //并在类的内部通过建立该类的匿名子类的方式建立该类的对象

      //这样可以简化代码

   publicabstract WeekDay nextDay();

   publicfinalstatic WeekDayMON = new WeekDay(){

      @Override

      public WeekDay nextDay() {

         //TODO Auto-generated method stub

         returnSUN;

      }

   };

   public String toString(){

      returnthis==SUN?"SUN":"MON";

   }

}


Jdk5定义了新的类型,专门用于解决此类问题。

枚举就是一个特殊的java类,可以定义属性、方法、构造函数、实现接口、继承类。

枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

带构造方法的枚举

构造方法必须定义成私有的

如果有多个构造方法,可以通过元素后面加(参数)来指定构造还元素所要用的构造方法

枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

带方法的枚举

定义枚举TrafficLamp

实现普通的next方法

实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。增加上表示时间的构造方法

 

public enum TrafficLamp {

   

   GREEN(45) {

      @Override

      public TrafficLamp nextLamp() {

         returnYELLOW;

      }

   },YELLOW (10){

      @Override

      public TrafficLamp nextLamp() {

         returnRED;

      }

   },RED(30) {

      @Override

      public TrafficLamp nextLamp() {

         returnGREEN;

      }

   };

   privateinttime;

   private TrafficLamp(int time){

      this.time = time;

   }

   publicabstract TrafficLamp nextLamp();

}

枚举只有一个成员时,就可以作为一种单例的实现方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值