写点什么

Java SE 最佳实践

用户头像
jiangling500
关注
发布于: 2021 年 02 月 14 日

本文用于记录个人在学习 Java SE 的过程中,个人觉得是最佳实践的用法。另外,本文持续更新!!!

泛型


  • 泛型的指定中不能使用基本数据类型,可以使用包装类替换

  • 静态方法中不能使用类的泛型

  • 泛型不同的引用不能相互赋值

  • 泛型如果不指定,将被擦除,泛型对应的类型均按照 Object 处理

  • 泛型要使用一路都用,要不用,一路都不用

  • 泛型的简化操作:ArrayList<Fruit> flist = new ArrayList<Fruit>(); 可简化为 ArrayList<Fruit> flist = new ArrayList<>();

  • 异常类不能是泛型的

  • 不能使用 new T[],但是可以使用 T[] elements = (T[]) new Object[capacity];

  • 父类有泛型,子类可以选择保留泛型,也可以选择指定泛型类型

  • 子类不保留父类的泛型:按需实现

  • 没有类型:擦除

  • 具体类型

  • 子类保留父类的泛型:泛型子类

  • 全部保留

  • 部分保留

  • 子类除了指定或保留父类的泛型外,还可以增加自己的泛型

class Father<T1, T2> {}
// 子类不保留父类的泛型// 1) 没有类型:擦除class Son1 extends Father { // 等价于 class Son1 extends Father<Object, Object> {}// 2) 具体类型class Son2 extends Father<Integer, String> {}
// 子类保留父类的泛型// 1) 全部保留class Son3<T1, T2> extends Father<T1, T2> {}// 2) 部分保留class Son4<T2> extends Father<Integer, T2> {}
// 子类不保留父类的泛型,并增加自己的泛型// 1) 没有类型:擦除class Son5<A, B> extends Father {}// 2) 具体类型class Son6<A, B> extends Father<Integer, String> {}
// 子类不保留父类的泛型,并增加自己的泛型// 1) 全部保留class Son7<T1, T2, A, B> extends Father<T1, T2> {}// 2) 部分保留class Son8<T2, A, B> extends Father<Integer, T2> {}
复制代码


自定义泛型结构

泛型类

class Person<T> {	// 使用 T 类型定义变量  private T info;    // 使用 T 类型定义构造器  public Person() {  }    public Person(T info) {  	this.info = info;  }    // 使用 T 类型定义一般方法  public T getInfo() {  	return info;  }    public void setInfo(T info) {  	this.info = info;  }}
复制代码

泛型方法

方法,也可以被泛型化,不管此时定义在其中的类是不是泛型类。

public class DAO {	public <E> E get(int id, E e) { // 注意:<E>不可缺少  	E result = null;    return result;  }}
复制代码

遍历集合

遍历 List

方式一-使用增强 for 循环

ArrayList<Integer> list = new ArrayList<>();
list.add(78);list.add(88);
for (Integer i : list) { System.out.println(i);}
复制代码

方式二-使用迭代器

ArrayList<Integer> list = new ArrayList<>();
list.add(78);list.add(88);
Iterator<Integer> iterator = list.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}
复制代码

遍历 Map

方式一

Map<String, Integer> map = new HashMap<>();
map.put("Tom1", 34);map.put("Tom2", 44);
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();
while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); System.out.println(entry.getKey() + "--->" + entry.getValue());}
复制代码

方式二

TODO


读取配置文件

jdbc.properties 内容如下:

user=rootpassword=abc123
复制代码

方式一

jdbc.properties 文件在当前的模块下,但不在模块中的任何一个目录中。

@Testpublic void test1() throws Exception {    Properties pros =  new Properties();		FileInputStream fis = new FileInputStream("jdbc.properties"); // 可以直接读取模块下的配置文件		pros.load(fis);      String user = pros.getProperty("user");    String password = pros.getProperty("password");    System.out.println("user = " + user + ", password = " + password);}
复制代码

方式二

src/jdbc.properties 文件位于当前模块下的 src 目录中。

@Testpublic void test1() throws Exception {    Properties pros =  new Properties();		FileInputStream fis = new FileInputStream("src/jdbc.properties"); // 要读取 src 目录下的配置文件,必须要加上路径名		pros.load(fis);      String user = pros.getProperty("user");    String password = pros.getProperty("password");    System.out.println("user = " + user + ", password = " + password);}
复制代码

方式三-推荐使用

src/jdbc.properties 文件位于当前模块下的 src 目录中。

public class ClassLoaderTest {  @Test  public void test2() throws Exception {
Properties pros = new Properties(); InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); // 可以直接读取 src 目录下的配置文件 pros.load(is);
String user = pros.getProperty("user"); String password = pros.getProperty("password"); System.out.println("user = " + user + ", password = " + password); }}
复制代码

在 Idea 中导入 jar 包的三种方式

注意:jar 包的后缀是 .jar,而不是 .zip,如果是 .zip 文件的话,需要解压缩得到 jar 包。

Add as Library

  1. 新建一个 lib 目录

  2. 拷贝 jar 包到 lib 目录中

  3. 右键 lib 目录-->Add as Library...

  4. Level 选择 Module Library

Dependencies

  1. 新建一个 lib 目录

  2. 拷贝 jar 包到 lib 目录中

  3. File --> Project Structure... --> Modules -->选择模块--> Dependencies -->单击左下角的加号图标-->选择 1 JARs or directories... -->选择 lib 目录中的 jar 包

maven

TODO

在 Idea 中查看 jar 包对应的源码


发布于: 2021 年 02 月 14 日阅读数: 34
用户头像

jiangling500

关注

万丈高楼平地起,勿在浮沙筑高台! 2019.12.17 加入

一名IT从业者,熟悉Linux下C/C++,了解MySQL、Java等。

评论

发布
暂无评论
Java SE最佳实践