黑马程序员_java基础加强_静态导入_反射_枚举_注解_内省_泛型_代理



------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


JDK1.5的新特性。
一、StaticImport
 
 静态导入:导入一个类的静态方法。import static …
二、可变参数
 特点:1、只能出现在参数列表的最后面
       2、调用可变参数方法时,编译器为可变参数隐含创建一个数组,方法中以数组的形式访问
 class VariableParameter
{
 public static void main(String[] args)
 {
  System.out.println(add(1,2,3));//=6;
  System.out.println(add(1,2,3,4));//=10;
 }
 public static int add(int x,int ...args)//...只能出现在参数列表的最后面
 {
  int sum =x;
  for(int i =0;i<args.length;i++)
  {
   sum+=args[i];
  }
  return sum;
 }
}
三、增强for循环
 for(type 变量名 : 集合变量名){}
 注意:迭代变量必须在()中定义。
  集合变量可以是数组或者是实现iterable接口的集合类。
四、基本数据类型的自动装箱与拆箱
 享元模式 flyweigth
  如果很多很小的对象,它们有很多相同的东西,那么可以把它们变成一个对象,不同的东  西变成外部的属性,作为方法的参数传入。
五、枚举
 枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会自动报错,枚 举可以让编译器在编译时就 可以控制源程序中填写的非法值,普遍变量的方式在开发阶段无法实 现这一目标

方法摘要:
 String name();返回此枚举常量的名称,在其枚举声明中对其进行声明。
 static int ordinal();返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零) static char values();返回一个数组
/*
 枚举代码演示
*/
class EnumTest
{
 public static void main(String[] args)
 {
  //WeekDay weekday = WeekDay.nextDay();
  //System.out.println(weekday);
 }
 public enum WeekDay
 {
  SUN(1),MON,TUE,WED,THI,FRI,STA;//必须在第一行.。当调用有参数的构造函数时在后面加(int),表示调用的几个参数的构造函数
  private WeekDay()//构造方法必须是private
  {
  System.out.println("无参数");
  }
  private WeekDay(int day)
  {
   System.out.println("有参数");
  }
 }
 public enum TrafficLamp
 {
  
  RED(30)//内部类 子类实现父类的抽象方法。
  {
   public TrafficLamp nextLamp()
   {
    return GREEN;
   }
  },
  YELLOW(5)
  {
   public TrafficLamp nextLamp()
   {
    return RED;
   }
  },
  GREEN(45)
  {
   public TrafficLamp nextLamp()
   {
    return YELLOW;
   }
  };
  public abstract TrafficLamp nextLamp();
  public  int time;
  private TrafficLamp(int time)
  {
   this.time = time;
  }
 }
}

六、反射-->Class类
 反射不是JDK1.5的新特性。从1.2就有了。
 Java程序中的各个Java类属于同一事物,描述这类事物的Java类名就是Class
 人---->>>Person
 Java类--->>Class
如何得到各个字节码对应的实例对象(Class类型)
(1)类名.class  例如:String.class
(2)对象.getClass  例如:new Parson().getClass();
(3)Class.forName("类名"); 例如:Class.forName("java.lang.String");
方法摘要:
  boolean isArray() :判定此 Class 对象是否表示一个数组类。
  boolean isPrimitive() :判定指定的 Class 对象是否表示一个基本类型。
         String getName() 以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基    本类型或 void)名称。
反射
 反射就是把Java类中的各种成分映射成相应的java类。
Constructor类
  代表某一个类中的构造方法
 得到某个类中所有的构造方法:
  Constructor [] constructor = Class.forName("java.lang.String").getConstructor
 得到某一个构造方法:
  Constructor constructor =
   Class.forName("java.lang.String").getConstructor(StringBuffer.class)
   //获得方法时要用到类型
 创建实例对象:
  通常方式:String str = new String(new StringBuffer("abc"));
  反射方式:String str =
    (String)constructor.newInstance(new StringBuffer("abc"));
  Class.newInstance()方法:
  该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
  用到了缓冲机制来保存默认构造方法的实例对象
Method类
 代表某一个类中的成员方法
 得到一个成员方法
  Method charAt = String.class.getMethod("charAt",int.class);
 调用方法
  charAt.invoke(str,1);//invoke("对象",参数);
  如果invoke();方法的第一个参数为null,则说明是静态方法
数组的反射
 具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象
 代表数组的Class实例对象的getSuperClass()方法返回的父类为Object对应的Class
 基本类型的一维数组可以被当作Object类型使用,不能当作Object []使用;非基本类型的一维数组,既可以当作Object类型使用,又可以当作Object [] 使用


内省--->JavaBean
 JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类的的方法这样用于访问私有字  段且方法符合某种命名规则
 如果在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称为值对象(Vlaue Object)。这些信息在类中私有字段存储,如果读取或设置这些字段的值,将需要通过一些相应的方法来访问。JavaBean的属性是根据其中的setter和getter方法来确定的,不是根据其中的成员变量。
 一个类被当作JavaBean来使用时,JavaBean的属性是根据方法名推断出来的。

BeanUtils工具包
 静态方法
  BeanUtil.setProperty("对象","成员名","设置内容");设置成员属性
  BeanUtil.getProperty("对象","成员名");得到成员属性

注解
 JDK 1.5的新特性
 @Depercated
  用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险  或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译  器会发出警告。
 @Override
  表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解  但没有重写超类方法,则编译器会生成一条错误消息。
 @SuppressWarnings
  指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译  器警告。注意,在给定元素中取消显示的警告集是所有包含元素中取消显示的警告的超集  。例如,如果注释一个类来取消显示某个警告,同时注释一个方法来取消显示另一个警告  ,那么将在此方法中同时取消显示这两个警告。

  根据风格不同,程序员应该始终在最里层的嵌套元素上使用此注释,在那里使用才有效。  如果要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。
 自定义注解及应用
  定义一个注解类:
     public @interface MyAnnotation{}//
  把注解类加到某个类:
    @MyAnnotation
    public class MyAnnotationTest{}
  通过反射测试MyAnnotation是否有MyAnnotation
 代码演示
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@interface  MyAnnotation 
{
 String color();//抽象的   default(默认值)
 
}


@MyAnnotation(color="red")//增加注解的属性(赋值)
class MyAnnotationTest
{
 public static void main(String[] args)
 {
  if(MyAnnotationTest.class.isAnnotationPresent(MyAnnotation.class))
  {
   MyAnnotation myannotation = (MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class);
   System.out.println(myannotation.color());//通过方法调用
  }
 }
}


泛型
 JDK1.5的新特性

泛型通配符 ?
 使用通配符?可以使用其他各种参数话类型,通配符定义的变量主要用作引用,可以调用与参数无  关的方法,不能调用与参数有关的方法。
 向上限定: Vector<? extends Number>= new Vecotor<Integer>();
 向下限定: Vector<? super Integer>= new Vecotor<Number>()
  提示,限定通配符包括自己。
  
泛型代码演示
import java.util.*;
class GenericTest
{
 public static void main(String[] args)
 {
  
  HashMap<String,Integer> maps = new HashMap<String,Integer>();
  maps.put("java01",1);
  maps.put("java02",2);
  maps.put("java03",3);
  //Map集合不能迭代
  Set<Map.Entry<String,Integer>> entrySet = maps.entrySet();
  for(Map.Entry<String,Integer> entry : entrySet)
  {
   System.out.println(entry.getKey()+"="+entry.getValue());
  }
 }
}
泛型可以定义在类上:
 public class Generic <E>{}
 类上定义的泛型,不能使用在静态方法
泛型也可以定义在方法上:
 public <E> void generic(){}


代理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值