DAY2019-11-24

- Integer

①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,

②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false

java在编译Integer i2 =
128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存

③两个都是new出来的,都为false

④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比

  • reflection

考虑下面这个简单的例子,让我们看看 reflection 是如何工作的。

import java.lang.reflect.*; 
public class DumpMethods { 
   public static void main(String args[]) { 
      try { 
           Class c = Class.forName("java.util.Stack"); 
           Method m[] = c.getDeclaredMethods(); 
            
           for (int i = 0; i < m.length; i++) 
               System.out.println(m[i].toString()); 
      } 
      catch (Throwable e){ 
            System.err.println(e); 
      } 
   } 
}

它的结果输出为:

public synchronized java.lang.Object java.util.Stack.pop()
public java.lang.Object java.util.Stack.push(java.lang.Object)
public boolean java.util.Stack.empty()
public synchronized java.lang.Object java.util.Stack.peek()
public synchronized int java.util.Stack.search(java.lang.Object)

这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。

这个程序使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。
java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。

- 开始使用 Reflection

用于 reflection 的类,如 Method,可以在 java.lang.relfect 包中找到。使用这些类的时候必须要遵循三个步骤:第一步是获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中,用 java.lang.Class 类来描述类和接口等。

下面就是获得一个 Class 对象的方法之一:

Class c = Class.forName(“java.lang.String”);

这条语句得到一个 String 类的类对象。还有另一种方法,如下面的语句:

Class c = int.class; 或者 Class c = Integer.TYPE;

它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段

第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。

你可能感兴趣的:(每日一题选择题)