欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java通過反射機制將對象封裝成JSON和JsonArray格式

 更新時間:2023年10月18日 09:42:49   作者:喜上編程  
這篇文章主要介紹了Java通過反射機制將對象封裝成JSON和JsonArray格式,JAVA反射機制是在運行狀態(tài)中,對于任意一個實體類,都能夠知道這個類的所有屬性和方法,需要的朋友可以參考下

反射機制

JAVA反射機制是在運行狀態(tài)中,對于任意一個實體類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意方法和屬性;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為java語言的反射機制

Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調(diào)用類加載器中的 defineClass 方法自動構造的。

1.獲取構造方法,方法,屬性

(1)getConstructors() 獲取公共的構造方法

(2)getDeclaredConstructors() 獲取所有的構造方法

(3)getMethods() 公共的方法(包含父類Object)

(4)getDeclaredMethods() 所有方法(不包含父類)

(5)getFields() 公共的屬性 (6)getDeclaredFields() 所有的屬性

2.Users對象

package com.it.bean;
public class Users {
    private int age;
    public String name;
    char sex;
    public Users() {
    }
    public Users(String name, char sex) {
        this.name = name;
        this.sex = sex;
    }
    public Users(int age, String name, char sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
    Users(int age, String name) {
        this.age = age;
        this.name = name;
    }
    private Users(String name,int age){
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public char getSex() {
        return sex;
    }
    public void setSex(char sex) {
        this.sex = sex;
    }
    public void fun1(){
        System.out.println("fun1---");
    }
    public void fun2(String x,String y){
    }
    void fun3(int age){
    }
    private int fun4(){
        return 0;
    }
    protected  void fun5(){
    }
}

3.獲取構造方法,方法,屬性

package com.it.reflect;
import com.it.bean.Users;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class Demo2 {
    @Test
    //獲取構造方法
    public void fun1(){
        Users users = new Users();
        //獲取該對象所屬類
        Class usersClass =  users.getClass();
        Constructor 	constructor[]=usersClass.getDeclaredConstructors();
        //訪問修飾符     方法名(參數(shù)類型  參數(shù)名)
        for (int i = 0; i < constructor.length; i++) {
            //獲取訪問修飾符
            if(constructor[i].getModifiers()==1){
                System.out.print("public  ");
            }else if(constructor[i].getModifiers()==4){
                System.out.print("protected  ");
            }else if(constructor[i].getModifiers()==2){
                System.out.print("private  ");
            }
            //獲取方法名
            System.out.print(constructor[i].getName()+"(");
            //獲取參數(shù)類型  數(shù)組
            Class parType[]=constructor[i].getParameterTypes();
            for (int j = 0; j <parType.length ; j++) {
                if(j!=parType.length-1){
                    System.out.print(parType[j].getTypeName()+",");
                }else{
                    System.out.print(parType[j].getTypeName());
                }
            }
            System.out.println(")");
        }
    }
    //獲取方法
    @Test
    public void fun2(){
        Users users = new Users();
        Class usersClass =   users.getClass();
        Method method[]=usersClass.getMethods();
        for (int i = 0; i <method.length ; i++) {
            //獲取訪問修飾符
            if(method[i].getModifiers()==1){
                System.out.print("public  ");
            }else if(method[i].getModifiers()==4){
                System.out.print("protected  ");
            }else if(method[i].getModifiers()==2){
                System.out.print("private  ");
            }
            //獲取返回值類型
            Class returnType=method[i].getReturnType();
            //拼接返回值類型和方法名
            System.out.print(returnType.getName()+"  "+method[i].getName()+"(");
            //形參類型
            Class parType[]=method[i].getParameterTypes();
            for (int j = 0; j <parType.length ; j++) {
                if(j!=parType.length-1){
                    System.out.print(parType[j].getTypeName()+",");
                }else{
                    System.out.print(parType[j].getTypeName());
                }
            }
            System.out.println(")");
        }

    }

    //獲取屬性
    @Test
    public void fun3(){
        Users users=new Users();
        Class userClass=users.getClass();

        Field field[]=userClass.getDeclaredFields();
        for (int i = 0; i <field.length ; i++) {
            //獲取訪問修飾符
            if(field[i].getModifiers()==1){
                System.out.print("public  ");
            }else if(field[i].getModifiers()==4){
                System.out.print("protected  ");
            }else if(field[i].getModifiers()==2){
                System.out.print("private  ");
            }
            //獲取數(shù)據(jù)類型  和屬性名
            System.out.println(field[i].getType().getTypeName()+"  "+field[i].getName()+";");
        }
    }
}

Object invoke(Object obj, Object… args) 對帶有指定參數(shù)的指定對象調(diào)用由此 Method 對象表示的底層方法。

區(qū)別如下: 如果 method.invoke(Object obj, Object… args) 第一個參數(shù)傳入的是類的實例,那么可以反射調(diào)用類的所有方法 包括靜態(tài)方法,前提是 method 是正常獲取 如果 method.invoke(Object obj, Object… args) 第一個參數(shù)傳入的是類的Class對象,那么只能反射調(diào)用類的靜態(tài)方法,否則會報錯。

一句話概括: 傳入類Class對象只能調(diào)用靜態(tài)方法,傳類的實例可以調(diào)用所有方法

4.通過反射機制將對象封裝為json格式

 //封裝方法
    //通過反射機制將對象封裝成JSON格式
    //{'id':'001','name':'hhh','age':'12'}
    public static String objToJson(Object object) {
        Class cls = object.getClass();
        Method method[] = cls.getMethods();
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("{");
        //從方法中截取屬性名
        //控制,
        int j = 0;
        for (int i = 0; i < method.length; i++) {
            //獲取屬性名  
            if (method[i].getName().startsWith("get") && method[i].getModifiers() == 1) {
                if (j != 0) {
                    stringBuilder.append(",");
                }
                //獲得名字截取  getName()轉小寫
                String fieldName = method[i].getName().substring(3).toLowerCase();
//                System.out.println("field->" + fieldName);
                stringBuilder.append("'" + fieldName + "'" + ":");
                //獲取值
                try {
                    stringBuilder.append("'" + method[i].invoke(object) + "'");

                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
                j++;
            }

        }
        stringBuilder.append("}");
       // System.out.println(stringBuilder.toString());
        return stringBuilder.toString();
    }

5.通過反射機制將對象封裝為jsonArray格式

//通過反射機制將對象封裝成JSONArray格式
    //[{},{},{},{}]
    public static String objToJsonArray(List<Object> objectList) {
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append("[");

        for (int i = 0; i <objectList.size() ; i++) {
            if(i!=0){
                stringBuilder.append(",");
            }
            //調(diào)用封裝好的json格式
            stringBuilder.append(objToJson(objectList.get(i)));
        }
        stringBuilder.append("]");
       // System.out.println(stringBuilder);
        return  stringBuilder.toString();
    }

測試代碼

public static void main(String[] args) {
        UserInfo userInfo1 = new UserInfo(001, "花花1", '女');
        Prov prov = new Prov("sx001","西安市");
        
       System.out.println("json");
        System.out.println(objToJson(userInfo1));
        
        System.out.println("jsonArry");
        UserInfo userInfo2 = new UserInfo(002, "花花2", '女');
        UserInfo userInfo3 = new UserInfo(003, "花花3", '女');
        List list=new ArrayList();
        list.add(userInfo1);
        list.add(userInfo2);
        list.add(userInfo3);
        System.out.println(objToJsonArray(list));
    }

到此這篇關于Java通過反射機制將對象封裝成JSON和JsonArray格式的文章就介紹到這了,更多相關Java反射封裝對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java 面向對象之繼承篇詳解原理與特點

    Java 面向對象之繼承篇詳解原理與特點

    繼承是java面向對象編程技術的一塊基石,因為它允許創(chuàng)建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為
    2021-10-10
  • Eclipse最新版使用過程中遇到的問題總結

    Eclipse最新版使用過程中遇到的問題總結

    這篇文章主要介紹了Eclipse最新版使用過程中遇到的問題總結的相關資料,本文通過圖文并茂的形式給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Java使用lambda表達式簡化代碼的示例詳解

    Java使用lambda表達式簡化代碼的示例詳解

    這篇文章主要給大家介紹了Java如何使用lambda表達式簡化代碼的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-11-11
  • Javaweb基礎入門HTML之table與form

    Javaweb基礎入門HTML之table與form

    HTML的全稱為超文本標記語言,是一種標記語言。它包括一系列標簽.通過這些標簽可以將網(wǎng)絡上的文檔格式統(tǒng)一,使分散的Internet資源連接為一個邏輯整體。HTML文本是由HTML命令組成的描述性文本,HTML命令可以說明文字,圖形、動畫、聲音、表格、鏈接等
    2022-03-03
  • Java多線程 ReentrantReadWriteLock原理及實例詳解

    Java多線程 ReentrantReadWriteLock原理及實例詳解

    這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • java中MultipartFile類型轉為File類型的4種方法

    java中MultipartFile類型轉為File類型的4種方法

    Spring提供了一個MultipartFile接口來處理文件上傳,但有時候我們需要將MultipartFile轉換為File來進行一些特定的操作,比如保存文件到本地或者進行文件的處理等,這篇文章主要給大家介紹了關于java中MultipartFile類型轉為File類型的4種方法,需要的朋友可以參考下
    2024-09-09
  • JAVA中的構造函數(shù)(方法)

    JAVA中的構造函數(shù)(方法)

    這篇文章主要介紹了JAVA中的構造函數(shù)(方法),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 新手初學Java網(wǎng)絡編程

    新手初學Java網(wǎng)絡編程

    網(wǎng)絡編程是指編寫運行在多個設備(計算機)的程序,這些設備都通過網(wǎng)絡連接起來。本文介紹了一些網(wǎng)絡編程基礎的概念,并用Java來實現(xiàn)TCP和UDP的Socket的編程,來讓讀者更好的了解其原理
    2021-07-07
  • 深入了解HttpClient的ResponseHandler接口

    深入了解HttpClient的ResponseHandler接口

    這篇文章主要為大家介紹了深入了解HttpClient的ResponseHandler接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • MyBatis中多對多關系的映射和查詢

    MyBatis中多對多關系的映射和查詢

    本文主要介紹了MyBatis中多對多關系的映射和查詢的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論