疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

关于 Java高新技术的一些认识


 

        一、静态导入:

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

  例子:

  1.import static java.lang.Math.max;

  只是导入了Math类中的max方法,这是只能max方法可以省略Math;

  //System.out.println(Math.max(3, 6));

  System.out.println(max(3, 6));

  System.out.println(Math.abs(3 - 6));

  2.import static java.lang.Math.*;

  导入Math类中所有的静态方法;这是调用Math的静态方法都可以省略类名;

  System.out.println(max(3, 6));

  System.out.println(abs(3 - 6));

  二、可变参数:

  特点:

  1.只能出现在参数列表的最后;

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

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

  例子:

  public class VariableParameter {

  public static void main(String[] args) {

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

  System.out.println(add(2,5,6));

  }

  public static int add(int x,int… args)

  {

  int sum = x;

  //增强for循环

  for(int arg : args) //迭代出每一个元素值;

  {

  sum += arg;

  }

  return sum;

  }

  }

  三、增强for循环

  1.语法:

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

  2.注意事项:

  迭代变量必须在()中定义;

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

  例子:

  public static int add(int x,int… args)

  {

  int sum = x;

  //增强for循环

  for(int arg : args) //迭代出每一个元素值;

  {

  sum += arg;

  }

  return sum;

  }

  四、基本数据的自动装箱拆箱

  1.自动装箱:

  Integer num = 12;

  2.自动拆箱

  System.out.pritnln(num + 12);

  3.享元模式:

  Integer a1 = 12;

  Integer a2 = 12;

  System.out.println(a1 == a2); //true

  五、枚举:

  1.枚举就是要让某个类型的变量的取值只能为若干个固定值的一个;

  2.在枚举类中定义其他功能或构造方法,应该放在枚举元素列表之后。

  3.枚举中元素就是这个枚举类的实例对象,如果调用相应的构造函数,

  就在元素后加括号,传递相应的参数;

  4.枚举中构造函数,必须私有;

  例子:

  public class EnumTest {

  /**

  * @param args

  */

  public static void main(String[] args) {

  // TODO Auto-generated method stub

  WeekDay1 weekDay = WeekDay1.MON;

  System.out.println(weekDay.nextDay());

  WeekDay weekDay2 = WeekDay.FRI;

  System.out.println(weekDay2);

  System.out.println(weekDay2.name());

  //打印顺序

  System.out.println(weekDay2.ordinal());

  //将前台传递过来的值,转换成枚举类

  System.out.println(WeekDay.valueOf("SUN")。toString());

  / /将枚举类中的元素,转换成数组;

  System.out.println(WeekDay.values()。length);

  }

  public enum WeekDay

  {

  SUN(0),MON(),TUE,WED,THI,FRI(5),SAT;

  private WeekDay()

  {

  System.out.println("first");

  }

  private WeekDay(int Day)

  {

  System.out.println("second");

  }

  }

  }

  六、反射:

  反射的基石:Class类;

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

  一》得到各个字节码对应的实例对象(Class类型)三种方法

  1.类名。class;如:System.class;

  2.对象。getClass();如:new Date()。getClass();前提必须由对象名;

  3.Class.forName("类名");如;Class.forName("java.util.Date");

  1.构造函数的反射:

  得到某个类的所有构造函数:

  Constructor[] constructors = Class.forName("java.lang.String")。getConstructors();

  2.成员变量的反射:

  ReflectPoint pt1 = new ReflectPoint(3,5);

  Field fieldY = pt1.getClass()。getField("y");

  System.out.println(fieldY);

  System.out.println(fieldY.get(pt1));

  3.成员方法的反射:

  一》反射成员方法格式:

  Method method = String.Class.getMethod("charAt",parameterType);

  Method类 反射名 = 字节码。getMethod("方法名",参数列表);

  注意:参数类型用class对象表示;

  七、注解:

  一》一个注解就是一个类,

  二》作用就是传递信息给编译器或者开发工具,告诉它应该怎么做。

  三》常用注解:

  @Override:判断方法有没有覆盖;

  @Deprecated 让某个方法过时;

  @SuppressWarnings("deprecation"):某个方法过时,但还继续想用。

  一》保留在那个生命周期

  @Retention(RetentionPolicy.SOURCE)在源文件阶段,call阶段没有,运行没有

  @Retention(RetentionPolicy.class):在class阶段,运行时没有;(默认阶段)

  @Retention(RetentionPolicy.RUNTIME):保留注解类在运行阶段,

  二》作用在那个成分上

  //说明这个注解类只能作用在方法上;

  @Target(ElementType.METHOD)

  //既能作用在方法上和也能作用类上,用的是数组形式

  @Target({ElementType.METHOD,ElementType.TYPE})

  作用在字段上

  @Target(ElementType.FIELD)

  作用在形式参数上

  @Target(ElementType.PARAMETER)

  一》注解类很想接口

  public @interface ItcastAnnotation {

  //定义注解类属性

  }

  二》注解属性很像方法

  //注解类

  public @interface ItcastAnnotation {

  //定义注解类属性,跟接口一样,前面省略public abstract

  String color();

  String value();

  }

  说明这个注解类有一个color属性和Value属性;

  三》应用带属性的注解类,必须设置属性(以属性的方式设置);

  //应用注解的类

  @ItcastAnnotation(color="red",value="abc")

  四》给注解类的属性设置默认值

  public @interface ItcastAnnotation {

  //定义注解类属性,跟接口一样,前面省略public abstract

  String color() default "blue";

  String value();

  }

  就是说color已经有默认值,可以重新设置,也可以不设置,就相当于该注解类只有一个属性需要设置就是value,所以设置value时,可以省略value名和"=";

  @ItcastAnnotation("abc")

  五》如果注解类中只有一个属性需要设置值,可以省略属性名和"="

  @SuppressWarnings("deprecation")

  六》在应用注解类的类中获取注解类对象

  ItcastAnnotation annotation =

  (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);

  七》调用注解类属性时,是以方法的形式调用;

  //如果应用了某个注解类,就得到这个注解类对象

  //获取注解类对象

  ItcastAnnotation annotation =

  (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);

  System.out.println(annotation.color());

  1.int【】数组

  //int[]数组

  int[] arr();

  在应用类中设置int数组属性

  @ItcastAnnotation(arr={1,2,3})

  2.枚举属性

  TrafficLamp lamp() default TrafficLamp.GREEN;

  在应用类中设置属性

  @ItcastAnnotation(clamp=TrafficLamp.RED)

  3.注解属性并缺省值

  MetaAnnotationmetaAnnotation()default@MetaAnnotation(value="annotationA");

  在应用类中设置属性

  @ItcastAnnotation( metaAnnotation=@MetaAnnotation(value="annotationB"))