黑马程序员技术交流社区

标题: 谁能帮我看看这代码哪里出问题了,,反射 [打印本页]

作者: mohuancaizi    时间: 2014-3-1 21:30
标题: 谁能帮我看看这代码哪里出问题了,,反射
本帖最后由 mohuancaizi 于 2014-3-2 10:46 编辑

  1. <p> </p>
复制代码


public class ReflectTest {


public static void main(String[] args) {
  String str1 ="abc";
  Class cls1 = str1.getClass();
  Class cls2 = String.class;
  Class cls3 = Class.forName("java.lang.String");
  System.out.println(cls1==cls2);
  System.out.println(cls1==cls3);
  
  System.out.println(cls1.isPrimitive());
  System.out.println(int.class.isPrimitive());
  System.out.println(int.class==Integer.class);
  System.out.println(int.class==Integer.TYPE);
  System.out.println(int[].class.isPrimitive());
  System.out.println(int[].class.isArray());
  
  //new String(new StringBuffer("abc"));
  Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
  String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));
  System.out.println(str2.charAt(2));
  
  ReflectPiont pt1 = new ReflectPiont(3,5);
  Field fieldY = pt1.getClass().getField("y");
  //fieldY的值是多少?是5,错!fieldY不是对象身上的变量,而是类上,要用它对应的值
  System.out.println(fieldY.get(pt1));
  Field fieldX = pt1.getClass().getDeclaredField("x");
  fieldX.setAccessible(true);
  System.out.println(fieldX.get(pt1));
}
}
  1. package cn.itcast.day1;
  2. //Field类 反射
  3. public class ReflectPiont {
  4.         private int x;
  5.         private int y;
  6.         //快捷键 alt+shift+s
  7.         
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub

  10.         }
  11.         public ReflectPiont(int x, int y) {
  12.                 super();
  13.                 this.x = x;
  14.                 this.y = y;
  15.         }

  16. }
复制代码

//异常
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Constructor cannot be resolved to a type
Field cannot be resolved to a type
Field cannot be resolved to a type
at cn.itcast.day1.ReflectTest.main(ReflectTest.java:25)




作者: e.c    时间: 2014-3-1 21:50
是不是  ReflectPiont pt1 = new ReflectPiont(3,5);这里ReflectPoint拼错了?
作者: mohuancaizi    时间: 2014-3-1 22:18
e.c 发表于 2014-3-1 21:50
是不是  ReflectPiont pt1 = new ReflectPiont(3,5);这里ReflectPoint拼错了?

改过来了  还是报错
  1. Exception in thread "main" java.lang.Error: Unresolved compilation problem:
  2.         Constructor cannot be resolved to a type

  3.         at cn.itcast.day1.ReflectTest.main(ReflectTest.java:27)
复制代码

作者: mohuancaizi    时间: 2014-3-1 22:28
mohuancaizi 发表于 2014-3-1 22:18
改过来了  还是报错
  1. package cn.itcast.day1;

  2. import java.lang.reflect.Constructor;




  3. public class ReflectTest {


  4.        
  5.         public static void main(String[] args) {
  6.                 String str1 ="abc";
  7.                 Class cls1 = str1.getClass();
  8.                 Class cls2 = String.class;
  9.                 Class cls3 = Class.forName("java.lang.String");
  10.                 System.out.println(cls1==cls2);
  11.                 System.out.println(cls1==cls3);
  12.                
  13.                 System.out.println(cls1.isPrimitive());
  14.                 System.out.println(int.class.isPrimitive());
  15.                 System.out.println(int.class==Integer.class);
  16.                 System.out.println(int.class==Integer.TYPE);
  17.                 System.out.println(int[].class.isPrimitive());
  18.                 System.out.println(int[].class.isArray());
  19.                
  20.                 //new String(new StringBuffer("abc"));
  21.                 Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
  22.                 String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));
  23.                 System.out.println(str2.charAt(2));
  24.                
  25.                 ReflectPoint pt1 = new ReflectPoint(3,5);
  26.                 Field fieldY = pt1.getClass().getField("y");
  27.                 //fieldY的值是多少?是5,错!fieldY不是对象身上的变量,而是类上,要用它对应的值
  28.                 System.out.println(fieldY.get(pt1));
  29.                 Field fieldX = pt1.getClass().getDeclaredField("x");
  30.                 fieldX.setAccessible(true);
  31.                 System.out.println(fieldX.get(pt1));
  32.                
  33.                
  34.                 //changeStringValue(pt1);
  35.                 //System.out.println(pt1);
  36.         }
  37.        
  38.         /*private static void changeStringValue(Object obj){
  39.                 Field[] fields = obj.getClass().getFields();
  40.                 for(Field field : fields){
  41.                         //
  42.                         if(field.getType()== String.class){
  43.                                 String oldValue = (String)field.get(obj);
  44.                                 String newValue = oldValue.replace('b','a');
  45.                                 field.set(obj, newValue);
  46.                         }
  47.                 }
  48.         }
  49. */
  50. }
