Java过时的方法和新写法-不定期更新

Apache POI与HTTP客户端配置详解
package org.apache.poi.hssf.util
HSSFColor.BLACK.index -> IndexedColors.BLACK.index

package org.apache.http.client
HttpClient httpClient = new DefaultHttpClient() -> CloseableHttpClient httpClient = HttpClients.createDefault()

// 4.X版本的超时设置
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 8000);
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 8000);

// 4.3版本的超时设置
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet=newHttpGet("http://www.baidu.com");
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();
httpGet.setConfig(requestConfig);

//关闭请求
httpClient .getConnectionManager().shutdown() -> httpClient .close()



<think>我们正在讨论Java类的属性写法顺序,但用户现在转向了Java中静态方法普通方法写法顺序问题。根据之前的引用讨论,我们需要总结静态方法普通方法在类中的书顺序规范。 关键点回顾: 1. 在之前的回答中,我们提到了属性的顺序(静态常量、静态变量、实例常量、实例变量),然后提到构造方法,接着是其他方法。 2. 对于方法,虽然没有绝对强制的规定,但通常有一些约定。 参考引用: [^3][^5]提到了代码块构造方法的执行顺序,也涉及到静态代码块静态方法。但用户现在问的是“写法顺序”,即代码的书顺序。 行业规范(如Google Java Style)建议: 1. 方法应该按功能或逻辑分组,而不是按静态或非静态来严格排序。 2. 通常,构造函数放在实例方法之前,静态方法可以集中放置(但也可以根据逻辑放置)。 常见做法: - 将构造方法放在实例变量之后,普通方法之前。 - 静态方法可以放在普通方法之前,也可以单独分组放置(比如所有静态方法放在一起,再放普通方法)。 - 但更常见的是将静态方法放在普通方法之前,因为静态方法不依赖于实例。 注意:静态方法普通方法在书顺序上不会影响它们的执行(因为方法只有在被调用时才会执行,而静态初始化块静态变量的初始化则按照书顺序执行[^2])。 但是,对于可读性,建议: 1. 静态方法放在前面(特别是工具方法),然后是普通方法。 2. 或者按照逻辑相关性分组,例如将相关的一组方法(包括静态非静态)放在一起。 另外,从引用[^5]中我们了解到,在继承情况下,静态初始化块静态变量初始化是按照父类先于子类,且同一个类中按书顺序执行。但方法调用顺序与书顺序无关。 因此,回答用户问题: Java中静态方法普通方法写法顺序没有严格规定,但为了可读性,推荐以下顺序: 1. 静态方法(特别是工厂方法等)可以放在普通方法之前。 2. 也可以将静态方法普通方法分组,按功能逻辑排列。 示例代码结构: ```java public class Example { // 静态变量 private static int count; // 实例变量 private String name; // 静态初始化块 static { count = 0; } // 构造方法 public Example() { // ... } // 静态方法(放在前面) public static int getCount() { return count; } // 普通方法 public void setName(String name) { this.name = name; } // 更多普通方法 ... } ``` 但是,也可以将静态方法放在类的后面,只要保持一致性即可。最重要的是遵循团队约定。 相关问题: 1. Java中静态方法能否调用普通方法?有什么限制? 2. 为什么有时候将静态方法放在类的最后? 3. 如何设计工具类的方法顺序? 注意:在同一个类中,方法之间的调用不依赖于书顺序(因为Java编译器会识别所有方法,无论书位置)。例如,普通方法可以调用在它后面的静态方法,反之亦然(但静态方法不能调用非静态方法,除非通过对象实例)。 因此,总结:写法顺序主要是为了可读性,而不是功能要求。 </think>### Java中静态方法与普通方法的书顺序规范 在Java类中,静态方法(`static`修饰)普通方法(实例方法)的书顺序**没有语法强制要求**,但遵循行业规范可显著提升代码可读性维护性。以下是基于主流编码规范(如Google Java Style)的建议: #### 1. **推荐书顺序** ```java public class Example { // 1. 静态变量/常量 private static final int MAX_COUNT = 100; // 2. 实例变量 private String name; // 3. 静态代码块(初始化静态资源)[^1][^2] static { System.out.println("静态代码块执行"); } // 4. 构造方法 public Example() { System.out.println("构造方法执行"); } // 5. 静态方法(优先放置) public static void staticMethod() { System.out.println("静态方法"); } // 6. 普通方法 public void normalMethod() { System.out.println("普通方法"); } // 7. 重方法(如toString()) @Override public String toString() { return "Example"; } } ``` #### 2. **顺序原则说明** | 类型 | 位置建议 | 理由 | |--------------|--------------------|----------------------------------------------------------------------| | **静态方法** | 普通方法之前 | 1. 无需实例化即可调用,逻辑上更独立<br>2. 避免普通方法误调用未初始化的静态资源 | | **普通方法** | 静态方法之后 | 1. 依赖对象实例,与实例变量关系更紧密<br>2. 通常包含业务逻辑,接近构造方法位置 | | **重方法** | 类末尾(如toString)| 1. 保持Object方法统一位置<br>2. 方便阅读时快速定位 | #### 3. **关键注意事项** 1. **执行顺序与书顺序无关** 静态代码块静态变量初始化按**书顺序执行**[^2][^3]: ```java static { System.out.println(a); // 编译错误!a未定义 } static int a = 10; // 必须在静态代码块前 ``` 2. **静态方法访问限制** 静态方法中**不能直接访问普通方法实例变量**(需通过对象实例)[^4]: ```java public static void staticMethod() { normalMethod(); // 编译错误! System.out.println(name); // 编译错误! } ``` 3. **继承场景执行顺序**[^5] 父类静态代码 → 子类静态代码 → 父类构造代码 → 父类构造方法 → 子类构造代码 → 子类构造方法 ```java class Parent { static { System.out.println("父类静态块"); } Parent() { System.out.println("父类构造方法"); } } class Child extends Parent { static { System.out.println("子类静态块"); } Child() { System.out.println("子类构造方法"); } } // 输出顺序: // 父类静态块 → 子类静态块 → 父类构造方法 → 子类构造方法 ``` #### 4. **最佳实践建议** - **工具类设计**:全部使用静态方法(如`MathUtils`),无需构造方法 - **工厂模式**:静态工厂方法置于构造方法前 ```java public class User { private User() {} // 静态工厂方法优先 public static User create() { return new User(); } } ``` - **可读性优化**:相关功能方法分组放置(如`getter/setter`集中) - **同步控制**:静态同步方法用`synchronized`修饰[^4] ```java public static synchronized void increment() { count++; // 线程安全 } ``` --- ### 总结顺序模板 1. 静态变量/常量 2. 实例变量 3. 静态代码块 4. 构造方法 5. 静态方法 6. 普通方法 7. 重方法 > 始终优先静态成员(变量/方法),遵循"静态资源→实例资源"的从属关系,确保代码逻辑清晰[^1][^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值