变量自增

示例代码如下

  1. public static void main(String[] args) {
  2. int i = 1;
  3. i = i++; // i=1
  4. int j = i++; // j=1 i=2
  5. int k = i + ++i * i++; // 2 + 3 * 3
  6. System.out.println("i=" + i); // 4
  7. System.out.println("j=" + j); // 1
  8. System.out.println("k=" + k); // 11
  9. }

单例设计模式

单例设计的几种方式

饿汉式

(1)示例代码

  1. class Singleton {
  2. public static final Singleton INSTANCE = new Singleton();
  3. // 私有化构造方法
  4. private Singleton(){
  5. }
  6. }

(2)示例代码

  1. enum Singleton {
  2. INSTANCE
  3. }

(3)示例代码

  1. class Singleton {
  2. public static final Singleton INSTANCE;
  3. static {
  4. INSTANCE = new Singleton();
  5. }
  6. // 私有化构造方法
  7. private Singleton(){
  8. }
  9. }

懒汉式

(1)示例代码

非线程安全

  1. class Singleton {
  2. static Singleton instance;
  3. // 提供获取实例方法
  4. public static Singleton getINSTANCE(){
  5. if(instance == null){
  6. instance = new Singleton();
  7. }
  8. return instance;
  9. }
  10. // 私有化构造方法
  11. private Singleton(){
  12. }
  13. }

线程安全

  1. class Singleton {
  2. private static Singleton instance;
  3. // 提供获取实例方法
  4. public static Singleton getINSTANCE(){
  5. if(instance == null){
  6. synchronized (Singleton.class){
  7. if(instance == null){
  8. instance = new Singleton();
  9. }
  10. return instance;
  11. }
  12. }
  13. return instance;
  14. }
  15. // 私有化构造方法
  16. private Singleton(){
  17. }
  18. }

(2)示例代码

  1. class Singleton {
  2. // 静态内部类
  3. private static class Inner {
  4. private static final Singleton INSTANCE = new Singleton();
  5. }
  6. // 提供获取实例方法
  7. public static Singleton getINSTANCE(){
  8. return Inner.INSTANCE;
  9. }
  10. // 私有化构造方法
  11. private Singleton(){
  12. }
  13. }

类和对象初始化

示例代码

  1. class Father {
  2. private int i = test();
  3. private static int j = method();
  4. static{
  5. System.out.println("(1)");
  6. }
  7. Father() {
  8. System.out.println("(2)");
  9. }
  10. {
  11. System.out.println("(3)");
  12. }
  13. public int test(){
  14. System.out.println("(4)");
  15. return 1;
  16. }
  17. public static int method() {
  18. System.out.println("(5)");
  19. return 1;
  20. }
  21. }
  22. class Son extends Father {
  23. private int i = test();
  24. private static int j = method();
  25. static {
  26. System.out.println("(6)");
  27. }
  28. Son() {
  29. super();
  30. System.out.println("(7)");
  31. }
  32. {
  33. System.out.println("(8)");
  34. }
  35. public int test(){
  36. System.out.println("(9)");
  37. return 1;
  38. }
  39. public static int method() {
  40. System.out.println("(10)");
  41. return 1;
  42. }
  43. public static void main(String[] args) {
  44. Son son = new Son();
  45. System.out.println();
  46. Son son1 = new Son();
  47. }
  48. }
  49. // 执行结果
  50. // (5)
  51. // (1)
  52. // (10)
  53. // (6)
  54. // (9)
  55. // (3)
  56. // (2)
  57. // (9)
  58. // (8)
  59. // (7)
  60. // (9)
  61. // (3)
  62. // (2)
  63. // (9)
  64. // (8)
  65. // (7)

反射机制

什么是反射机制呢?大白话就是创建实例对象的一种手段

获取字节码文件对象的三种方式

  1. // 通过Class.forName("className")获取
  2. // 通过class属性获取
  3. // 通过getClass()方法获取

示例代码如下

  1. Class.forName("java.lang.String")
  2. String.getClass()
  3. String.class

通过反射实例化对象

示例代码如下

  1. Class c = Class.forName("java.lang.String")
  2. String s = s.newInstance()

注意

通过Class.forName方式获取字节码文件对象,会触发类加载

示例代码如下

  1. Class.forName("Student")
  2. class Student{
  3. static {
  4. System.out.println("静态代码块执行了...")
  5. }
  6. }

Java操作Json字符串

