现在的位置: 首页 > 综合 > 正文

Java JDK-1.5高级特性

2013年09月03日 ⁄ 综合 ⁄ 共 4043字 ⁄ 字号 评论关闭

----------------------------------------------------- 静态导入 -----------------------------------------------------

静态导入在 import 后边多加一个 static

import java.lang.Math.*  表示导入 Math 类下的子类

import static java.lang.Math.*  静态导入的含义是导入 Math 类下的所有方法

 

所以如果 import java.lang.Math.*;  这样导入的话,那么

public static void main(String args[]){

System. out .println(min (3,9)); 比较两个值中的最小值

System.out.println(abs(3-9)); 返回两个数相减结果的绝对值

}

这两个方法就默认为不可识别的方法,必须静态导入 Math

 

 

 

------------------------------------------- 可变参数与 for 循环增强 --------------------------------------------

一个方法可以根据需求利用 可变参数这种功能 接收任意个参数,可变参数本身是一个数组,通过迭代或循环来使用多个参数

package com.VaryingParameter;

public class ParameterTest {

 

    public static int add( int x, int ... args){  

// 可变参数的格式为:数据类型 ...args

       int sum=x;

       for ( int i=0;i<args. length ;i++){  // 两种循环实现都可以

           sum+=args[i];  // 这里的 args 相当于一个数组,接收了所有请求过来的参数

       }

       /*for(int arg:args){  //for 循环增强,也叫做 foreach 循环

           sum+=arg;

       }*/

       return sum;

    }

    public static void main(String args[]){

       System. out .println(add (1,2));

       System. out .println(add (1,2,3));

       System. out .println(add (1,2,3,4));

    }

}

 

----------------------------------------------------- 枚举 -----------------------------------------------------

静态变量的方式在开发阶段无法防止一些非法值,让编译器就可以控制源程序中填写的非法值,例如,假设 1-7 表示星期几,有人不知道,可能会出现 int weekday = 0; 的情况。枚举就是要让一个类型变量的取值为若干个固定的值,否则,编译器就会报错。首先,大家要清楚枚举是一种特殊的类。

枚举中的成员就是枚举类的一个实例对象

枚举就相当于一个类,其中也可以定义抽象方法,枚举的每个成员分别由枚举类的子类来生成实例

带构造方法的枚举,构造方法必须定义成私有的

 

 

 

 

 

 

 

 

----------------------------------------------------- 反射 -----------------------------------------------------

反射就是把 Java 类中的各种成分映射成相应的 java

 

反射的作用 ----- 实现框架功能

1. 框架解决的核心问题:

我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进入我提供的框架中,框架与工具类有区别,你做的门调用锁,锁是工具,你做的门被房子调用,房子是框架,房子和锁都是别人提供的,工具类被用户的类调用,而框架则是调用用户提供的类

2. 框架要解决的核心问题:我在写框架时,你这个用户可能还在上小学,还不会写程序呢,我写的框架横须怎样能调用到你以后写的类呢,也就是房子建立好以后,在我的房子中如何能安装你想要的门窗呢?

在写程序的时候无法知道要被调用的类名,所以,在程序中无法直接 new 某个类的实例对象,而要用反射方式来做

 

以下是代码 用于了解反射机制

一共有三个类和一个配置文件

Point.class    ClassTest.java    ReflectTest.java    Config.properties

ReflectTest 类中讲解反射关于实现框架功能使用到了 Config.properties 配置文件

 

 

 

Config.properties

className= java.util.ArrayList  

 

---------------------------------------------------------

package Java.Lesson.Reflection;

class Point {

    // 一个 JavaBean 类,两个学习反射的例子类中会用到

   

    static {

       System. out .println( "Loading Class Point" );

    }

 

    private String name ;

    private String sex ;

    private int age ;

 

    Point(String n, String sex, int a) {

       this . name = n;

       this . sex = sex;

       this . age = a;

    }

 

    Point() {

       ;

    }

    @Override

    /* 一种注释语句,意思是 下边的这个方法必须是覆盖超类的方法,如果超类找不到这个方法,就会报错

    例如 public String toString(){} */

    public String toString() {

       return "name=" + this . name + ",sex=" + this . sex + ",age=" + this . age ;

    }

    public int getAge() {

       return age ;

    }

    public void setAge( int age) {

       this . age = age;

    }

    public String getName() {

       return name ;

    }

    public void setName(String name) {

       this . name = name;

    }

    public String getSex() {

       return sex ;

    }

    public void setSex(String sex) {

       this . sex = sex;

    }

    private void test() {

 

    }

    static void test2() {

      

    }

    public void MethodName() {

       System. out .println( " 运行方法成功 " );

    }

 

    @Override

    public int hashCode() {

       final int PRIME = 31;

       int result = 1;

       result = PRIME * result + age ;

       result = PRIME * result + (( name == null ) ? 0 : name .hashCode());

       result = PRIME * result + (( sex == null ) ? 0 : sex .hashCode());

       return result;

    }

 

    @Override

    public boolean equals(Object obj) {

       if ( this == obj)

           return true ;

       if (obj == null )

           return false ;

       if (getClass() != obj.getClass())

           return false ;

       final Point other = (Point) obj;

       if ( age != other. age )

           return false ;

       if ( name == null ) {

           if (other. name != null )

              return false ;

       } else if (! name .equals(other. name ))

           return false ;

       if ( sex == null ) {

           if (other. sex != null )

              return false ;

       } else if (! sex .equals(other. sex ))

           return false ;

       return true ;

    }

}

 

 

---------------------------------------------------------

package Java.Lesson.Reflection;

 

import java.lang.annotation.Annotation;

import java .lang.reflect.*;

 

class ClassTest {

    // 阐述反射机制 获取类的构造器,方法,成员变量,以及如何用反射调用方法的相关内容

 

    static Object create(Class clazz) throws -->

作者:

抱歉!评论已关闭.