精华内容
下载资源
问答
  • 由于对象属性值太多,又不想用Debug调试查看,自己还懒,于是上网搜搜,整理了一下代码package com.port.tools;import java.lang.reflect.Field;/*** @authorgch*@date 2015-5-6* @version 1.0* 辅助测试*/public ...

    由于对象的属性值太多,又不想用Debug调试查看,自己还懒,于是上网搜搜,整理了一下代码

    package com.port.tools;

    import java.lang.reflect.Field;

    /**

    * @author gch

    * @date 2015-5-6

    *  @version 1.0

    *  辅助测试

    */

    public class PrintAllField {

    public static T outprint(String s1,Object o ){

    try {

    Class> c =  Class.forName(s1);

    Field [] fields = c.getDeclaredFields();

    for(Field f:fields){

    f.setAccessible(true);

    }

    System.out.println("============="+s1+"===============");

    for(Field f:fields){

    String field = f.toString().substring(f.toString().lastIndexOf(".")+1);         //取出属性名称

    System.out.println(field+" --> "+f.get(o));

    }

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (IllegalArgumentException e) {

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    e.printStackTrace();

    }

    return null;

    }

    }

    展开全文
  • java打印对象中的属性名和值

    千次阅读 2016-12-08 16:46:36
    方法一:只能打印第一层的属性,如果属性对象,则不能递归,后期可以完善 public static String toString(Object obj, Class clazz) { if(obj == null){ return ""; } Field[] fields = clazz....

    方法一:只能打印第一层的属性,如果属性为对象,则不能递归,后期可以完善

      public static String toString(Object obj, Class<?> clazz) {
        if(obj == null){
          return "";
        }
    
        Field[] fields = clazz.getDeclaredFields();// 根据Class对象获得属性 私有的也可以获得
        String s = "";
        try {
          for (Field f : fields) {
            f.setAccessible(true); // 设置些属性是可以访问的
            Object val = f.get(obj); // 得到此属性的值
            String name = f.getName(); // 得到此属性的名称
            s += name + ":" + val + ",";
          }
        } catch (IllegalAccessException e) {
          LOG.info("获取bean的值出错!",e);
        }
        return s;
      }

    方法二:

    使用apache的包:ReflectionToStringBuilder.toString(brandPackageOrderVo)

     
    
                    <dependency>
    			<groupId>org.apache.commons</groupId>
    			<artifactId>commons-lang3</artifactId>
    			<version>3.4</version>
    		</dependency>


    展开全文
  • 主要介绍了java jackson 将对象转json时,忽略子对象的某个属性操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Java打印对象信息(一)

    万次阅读 多人点赞 2018-08-03 00:04:31
    在日常开发中,我们总需要打印日志,记录程序中一些关键对象的信息,大大提高bug的排查速度。但是如果类的设计不规范,这些类的对象信息是不能被Log框架或者System.out.println()语句规范地打印出来的。比如下面这个...

           在日常开发中,我们总需要打印日志,记录程序中一些关键对象的信息,大大提高bug的排查速度。但是如果类的设计不规范,这些类的对象信息是不能被Log框架或者System.out.println()语句规范地打印出来的。比如下面这个Person类,这种只有成员变量以及成员变量的get/set函数的类,常被用作VO、DTO、DO等,如果直接按照以下方式,其对象信息打印出来对日志分析基本没有用处。(本文代码运行环境采用JDK版本为JDK9)

    《一》采用System.out.println()方式打印对象信息:

    public class Person {
        private int age;
    
        private String name;
    
        public Person(){
        }
    
        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        public static void main(String []args){
            Person p = new Person(22,"Allen");
            Person p1 = new Person(18,"Peter");
            System.out.println(p);
            System.out.println(p1);
        }
    }
    

    我们看一下输出结果:

    Person@64c64813
    Person@3ecf72fd

    可见根本没有打印出我们想看到的对象p的成员变量信息,这个打印结果是怎么来的呢?我们先看一下System.out.println()的内部实现(java.io.PrintStream类):

    public void println(Object x) {
            String s = String.valueOf(x);
            synchronized (this) {
                print(s);
                newLine();
            }
        }

    可以看出先是打印String.valueOf(x)的信息,然后再打印一个换行,而String.valueOf(x)的内部实现如下:

        /**
         * Returns the string representation of the {@code Object} argument.
         *
         * @param   obj   an {@code Object}.
         * @return  if the argument is {@code null}, then a string equal to
         *          {@code "null"}; otherwise, the value of
         *          {@code obj.toString()} is returned.
         * @see     java.lang.Object#toString()
         */
        public static String valueOf(Object obj) {
            return (obj == null) ? "null" : obj.toString();
        }

    如果对象为null就返回字符串null,否则返回这个对象的toString()函数的结果,我们需要注意toString()这个函数是定义在Object类中的,其在Object类中的定义如下:

     /**
         * Returns a string representation of the object. In general, the
         * {@code toString} method returns a string that
         * "textually represents" this object. The result should
         * be a concise but informative representation that is easy for a
         * person to read.
         * It is recommended that all subclasses override this method.
         * <p>
         * The {@code toString} method for class {@code Object}
         * returns a string consisting of the name of the class of which the
         * object is an instance, the at-sign character `{@code @}', and
         * the unsigned hexadecimal representation of the hash code of the
         * object. In other words, this method returns a string equal to the
         * value of:
         * <blockquote>
         * <pre>
         * getClass().getName() + '@' + Integer.toHexString(hashCode())
         * </pre></blockquote>
         *
         * @return  a string representation of the object.
         */
        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }

    从中我们不难看到每个类如果没有重写toString()函数的话,默认是返回该类的名称 + “@” + 该对象hashCode值得十六进制数字;所以JDK官方是推荐我们所有的类都应该重写此类(It is recommended that all subclasses override this method.)。如果我们在上面的Person类中重写该方法,那么System.out.println语句就会按照我们的重写的toString()方法打印对象信息,如下:

    public class Person {
        private int age;
    
        private String name;
    
        public Person() {
        }
    
        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Person(age:" + age + ",name:" + name + ")";
        }
    
        public static void main(String[] args) {
            Person p = new Person(22, "Allen");
            Person p1 = new Person(18, "Peter");
            System.out.println(p);
            System.out.println(p1);
        }
    }
    

    输出结果:

    Person(age:22,name:Allen)
    Person(age:18,name:Peter)

    这样就可以清晰地打印出每个Person对象的成员信息了。

           如果你使用了Lombok插件,那么直接使用它的@Data注解,无需实现toString()函数的复写了,如下:

    import lombok.Data;
    
    @Data
    public class Person {
        private int age;
    
        private String name;
    
        public Person() {
        }
    
        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        public static void main(String[] args) {
            Person p = new Person(22, "Allen");
            Person p1 = new Person(18, "Peter");
            System.out.println(p);
            System.out.println(p1);
        }
    }
    

    代码运行结果:

    Person(age=22, name=Allen)
    Person(age=18, name=Peter)

    这里使用的Lombok插件版本为1.16.10,可以看出插件帮我们完成了对一个对象的描述功能。如果我们既使用了Lombok插件,又自己重写了一下toString()函数,会有什么的情况呢?我们试一下:

    import lombok.Data;
    
    @Data
    public class Person {
        private int age;
    
        private String name;
    
        public Person() {
        }
    
        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "年龄:" + age + ";名字:" + name;
        }
    
        public static void main(String[] args) {
            Person p = new Person(22, "Allen");
            Person p1 = new Person(18, "Peter");
            System.out.println(p);
            System.out.println(p1);
        }
    }
    

    输出结果为:

    年龄:22;名字:Allen
    年龄:18;名字:Peter

    可以看到打印信息使用的是我们重写的toString()方式,具体Lombok插件是如何实现的,大家感兴趣可以看一下Lombok的实现机制。

           本次主要讲了System.out.println()这种最基础的的方式打印对象信息需要注意的地方,主要就是toString()函数,下一节我们看一下一些日志框架(例如log4j等)是如何实现对象信息的打印效果的。

    展开全文
  •  系统中一般都要打印日志的,因为所有实体的toString()方法 都用的是简单的"+",因为每"+" 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存(前提系统实体比较多)。 使用 ToStringBuilder就可以...
    一、简介与引入
       1、ToStringBuilder、HashCodeBuilder、
    EqualsBuilder、ToStringStyle、 ReflectionToStringBuilder、CompareToBuilder等这些类都是位于commons-lang.jar下面的,所以要使用这些类一定要导入commons-lang.jar
       2、为什么要使用
    ToStringBuilder?
         系统中一般都要打印日志的,因为所有实体的toString()方法 都用的是简单的"+",因为每"+" 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存(前提系统实体比较多)。
    使用ToStringBuilder就可以避免暴内存这种问题的。

    二、示例学习
      1、
    ToStringBuilder的append方法
         ToStringBuilder类主要用于类的格式化输出。ToStringBuilder中append方法可以向该类添加基本类型、数组、和对象,只有添加的方法才会被toString输出。如:
    class TaxReturn {
      private String ssn;
      private int year;
      private String lastName;
      private BigDecimal taxableIncome;
      // get/set方法省略
      public TaxReturn() {
      }
     public TaxReturn(String pSsn, int pYear, String pLastName, BigDecimal pTaxableIncome) { 
        setSsn(pSsn); 
        setYear(pYear); 
        setLastName(pLastName); 
        setTaxableIncome(pTaxableIncome); 
      } 
      public String toString() {
        return new ToStringBuilder(this).append("ssn", ssn).append("year", year).append("lastName",
            lastName).toString();

      }


      public int hashCode() {
        return new HashCodeBuilder(3, 7).append(ssn).append(year).toHashCode();
      }


      public boolean equals(Object pObject) {
        boolean equals = false;
        if (pObject instanceof TaxReturn) {
          TaxReturn bean = (TaxReturn) pObject;
          equals = (new EqualsBuilder().append(ssn, bean.ssn).append(year, bean.year)).isEquals();
        }
        return equals;
      }


      public int compareTo(Object pObject) {
        return CompareToBuilder.reflectionCompare(this, pObject);
      }


    }

    public class MainClass {

      public static void main(String[] pArgs) throws Exception {
         TaxReturn return1 = new TaxReturn("012-68-3242", 1998, "O'Brien", new BigDecimal(43000.00));
         TaxReturn return2 = new TaxReturn("012-68-3242", 1999, "O'Brien", new BigDecimal(45000.00));
         TaxReturn return3 = new TaxReturn("012-68-3242", 1999, "O'Brien", new BigDecimal(53222.00));
         System.out.println("ToStringBuilder: " + return1.toString());
      }
    }
    运行结果如下:
       ToStringBuilder: TaxReturn@1503a3[ssn=012-68-3242,year=1998,lastName=O'Brien]


    2、
    ToStringBuilder的reflectionToString方法

         该方法主要是把类对应的基本属性和值输出来。如:
    public class MainClass {
        public static void main(String[] args) {
            MyClass one = new MyClass("Becker", 35);
            MyClass two = new MyClass("Becker", 35);
            MyClass three = new MyClass("Agassi", 33);

            System.out.println("One>>>" + one);
            System.out.println("Two>>>" + two);
            System.out.println("Three>>>" + three);

            System.out.println("one equals two? " + one.equals(two));
            System.out.println("one equals three? " + one.equals(three));

            System.out.println("One HashCode>>> " + one.hashCode());
            System.out.println("Two HashCode>>> " + two.hashCode());
            System.out.println("Three HashCode>>> " + three.hashCode());
        }
    }

    class MyClass {
        private String name = null;
        private int age = 0;

        public MyClass(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public boolean equals(Object obj) {
            return EqualsBuilder.reflectionEquals(this, obj);
        }

        public String toString() {
            return ToStringBuilder.reflectionToString(this,
                ToStringStyle.MULTI_LINE_STYLE);

        }

        public int hashCode() {
            return HashCodeBuilder.reflectionHashCode(this);
        }

    }
    运行结果如下:

    One>>>MyClass@743399[
      name=Becker
      age=35
    ]
    Two>>>MyClass@1d8957f[
      name=Becker
      age=35
    ]
    Three>>>MyClass@3ee284[
      name=Agassi
      age=33
    ]
    one equals two? true
    one equals three? false
    One HashCode>>> 462213092
    Two HashCode>>> 462213092
    Three HashCode>>> -530629296


    ToStringStyle参数说明:
    1. DEFAULT_STYLE

       com.entity.Person@182f0db[name=John Doe,age=33,smoker=false]
    2. MULTI_LINE_STYLE
        com.entity.Person@182f0db[
       name=John Doe
       age=33
       smoker=false
    ]
    3. NO_FIELD_NAMES_STYLE
      
      com.entity.Person@182f0db[John Doe,33,false]
    4. SHORT_PREFIX_STYLE   即截去了包名
      Person[name=John Doe,age=33,smoker=false]
    5. SIMPLE_STYLE
       John Doe,33,false

    ###############################################
    附加:
        无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数。你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现。
      在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Websphere, Eclipse 等等。我们就从这个包开始介绍整个 common 项目。

    Lang 中工具类比较多,这里介绍几个主要的:
      ClassUtils:  getShortClassName,这个函数应该在 java.lang.Class 类中有的,我看到很多人自己写这个函数。getAllInterfaces,convertClassNamesToClasses,isAssignable,primitivesToWrappers,isInnerClass。
      NumberUtils: 关于数字以及数字和字符串转换的类 stringToInt,toDouble,createNumber,isAllZeros, int compare(float lhs, float rhs), isNumber(String str),double min(double[] array)。
      RandomUtils: 用于产生随机数的。
      DateFormatUtils: 日期时间格式转换,以及本地时间和 UTC 时间转换。
      DateUtils: 日期工具类。isSameDay,truncate,round,modify。

      基于反射机制的几个类:
      CompareToBuilder: 比较,用在算法、排序、比较的地方。reflectionCompare,append。
      EqualsBuilder: 通过反射机制比较。reflectionEquals 很多项目中用到。
      HashCodeBuilder 可以通过反射生成 hash code,很多算法的地方涉及到 hash code,但是并不是每个人都知道一种 hash code 的生成方法。
      ToStringBuilder: 当你需要重载 toString 函数而不想写代码把当前类的所有成员信息列出来,可以用这个函数。

      其它的几个类我用得比较少:
      SerializationUtils  Java中得序列化比较奥妙,容易出错啊。
      SystemUtils 可以读取一些关于 jdk 信息,操作系统信息的工具类。
    展开全文
  • 看一段数据库中的表转化成用户可以看懂的数据,也就是把一些字段比如Date用ms存的,转化为'yyyy-MM-dd'这种格式,但是由于字段太多,所以利用Java反射机制自带的BeanUtils相关的方法来进行转化(要求两个类的属性名称相同...
  • Java如何打印对象的详细信息

    千次阅读 2020-04-20 23:07:39
    当我们想在控制台的地方打印一个对象的详细信息时,往往会出现的是下图的样式。而不是我们想要的对象的名称以及对象的内部信息。...将需要打印的内部属性选上,那么就可以打印出我们想要的数据了。 ...
  • 对象克隆(复制)假如说你想复制一个简单变量。很简单:int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。但是如果你...
  • 求助!怎么打印出list中的对象属性

    千次阅读 2021-03-09 07:07:10
    我的不用.toString()就出来了去掉试试呢假如你的list里面存的是Test类型的数据,Test里面有2个属性,name和age则:Testtest=null;Iteratorit=list.iterator();while(it.hasNext()){test=(Test)it.next();System.out....
  • 如何获取一个Java对象所占内存大小

    千次阅读 2021-02-26 12:51:59
    如何计算Java对象所占内存的大小 [ 简单总结: 随便一个java项目,引入jar包: lucene-core-4.0.0.jar 如果是 maven项目,直接用如下依赖: 一个Java对象到底占多大内存 最近在读,对Java对象的内存布局有了进一步的认识,...
  • 获取Java对象中所有的属性名称和属性

    万次阅读 多人点赞 2018-01-21 17:29:21
    1,首先我们创建一个Java实体类Person,并创建属性name,age,gender,代码如下: public class Person { private String name; private int age; private String gender; public Person(String n,int a,String...
  • List 属性List = 对象List.stream().map(对象::get方法()).collect(Collectors.toList());例如:List idList = list.stream().map(User::getId).collect(Collectors.toList());//或者List idList = list.stream()....
  • 相对于toString方法,代码简洁 , 无须任何配置, Model 属性变化 , 无需修改 toString缺陷:安全性问题 , 反射私有属性值也会暴露 . 为了防止暴露,我们可以重写accept方法,剔除不想暴露的属性。改进:利用...
  • java对象赋值的方式

    千次阅读 2021-02-12 09:20:54
    对于private修饰的属性不能直接使用只能间接作用2.setter和getter方法给外部一个set方法通过这个方法间接给对象赋值,可以对外部给的值进行控制给外部一个get方法访问某个变量的值注意:建议将se...
  • java 对象转json忽略某个属性

    千次阅读 2021-03-05 11:55:16
    1、FastJson转Json字符串时,忽略指定属性1.1使用注解@JSONField以下Beanpackage com.gomefinance.esign;import ...import lombok.Getter;import lombok.Setter;import java.io.Serializable;/*...
  • Java数组 和 对象打印方法

    千次阅读 2019-06-25 15:46:25
    一、数组的打印方法 1、一维数组 int[] array = {1,2,3,4,5}; (1)传统的for循环方式 for(int i=0;i<array.length;i++) { System.out.println(a[i]); } (2)for each循环 for(int a:array) System....
  • //获取属性类型 if (type.equals("class java.lang.String")) { try { Method m = userDetails.getClass().getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1)); String value = (String) m...
  • java反射无所不能,辣么,怎么通过反射设置一个属性的值呢?  主程序: /**  * @author tengqingya  * @create 2017-03-05 15:54  */ public class TestReflectSet {  private String readOnly;  public ...
  • java打印对象和toString方法

    万次阅读 2014-11-17 23:01:50
     toString()方法是一个非常特殊的方法,是一个“自我描述”方法,该方法通常用于实现当程序员直接打印对象时,系统将会输出该对象的“自我描述”信息,用以告诉外界该对象具有的状态信息。  Object类提供的...
  • 删除对象的某个属性

    万次阅读 2018-09-25 19:17:20
    微信小程序开发交流qq群 173683895  承接微信小程序开发。扫码加微信。 实现代码: var data = {a:1,b:2,c:3} for(var item in data){ if (item == 'b') { ...打印结果: data: {a: 1, c: 3}
  • java打印对象和toString()重写

    千次阅读 2017-07-07 21:53:05
    Object是java语言的基类,是所有类的直接父类或间接父类 常见的方法: 1.Boolean equals(Object obj) 当前对象和obj对象进行比较 在Object中,equals()方法比较的是对象的内存地址,相当于“ == ”;...
  • Java继承 打印子类时显示父类属性

    千次阅读 2021-01-08 18:53:16
    增加 @ToString(callSuper = true)
  • // 这里我只判断类型是String 和List的, 具体可根据对象属性类型去添加判断 if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名 Method m = dto.getClass()....
  • 最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的...
  • java反射机制根据属性名获取属性值的操作,属性,对象,反射,访问权限,还可以java反射机制根据属性名获取属性值的操作易采站长站,站长之家为您整理了java反射机制根据属性名获取属性值的操作的相关内容。一、考虑安全...
  • java声明对象数组

    千次阅读 2021-03-15 03:45:06
    java如何对象创建数组并初始化急夜影驱动编程小编今天和大家分享答案/** * 功能:声明一个学生类 * @author qqliweng * 时间:2009-10-22 * 版本:V1.0 */ public class Student { private String name; //学员姓名 ...
  • package com.fpi.safety; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TestPrintList {    public static void main(S...
  • java面向对象

    万次阅读 多人点赞 2018-08-21 16:51:59
    包括面向对象概念、类与对象的关系、封装、构造函数、this关键字、static关键字、单例设计模式、继承、多态、内部类、异常、包等java基础知识。 1、面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 225,882
精华内容 90,352
关键字:

java打印对象的属性

java 订阅