exp:一些编码用到

lombok

看看https://yq.aliyun.com/articles/59972
IDEA需要安装lombok插件。
用法:类上加上
@Data:相当于有了 get set 等多个方法;
@Builder: 传统的生成类的实例都是new个对象然后set属性值,类上加了@Builder后,就可以类似:

User user = User.builder()
      .name("John")
      .age(32)
      .build();

Java一些用法:

**String.format()**方法的灵活运用。
判空:先判断null 再判断 isEmpty()
this关键字:它的类型是确定的,它所代表的对象只能是当前类的,只有当这个方法被调用时,它所代表的对象才被确定下来。谁在调用这个方法,this就代表谁。比如在其他地方调用某代码C时生成的对象,在代码执行时就代表着C中的this。
StringUtils:
StringUtils.isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0;
StringUtils.isBlank(String str) 判断某字符串是否为空或长度为0或由空白符(whitespace) 构成

枚举类:

	public enum QueryType {

        TYPE_ACCOUNT("01"),
        TYPE_PASSWORD("02");

        private final String status;

        QueryType(String status) {
            this.status = status;
        }

        public String getStatus() {
            return status;
        }

    }

易错点:
(1)在向List中添加对象时,如果仅仅是对对象的属性set ,实际加在List里的对象都是相同的,对同一对象的引用;所以必须先new一个对象,然后再加到List中。
还比如有个List,现在有一个地方用到它,如果之后执行list.clear(),那么之前引用的地方也会变成空的,所以不能用clear应该用重新new一个。

时间处理类:

import org.joda.time.DateTime;
Date date = new Date();
DateTime的构造参数可以为空,也可以是date
// 返回当前时间的当天起始时间就是零点,比如2018-08-01T00:00:00.000+08:00
new DateTime().withTimeAtStartOfDay()
new DateTime(date)
DateTime.now().minusDays(1).toString("yyyyMMdd")

如果想生成唯一的订单号
析:可以考虑Java里的UUID类

	/**
     * @return 长度是32位的字符串
     */
    public static String genBizId() {
        String newBizIdUUID = UUID.randomUUID().toString();
        return newBizIdUUID.substring(0, 8)
            + newBizIdUUID.substring(9, 13)
            + newBizIdUUID.substring(14, 18)
            + newBizIdUUID.substring(19, 23)
            + newBizIdUUID.substring(24);
    }

如何在static方法中调用非static的属性?

析:可以借助类的一个对象,另外写一个方法
public class Test {
    private String name="lisi";

    public static String method1(Test test){
        return test.name;
    }

    private static String method2(){
        Test test = new Test();
        return method1(test);
    }
}

工具包的使用:

1、guava包,看个例子,

Map<String, String> map = ImmutableMap.<String,String>builder()
            .put("name","lisi")
            .put("age","30")
            .build();
           
Map<String,String> map2 = Maps.newHashMap();

同理对于List和Set等也有对应的两种写法。

Immutable(不可变)集合
  不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。

为什么要用immutable对象?immutable对象有以下的优点:
    1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
    2.线程安全的:immutable对象在多线程下安全,没有竞态条件
    3.不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis)
    4.可以被使用为一个常量,并且期望在未来也是保持不变的

2、将List 转化为用逗号连接的String?

import com.google.common.base.Joiner;

List<String> list = new ArrayList();
list.add ....
String ss = Joiner.on(",").join(list);

3、List 拆分成以多少个为一组的List?

import org.apache.commons.collections4.ListUtils;
List<String> allList  ;
List<List<String>> subListList=ListUtils.partition(allList,size); // size个为一组

JSON类:

import com.alibaba.fastjson.JSON;
怎样把json字符串转化为对应的类对象?

T t = JSON.parseObject(str, T.class);

怎样生成json字符串?

JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "100");
。。。
jsonObject.toJSONString() // json字符串

Service和Controller类里的注释:

Service类里的方法需要在方法外加上对方法参数、方法用处等的注释,Controller类里的方法需要如下加上一些注释,例如:

import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

	@RequestMapping(value = "/lend", method = RequestMethod.GET)
    @ApiOperation(value = "??", notes = "??")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyId", paramType = "query", value = "??", dataType = "Long"),
            @ApiImplicitParam(name = "type", paramType = "query", value = "??", dataType = "String")
    })
    // 注:ResponseObject是自定义的一个类,用来封装传输对象
    public ResponseObject<...VO> doLend(@RequestParam Long applyId, @RequestParam String type) {
    }

方法参数上实际加不加@RequestParam都可以获取到数据,有啥区别?是不是每次都要加上才好?
析:加上@RequestParam可以起到避免非空的判断。

Spring里用到:

1、在自己写的工具类里,static的方法如何引用Autowired的对象,使其不为null?

//别忘了这个注解
@Component
public class SmsUtil {
    @Autowired
    private SmsSender smsSender;
    // 工具类的实例static对象
    private static SmsUtil smsUtil;

	// 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次。
	// 被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
    @PostConstruct
    private void init() {
        smsUtil = this;
    }
	public static void someMethod(){
		SmsSender sender = smsUtil.smsSender;
		...调用即可
	}


注:如果someMethod()不是static的,那么就简单了,就不需要SmsUtil smsUtil对象
以及init(),可以直接在someMethod()中引用this.smsSender

日志处理:

可以选择slf4j( 简单日志门面(Simple Logging Facade for Java))
例子:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogTest {

    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);

    public void method(){
        logger.info("开始访问:{}","www.baidu.com");
        //some
        System.out.println("---------------");
        logger.debug("");
        logger.error("");
        logger.info("访问结束!");
    }
    
}
在执行这个类里的方法时,就会在运行窗口打出日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值