(java基础)代码块的使用场景

  • Post author:
  • Post category:java




1、单例模式场景:

当一个类需要new()很多次的时候 ,我们往往使用单例模式减少JVM内存的使用,而当单例中的数据需要初始化



最开始我的写法:
private static RestTemplate restTemplate = new RestTemplate();
private static HttpHeaders headers = new HttpHeaders();

	public String baseExchange(UriComponentsBuilder url , ConcurrentHashMap<String, String> map , HttpMethod type) {
		//设置HTTP请求头信息
		headers.setContentType(MediaType.parseMediaType("application/x-www-form-urlencoded; charset=utf-8"));
		headers.add("Cookie", "_ga=GA1.2.1357481514.1583913993; __cfduid=dc1ff8d537c70437c658e05513b736eed1587376114; _gid=GA1.2.1413620551.1588143650; PHPSESSID=o5oc02uo750iepr0vbk8ng5v1a");
		headers.add("X-Requested-With", "XMLHttpRequest"); 
		headers.add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"); 
		HttpEntity<ConcurrentHashMap<String, String>> formEntity = new HttpEntity<>(map, headers);
		//利用容器实现数据封装,from提交
		restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
		ResponseEntity<String> responseEntity = null;
		try {
			responseEntity = restTemplate.exchange(url.build().toUri(), type, formEntity, String.class);
		} catch (Exception e) {
			log.error("发送请求异常", e);
			throw new BasisException("270011");
		}


但这么写会导致一个问题:循环调用headers .add()方法时,它的值会被叠加。例如Cookie


会产生这样的请求头数据:

数据



2、(分析)静态代码块、构造代码块、构造函数执行顺序

从词面上我们就可以看出他们的区别。

静态代码块,静态,其作用级别为





构造代码块、构造函数,构造,其作用级别为

对象

1、静态代码块,它是随着类的加载而被执行,只要类被加载了就会执行,而且只会加载一次,主要用于给类进行初始化。

2、构造代码块,每创建一个对象时就会执行一次,且优先于构造函数,主要用于初始化不同对象共性的初始化内容和初始化实例环境。

3、构造函数,每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。

通过上面的分析,他们三者的执行顺序应该为:静态代码块 > 构造代码块 > 构造函数。


而静态代码块就是我们需要的(只在类创建时执行一次)



改造后:

private static  HttpHeaders headers = new HttpHeaders();
    //设置HTTP请求头信息
    static{
        headers.setContentType(MediaType.parseMediaType("application/x-www-form-urlencoded; charset=utf-8"));
        headers.add("Cookie", "_ga=GA1.2.1357481514.1583913993; __cfduid=dc1ff8d537c70437c658e05513b736eed1587376114; _gid=GA1.2.1413620551.1588143650; PHPSESSID=o5oc02uo750iepr0vbk8ng5v1a");
        headers.add("X-Requested-With", "XMLHttpRequest");
        headers.add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
    }



希望能对你有所帮助



版权声明:本文为qq_24283811原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。