2 u010775468 u010775468 于 2016.05.03 22:35 提问

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一会大写,一会小写,‘
初学,求助,谢谢

3个回答

trium_KW
trium_KW   2016.05.03 23:02
已采纳

第一个问题:


为什么用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
ChaoBaby94
ChaoBaby94   2016.05.03 22:55

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

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

CSDNXIAOD
CSDNXIAOD   2016.05.03 22:42

循环中变量定义问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
利用反射技术修改类中的字段(成员变量的反射)
题目:利用反射技术修改类中的字段及成员变量的反射 作者:Vashon 一、首先定义一个类如下: class ReflectPoint { private int x; //私有的 public int y; //公用的 public String str1="ball"; public String str2="basketball"; public String str
java反射--如何改变private中的变量及方法
class DemoTest{    private String name="123";    public getName(){        system.out.println("public getName " + name);        return name;    }    private getName2(){        syst
通过Java反射机制获取对象、方法和成员变量
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
利用反射来修改局部变量的值
public class FirstDay { static Integer a=10;     public static void main(String [] args) throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException{     method
Java通过反射设置私有变量
public class PrivateTest { private String name = "hello"; public String getName() { return name;
java中通过反射强力获取私有变量的值
我们都知道如果一个变量用private声明,那么他们的变量将只能在自身的类中或类的对象使用,对于其他类是不可见的。现在我将通过反射访问私有变量。  下面是一个私有变量的bean: public class PrivateField { private String name = "qq"; private String password = "qqpassword"; } 下面是得到私
java 的反射机制获得变量及变量值
Field[] fields = SWT.class.getDeclaredFields();         for (Field f : fields) {             if (f.getInt(f.getName()) == 3) {                 System.out.println(f.getName() + "-------------> " + f
【Java】java使用反射访问对象方法和成员变量
虽然java是一门静态语言,但是java的反射机制却给java提供了很强大的动态特性,其特点是能让java支持在运行时才能得知名称与内部结构的类,并能访问其所有的方法和成员变量,包括私有方法和私有成员变量。下面我写了一个比较简洁的测试代码,供参考和使用。 测试类 //OBClass.java package com.obo.javaassistdemo; public class OBCla
使用java反射操作类的构造函数,成员变量和成员方法
 在java.lang.reflect包中有三个类Field,Method,Constructor.分别描述域,方法,构造器。参考API,关于这三个类的说明。 在运行时使用反射分析对象,如果访问的是私有域或是私有方法,私有构造函数,会抛出IllegalAccessException.因为反射机制的默认行为受限于java的访问控制,然而,如果一个java程序没有受到安全管理器的控制,
Java泛型 通过反射获得方法参数中的变量类名和泛型
通过反射获得方法参数中的变量类名和泛型 package test; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; public class MainTest { public static void main(String[]