java中的反射的变量定义问题

新人初学,还望各位能多多帮助
我在学习反射的过程中,遇到这样一个问题
String s1 = new String (new StringBuffer("abc"));
这条语句我看了下JDK文档,发现String的构造函数中有一个构造方法的参数是StringBuffer的对象,然后又看了看StringBuffer的定义,发现这条语句等于
String s1 = "abc";
为什么要这样写呢,
还有
Constructor cs1 = String.class.getConstructor(StringBuffer.class);
这条语句完全看不懂,书上说Class(大写)中存在一个getConstructor这个方法,我也查了下,确实是有的,但是又说了,所以通过String.class(小写)获取关于String类的字节码,我看了下getConstructor的返回值,是一个构造函数,但是具体这条语句是怎么实现的,我还是不懂,求教各位,为什么这个class一会大写,一会小写,‘
初学,求助,谢谢

2个回答

第一个问题:


为什么用StringBuffer我不太清楚,不过使用String的构造器和直接用字符串常量倒是有一个不同。看以下例程:

  String s1 = new String("hello");
  String s2 = new String("hello");
  System.out.println(s2 == s2); //此处输出false,因为由构造器返回的字符串不会被intern()
  String s3 = "hello";
  String s4 = "hello";
  System.out.println(s3 == s4); //此处输出true


第二个问题:


大写的Class是表示某类中运行时信息的类。例如Class<String>表示String类的运行时信息。


小写的class首先用于类定义;其次,当它位于类名之后时,如String.class,表示对String类所对应的Class类的实例(常量)的引用。例如

  Class<String> cls = String.class;
  System.out.println("".getClass() == cls); //返回true

Class是类的类,就是把所有类抽象成一个类,就像把Cat、Dog抽象成Animal一样。所有类都有this.getClass(),String.class,Class.forName()都是为了返回Class类型。
类(String、User、List等)有哪些相同特征要被抽象成一个类(Class)呢?
所有的类都有构造器、成员变量、成员方法、注解等组成。有了构造方法就可以创建实例,有了成员变量就可以给它读/写值,有了成员方法就可以调用等。
有了Class这个类后就可以获取任意类的构造器、成员变量、成员方法、注解等,并且对它们进行操作。

反射有什么用,操作任意类的构造器、成员变量、成员变量、成员方法、注解等有什么用?
后面要学习很多框架、基本都用到反射,通过配置文件里面的类名(字符串),创建一个该类的对象,这样我们代码就不用狂用new关键字,减少代码的耦合度。如果我们不自己开发框架基本不用写反射。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

5
java中的变量的作用域问题
4
oracle中定义变量的问题
6
java中....的变量声明
7
我安装java配置变量时把path变量的原来的值不小心删除了,该怎么办呢?怎么找回吗???
1
Java求助,关于OS环境变量问题
3
怎么使用中间变量交换数组中不同的类型的元素?元素类型不同那么中间变量定义成什么?
3
Java中如果一个类引用另外一个类中的方法,我在其中一个类中定义的静态变量,在另外一个类中有效吗?
3
java 局部变量与全局变量问题
3
Java局部变量全局变量递归问题
2
请问vb语言中怎么区隔ocx内存中的全局变量和exe内存中的全局变量的定义?
2
定义主程序变量的时候怎么判断这个变量的变量名是不是在ocx的事件定义中被使用了?
2
vb中怎么控制不同变量的定义所使用的变量名不同 ?
2
vb编程软件制作怎么看一个ocx的空间里定义了什么变量,以及变量定义的类型?
2
当参数和ocx的变量名重合的时候,ocx中的变量是不是自动会调用函数里定义的参数的变量?
2
怎么针对ocx访问exe的内存变量来定义exe里的全局变量,定义成public型的为什么还是不可以?
7
java中死循环中如何判断一个变量的值不再发生改变,然后跳出死循环
1
java多线程与变量设置问题
1
java语言,请问get set分别是什么意思,和变量定义的区别是什么?
5
在jsp中定义的java变量,要放在请求域中才能访问吗
8
java的JDK环境变量问题