黑马程序员—高新技术1

                                     ------- android培训java培训、期待与您交流! ----------

1.可变参数
(1).只能出现在参数列表的最后
(2)."..."位于变量类型和变量名之间,前后有无空格都可以。
(3).调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

2.基本数据类型的装箱和拆箱
(1).享元模式: 是对象的结构模式,它以共享的方式高效地支持大量的细粒度对象。

3.枚举
(1).定义:就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值。
(2).枚举类的构造函数必须是私有的。
(3).枚举类就相当于一个类,它继承自Enum类,其中可以定义构造方法、成员变量、普通方法和抽象方法,甚至可以有main方法。但它不能继承其他的enum类或普通类,因为它是final修饰的,而且java不支持多继承。
(4).枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面要有分号与其他成员分离。
(5).枚举只有一个成员时,就可以作为一种单例的实现模式。
(6).可以在switch语句中,使用enum。在这个switch语句中可以没有default语句,但必须确保覆盖了所有的分支。如果某个分支中出现return语句,则必须要有default语句。
示例:
enum  WeekDay
{
      SUN (1), MON , TUE , WED , THI , FRI , SAT ;
      private  WeekDay()
     {
           System.  out .println(  "First" );
     }
      private  WeekDay(  int  num)
     {
           System.  out .println(  "Second" );
     }
}
public  class  EnumTes
{
      public  enum  TransportLamp
     {
             RED (30)
           {
                  public  TransportLamp nextLamp()
                {
                       return  GREEN ;
                }
           },
             GREEN (35)
           {
                  public  TransportLamp nextLamp()
                {
                       return  YELLOW ;
                }
           },
             YELLOW (5)
           {
                  public  TransportLamp nextLamp()
                {
                       return  RED ;
                }
           };
             private  int  time ;
             private  TransportLamp(  int  time)
           {
                  this .  time  = time;
           }
             public  abstract  TransportLamp nextLamp();
     }
      public  static  void  main(String[] args)
     {
           WeekDay wd = WeekDay.  SUN ;
           System.  out .println(wd.ordinal());
           TransportLamp tl = TransportLamp.  RED ;
           System.  out .println(tl.nextLamp());
     }
}

4.反射
(1).反射就是把java类中的各个成分映射成相应的java类。

(2).获取某个类或某个对象所对应的class对象常用的三种方法:
a. 使用Class类的静态方法forName:Class.forName("java.lang.String");
b. 使用类的.class语法:String.class;
c. 使用对象的getClass()方法:String a = "aa";  Class<?> type = a.getClass();

(3).有九个预定义的Class对象,分别是:基本的 Java 类型( booleanbytecharshortintlongfloat 和  double)和关键字  void 也表示为  Class 对象。

(4). Constructor类(构造方法的反射):
有两种方法可以产生实例,一种是通过Constructor类来产生。另一种是通过Class对象的newInstance()方法直接产生,不过该方式只能产生无参数的实例对象。
示例:
第一种:   
public  static  void  main(String[] args)  throws  Exception
{
        byte [] bytes = {1,2,3,4,5};
      Class<?> cc = Class. forName( "java.lang.String" );
      Constructor<?> cons = cc.getConstructor(  byte [].  class , String. class );
      String str = (String)cons.newInstance(bytes,  "UTF-8" );
}

第二种:   
String mess = (String)Class. forName( "java.lang.String" ).newInstance();

(5)Field类(代表成员变量)
示例:
public  class  FieldClass
{
      private  int  age ;
      public  String  name ;

      public  FieldClass(){}
      public  FieldClass(  int  age, String name)
      {
             this .  age  = age;
             this .  name  = name;
      }
      public  static  void  main(String[] args)  throws  Exception
      {
           FieldClass fc =  new  FieldClass(20,  "flora" );
             //只是获取了Field对象
           Field fname = FieldClass.  class .getField(  "name" );
             //获取变量值
           System.  out .println(fname.get(fc));
             //如果要访问private属性的值,则要用getDeclaredField()方法
           Field fage = FieldClass. class .getDeclaredField( "age"  );
             //上面做法只是让你能看到这个私有的属性,此步骤是为了能获取私有属性的值
           fage.setAccessible(  true );
           System.  out .println(fage.get(fc));
      }
}

(6).Method类
代表某个类中的一个成员方法。
示例:
String ss =  "abc" ;
Method method = String. class .getMethod(  "indexOf" String. class );
//如果传递给invoke方法的第一个参数是null,这意味着该Method对象对应的是一个静态方法。
System.  out .println(method.invoke(ss,  "bc" ));

(7).数组的反射
a.具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class对象。
b.代表数组的Class实例对象的getSuperclass()返回的父类为Object类对应的Class。
c.基本类型的一维数组可以当做Object类型使用,不能当做Object[]类型使用;非基本类型的一维数组两者都可以当做使用。
d.Arrays类中的asList()方法操作非对象的一维数组使其转换成集合时,可以打印出数组中的元素,而对基本类型的一维数组就不行。这是因为在1.4版本中asList()方法中接收的参数是Object[]类型的,而基本类型的数据不能变为Object[]类型。所以只能使用1.5版本的T...a这样的类型参数,故打印出的还是哈希值。
e.Array类提供了动态创建和访问 Java 数组的方法。

5.HashCode的分析
(1).通常来说,一个类的两个实例对象用equals()方法比较的结果相等时,它们的哈希吗也必须相同,但反之则不成立。

(2).当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算修改哈希值的字段了。否则,对象修改后的哈希值与最初存储进hashset集合中时的哈希值就不同了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值