构造方法的作用

构造方法的作用之一就是实例化对象,之前对此一直都不是很了解,为什么要实例化对象呢?我们知道对象具有一定的属性,例如姓名,年龄,身高等,我们在定义类的时候就得要定义这些属性,但是实例化的意思是什么呢?就是通过这些属性,把这些人实际的表达出来,通过属性或方法来实例一个人。


[java] 
   view plain 
    copy 
    
 
 
1. public Person{//定义了一个人的属性,具备一些特征和功能
2.     String name;  
3. int
4. float
5. void
6. //我们可以将定义的属性和方法组合起来,就可以组合成一个人了
7. int age,float
8.     This.name=name;  
9.     This.age=age;  
10.     This.height=height;   
11. }  
12. }  
13. //组合完成之后,便可以定义不同的人了
14. Public class
15. static void
16. new Person(“张三”,20,180);  
17.     ren1.talk();  
18. new Person(“李四”,25,170);  
19.     ren2.talk();  
20. new Person(“王二”,30,185);  
21.     ren3.talk();  
22. <span style="white-space:pre">    </span>}  
23. }

如果没有构造方法,我们得要这样写:Person   ren1=new Person();

Ren1.name=(“张三”);   ren1.age=20; ren1.height=180;  多麻烦……所以用构造方法,相当于建立了一个代码块,直接填充进去就可以……


----------------------------------------------------------分割线-------------------------

封装的高复用泛型类,运用了构造方法,以及创建成功的返回方法,和错误的放回方法

package com.mmall.common;

import com.sun.org.apache.regexp.internal.RE;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;

import java.io.Serializable;

/**
 * Created by qxl on
 * 2018/4/6
 *
 * 1. 高封装类
 * 2. 序列化的结果返回给前端
 * 3.有的时候需要返回data (对象),有的时候不需要,
 * 4.不要null
 * 5. 如果只需要status,可以直接返回status。没有msg 没有data
 * /**
 *
 * 在我们使用泛型类的时候,虽然传入了不通的泛型实参,但并没有真正意义上生成不通的类型
 * 传入不通泛型实参的泛型类在内存上只有一个,即还是原来的最基本的类型,本实例中为ox,
 * 当然,在逻辑上我们可以理解成多个不通的泛型类型
 *
 * 究其原因,在余java泛型的这一概念提出的母的,导致其只是作用与代码编译阶段,在编译过程中,
 * 对于检验法宁结果后,会将法宁的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段
 *
 * 对此总结成一句话: 泛型类型在逻辑上看以看成是多个不通的类型,实际上都是相同的基本类型。
 *
 */

@JsonSerialize( include = JsonSerialize.Inclusion.NON_NULL)
// 不要null  报纸序列化json时候,如果是null的对象,key也会消息
// 返回json中去除null字段
public class ServerResponse<T> implements Serializable {

    //status   跟ajax返回的一致
    private int status;
    //info
    private String msg;
    //对象
    private T data;
    //构造方法
    private ServerResponse(int status){
        this.status =status;
    }
    private ServerResponse(int status,T data){
        this.status =status;
        this.data = data;
    }
    private  ServerResponse(int status,String msg){
        this.status =status;
        this.msg = msg;
    }

    private ServerResponse(String msg){
        this.msg = msg;
    }
    private ServerResponse(int status,String msg,T data){
        this.status =status;
        this.msg = msg;
        this.data = data;
    }
    /**
     * 疑点 :T任意对象  用String到底是哪一个
     */
   /* public static void main(String[] args) {
        ServerResponse sr1 =new ServerResponse(1,new Object());
        ServerResponse hello = new ServerResponse(1, "hello");
        System.out.println("console");
    }*/

    /**
     * 是否成功 0成功  1失败
     * @return
     */
    /**
     * boolean 显示在json中
     * 1、加注解 @JsonIgnore 就不会显示在json里面
     * @return
     */
   @JsonIgnore
   //不在json序列化结果之中
   public  boolean isSuccess(){
        //是0状态成功  1状态是失败
        return this.status == ResponseCode.SUCCESS.getCode();
   }
    //这三个就在
   public  int getStatus(){
       return status;
   }
   public   String getMsg(){
       return msg;
   }
   public T getData(){
       return data;
   }

    /**
     * 創建成功 返回一個status状态
     * @param <T>
     * @return
     */
   public static <T> ServerResponse<T> createBySuccess (){
       return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
   }

    /**
     * 成功返回 和 消息
     * @param msg
     * @param <T>
     * @return
     */
   public  static <T> ServerResponse<T> createBySuccessMessage(String msg){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);
   }

    /**
     * 成功状态   和 对象
     * @param data
     * @param <T>
     * @return
     */
   public  static <T> ServerResponse<T> createBySuccessData(T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
   }

    /**
     *  成功状态  和 消息  对象
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
   public  static <T> ServerResponse<T> createBySuccessData(String msg,T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data);
   }

    /**
     * 错误
     * @param <T>
     * @return
     */
   public  static <T> ServerResponse<T> createByError(){
       return new ServerResponse<T>(ResponseCode.ERROR.getCode());
   }

    /**
     * 错误的状态  和 消息
     * @param errormsg
     * @param <T>
     * @return
     *  类上的泛型是对象的
        静态的只能自己定义泛型
     */
   public  static <T> ServerResponse<T> createByErrorMessage(String errormsg){
       //返回值是ServerResponse  实例化的每個返回值都是構造方法。 所以可以
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(),errormsg);
   }

    /***
     *  参数错误   需要登录,code做成变量,
     *  参数错误的话,需要暴露出来
     * @param errormsg
     * @param <T>
     * @return
     */
    public  static <T> ServerResponse<T> createByErrorCodeMessage(int errorcode,String errormsg){
        return new ServerResponse<T>(errorcode,errormsg);
    }

    }