复制代码


Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        Field cannot be resolved to a type
        Field cannot be resolved to a type

        at cn.itcast.day1.ReflectTest.main(ReflectTest.java:33)
作者: mohuancaizi    时间: 2014-3-1 22:30
e.c 发表于 2014-3-1 21:50
是不是  ReflectPiont pt1 = new ReflectPiont(3,5);这里ReflectPoint拼错了?

导包进去还是报错
  1. package cn.itcast.day1;

  2. import java.lang.reflect.Constructor;




  3. public class ReflectTest {


  4.        
  5.         public static void main(String[] args) {
  6.                 String str1 ="abc";
  7.                 Class cls1 = str1.getClass();
  8.                 Class cls2 = String.class;
  9.                 Class cls3 = Class.forName("java.lang.String");
  10.                 System.out.println(cls1==cls2);
  11.                 System.out.println(cls1==cls3);
  12.                
  13.                 System.out.println(cls1.isPrimitive());
  14.                 System.out.println(int.class.isPrimitive());
  15.                 System.out.println(int.class==Integer.class);
  16.                 System.out.println(int.class==Integer.TYPE);
  17.                 System.out.println(int[].class.isPrimitive());
  18.                 System.out.println(int[].class.isArray());
  19.                
  20.                 //new String(new StringBuffer("abc"));
  21.                 Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
  22.                 String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));
  23.                 System.out.println(str2.charAt(2));
  24.                
  25.                 ReflectPoint pt1 = new ReflectPoint(3,5);
  26.                 Field fieldY = pt1.getClass().getField("y");
  27.                 //fieldY的值是多少?是5,错!fieldY不是对象身上的变量,而是类上,要用它对应的值
  28.                 System.out.println(fieldY.get(pt1));
  29.                 Field fieldX = pt1.getClass().getDeclaredField("x");
  30.                 fieldX.setAccessible(true);
  31.                 System.out.println(fieldX.get(pt1));
  32.                
  33.                
  34.                 //changeStringValue(pt1);
  35.                 //System.out.println(pt1);
  36.         }
  37.        
  38.         /*private static void changeStringValue(Object obj){
  39.                 Field[] fields = obj.getClass().getFields();
  40.                 for(Field field : fields){
  41.                         //
  42.                         if(field.getType()== String.class){
  43.                                 String oldValue = (String)field.get(obj);
  44.                                 String newValue = oldValue.replace('b','a');
  45.                                 field.set(obj, newValue);
  46.                         }
  47.                 }
  48.         }
  49. */
  50. }


复制代码

作者: mohuancaizi    时间: 2014-3-1 22:53
e.c 发表于 2014-3-1 21:50
是不是  ReflectPiont pt1 = new ReflectPiont(3,5);这里ReflectPoint拼错了?

麻烦你试一下 看看 然后整个代码发过来看看 谢啦
作者: 戚兴海    时间: 2014-3-2 03:26
必须是Field的包没导啊
作者: e.c    时间: 2014-3-2 08:38
mohuancaizi 发表于 2014-3-1 22:53
麻烦你试一下 看看 然后整个代码发过来看看 谢啦

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

public class ReflectTest {

        public static void main(String[] args) throws Exception {
                String str1 = "abc";
                Class cls1 = str1.getClass();
                Class cls2 = String.class;
                Class cls3 = Class.forName("java.lang.String");
                System.out.println(cls1 == cls2);
                System.out.println(cls1 == cls3);

                System.out.println(cls1.isPrimitive());
                System.out.println(int.class.isPrimitive());
                System.out.println(int.class == Integer.class);
                System.out.println(int.class == Integer.TYPE);
                System.out.println(int[].class.isPrimitive());
                System.out.println(int[].class.isArray());

                // new String(new StringBuffer("abc"));
                Constructor constructor1 = String.class
                                .getConstructor(StringBuffer.class);
                String str2 = (String) constructor1
                                .newInstance(new StringBuffer("abc"));
                System.out.println(str2.charAt(2));

                ReflectPoint pt1 = new ReflectPoint(3, 5);
                Field fieldY = pt1.getClass().getField("y");
                // fieldY的值是多少?是5,错!fieldY不是对象身上的变量,而是类上,要用它对应的值
                System.out.println(fieldY.get(pt1));
                Field fieldX = pt1.getClass().getDeclaredField("x");
                fieldX.setAccessible(true);
                System.out.println(fieldX.get(pt1));

                // changeStringValue(pt1);
                // System.out.println(pt1);
        }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2