变量自增
示例代码如下
public static void main(String[] args) {int i = 1;i = i++; // i=1int j = i++; // j=1 i=2int k = i + ++i * i++; // 2 + 3 * 3System.out.println("i=" + i); // 4System.out.println("j=" + j); // 1System.out.println("k=" + k); // 11}
单例设计模式
单例设计的几种方式
饿汉式
(1)示例代码
class Singleton {public static final Singleton INSTANCE = new Singleton();// 私有化构造方法private Singleton(){}}
(2)示例代码
enum Singleton {INSTANCE}
(3)示例代码
class Singleton {public static final Singleton INSTANCE;static {INSTANCE = new Singleton();}// 私有化构造方法private Singleton(){}}
懒汉式
(1)示例代码
非线程安全
class Singleton {static Singleton instance;// 提供获取实例方法public static Singleton getINSTANCE(){if(instance == null){instance = new Singleton();}return instance;}// 私有化构造方法private Singleton(){}}
线程安全
class Singleton {private static Singleton instance;// 提供获取实例方法public static Singleton getINSTANCE(){if(instance == null){synchronized (Singleton.class){if(instance == null){instance = new Singleton();}return instance;}}return instance;}// 私有化构造方法private Singleton(){}}
(2)示例代码
class Singleton {// 静态内部类private static class Inner {private static final Singleton INSTANCE = new Singleton();}// 提供获取实例方法public static Singleton getINSTANCE(){return Inner.INSTANCE;}// 私有化构造方法private Singleton(){}}
类和对象初始化
示例代码
class Father {private int i = test();private static int j = method();static{System.out.println("(1)");}Father() {System.out.println("(2)");}{System.out.println("(3)");}public int test(){System.out.println("(4)");return 1;}public static int method() {System.out.println("(5)");return 1;}}class Son extends Father {private int i = test();private static int j = method();static {System.out.println("(6)");}Son() {super();System.out.println("(7)");}{System.out.println("(8)");}public int test(){System.out.println("(9)");return 1;}public static int method() {System.out.println("(10)");return 1;}public static void main(String[] args) {Son son = new Son();System.out.println();Son son1 = new Son();}}// 执行结果// (5)// (1)// (10)// (6)// (9)// (3)// (2)// (9)// (8)// (7)// (9)// (3)// (2)// (9)// (8)// (7)
反射机制
什么是反射机制呢?大白话就是创建实例对象的一种手段
获取字节码文件对象的三种方式
// 通过Class.forName("className")获取// 通过class属性获取// 通过getClass()方法获取
示例代码如下
Class.forName("java.lang.String")String.getClass()String.class
通过反射实例化对象
示例代码如下
Class c = Class.forName("java.lang.String")String s = s.newInstance()
注意
通过Class.forName方式获取字节码文件对象,会触发类加载
示例代码如下
Class.forName("Student")class Student{static {System.out.println("静态代码块执行了...")}}
Java操作Json字符串
Java操作JSON字符串
Gson
示例1
Java对象转JSON字符串
User user = new User();user.setName("zs");user.setAge(18);Gson gson = new Gson();String s = gson.toJson(user);System.out.println(s);
示例2
JSON字符串转Java对象
String str = "{\"name\":\"zs\",\"age\":18}";Gson gson = new Gson();User user = gson.fromJson(str, User.class);System.out.println(user);
示例三
Java集合转JSON字符串
ArrayList<User> users = new ArrayList<>();User u1 = new User();User u2 = new User();u1.setName("zs");u1.setAge(18);u2.setName("ls");u2.setAge(23);users.add(u1);users.add(u2);System.out.println(users);Gson gson = new Gson();String s = gson.toJson(users);System.out.println(s); // [{"name":"zs","age":18},{"name":"ls","age":23}]
示例四
JSON字符串转Java对象
String str = "[{\"name\":\"zs\",\"age\":18},{\"name\":\"ls\",\"age\":23}]";Gson gson = new Gson();ArrayList<User> users = new ArrayList<>();// 创建解析器对象JsonElement jsonElement = JsonParser.parseString(str);// 转为数组JsonArray jsonArray = jsonElement.getAsJsonArray();for (JsonElement element : jsonArray) {User user = gson.fromJson(element, User.class);users.add(user);}System.out.println(users); // [User(name=zs, age=18), User(name=ls, age=23)]
七牛云文件上传和下载
文件上传
七牛云对象存储
https://portal.qiniu.com/kodo/bucket
文件上传步骤
(1)新建存储空间

(2)新建Maven项目,导入依赖
<dependencies><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.7.0</version></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.2</version><scope>compile</scope></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version><scope>compile</scope></dependency><dependency><groupId>com.qiniu</groupId><artifactId>happy-dns-java</artifactId><version>0.1.6</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
(3)文件上传示例代码如下
@Testpublic void testUpload() {//构造一个带指定 Region 对象的配置类Configuration cfg = new Configuration(Region.autoRegion());UploadManager uploadManager = new UploadManager(cfg);// 上传凭证String accessKey = "";String secretKey = "";String bucket = "";// 图片资源路径String localFilePath = "";String key = null;Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);try {Response response = uploadManager.put(localFilePath, key, upToken);//解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);System.out.println(putRet.hash);} catch (QiniuException ex) {Response r = ex.response;System.err.println(r.toString());try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}}}
说明
accessKey以及secretKey的获取方式如下

bucket为存储空间的名称
文件下载
域名+图片资源标识
我们只要拿到图片的唯一标识再拼接上域名即可访问图片
示例代码如下
http://r4ilk88q6.hn-bkt.clouddn.com/FvNY7fWljbieOAA2sE_KaWkC0Em2