Java操作JSON字符串

Gson

示例1

Java对象转JSON字符串

  1. User user = new User();
  2. user.setName("zs");
  3. user.setAge(18);
  4. Gson gson = new Gson();
  5. String s = gson.toJson(user);
  6. System.out.println(s);

示例2

JSON字符串转Java对象

  1. String str = "{\"name\":\"zs\",\"age\":18}";
  2. Gson gson = new Gson();
  3. User user = gson.fromJson(str, User.class);
  4. System.out.println(user);

示例三

Java集合转JSON字符串

  1. ArrayList<User> users = new ArrayList<>();
  2. User u1 = new User();
  3. User u2 = new User();
  4. u1.setName("zs");
  5. u1.setAge(18);
  6. u2.setName("ls");
  7. u2.setAge(23);
  8. users.add(u1);
  9. users.add(u2);
  10. System.out.println(users);
  11. Gson gson = new Gson();
  12. String s = gson.toJson(users);
  13. System.out.println(s); // [{"name":"zs","age":18},{"name":"ls","age":23}]

示例四

JSON字符串转Java对象

  1. String str = "[{\"name\":\"zs\",\"age\":18},{\"name\":\"ls\",\"age\":23}]";
  2. Gson gson = new Gson();
  3. ArrayList<User> users = new ArrayList<>();
  4. // 创建解析器对象
  5. JsonElement jsonElement = JsonParser.parseString(str);
  6. // 转为数组
  7. JsonArray jsonArray = jsonElement.getAsJsonArray();
  8. for (JsonElement element : jsonArray) {
  9. User user = gson.fromJson(element, User.class);
  10. users.add(user);
  11. }
  12. System.out.println(users); // [User(name=zs, age=18), User(name=ls, age=23)]

七牛云文件上传和下载

文件上传

七牛云对象存储

https://portal.qiniu.com/kodo/bucket

文件上传步骤

(1)新建存储空间

JavaSE基础知识 - 图1

(2)新建Maven项目,导入依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.qiniu</groupId>
  4. <artifactId>qiniu-java-sdk</artifactId>
  5. <version>7.7.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.squareup.okhttp3</groupId>
  9. <artifactId>okhttp</artifactId>
  10. <version>3.14.2</version>
  11. <scope>compile</scope>
  12. </dependency>
  13. <dependency>
  14. <groupId>com.google.code.gson</groupId>
  15. <artifactId>gson</artifactId>
  16. <version>2.8.5</version>
  17. <scope>compile</scope>
  18. </dependency>
  19. <dependency>
  20. <groupId>com.qiniu</groupId>
  21. <artifactId>happy-dns-java</artifactId>
  22. <version>0.1.6</version>
  23. <scope>test</scope>
  24. </dependency>
  25. <dependency>
  26. <groupId>junit</groupId>
  27. <artifactId>junit</artifactId>
  28. <version>4.12</version>
  29. <scope>test</scope>
  30. </dependency>
  31. </dependencies>

(3)文件上传示例代码如下

  1. @Test
  2. public void testUpload() {
  3. //构造一个带指定 Region 对象的配置类
  4. Configuration cfg = new Configuration(Region.autoRegion());
  5. UploadManager uploadManager = new UploadManager(cfg);
  6. // 上传凭证
  7. String accessKey = "";
  8. String secretKey = "";
  9. String bucket = "";
  10. // 图片资源路径
  11. String localFilePath = "";
  12. String key = null;
  13. Auth auth = Auth.create(accessKey, secretKey);
  14. String upToken = auth.uploadToken(bucket);
  15. try {
  16. Response response = uploadManager.put(localFilePath, key, upToken);
  17. //解析上传成功的结果
  18. DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
  19. System.out.println(putRet.key);
  20. System.out.println(putRet.hash);
  21. } catch (QiniuException ex) {
  22. Response r = ex.response;
  23. System.err.println(r.toString());
  24. try {
  25. System.err.println(r.bodyString());
  26. } catch (QiniuException ex2) {
  27. //ignore
  28. }
  29. }
  30. }

说明

accessKey以及secretKey的获取方式如下

JavaSE基础知识 - 图2

bucket为存储空间的名称

文件下载

域名+图片资源标识

我们只要拿到图片的唯一标识再拼接上域名即可访问图片

示例代码如下

http://r4ilk88q6.hn-bkt.clouddn.com/FvNY7fWljbieOAA2sE_KaWkC0Em2