Java 本地化的实现
Localizing Date 本地化时间
Localizing Currency 本地化货币
Localizing Number 本地化数字
Localing Text 本地化文本
对于本地化,java 的 Locale 类。Util 包的使用方法如下
1 | Locale l = new Locale ("de","DE"); |
Localizing Date 本地化时间
1 | DateTimeFormatter localFormater= |
Localizing Date 本地化时间
Localizing Currency 本地化货币
Localizing Number 本地化数字
Localing Text 本地化文本
对于本地化,java 的 Locale 类。Util 包的使用方法如下
1 | Locale l = new Locale ("de","DE"); |
1 | DateTimeFormatter localFormater= |
implements Serializable
public interface Serializable
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
若该类没实现 Serializable 接口, 则在使用时会抛出 java.io.NotSerializableException
现给出一串数据(313, 89, 123, 323, 313, 15, 90, 56, 39)求出最大值和最小值并输出。
方法一:排序后输出
1 | Arrays.sort(data); |
什么是 ClassLoader
ClassLoader 简称类加载器,主要用于加载和校验编译后的 Java 文件(即:以.class结尾的文件);
有哪些类加载器(ClassLoader)
AppClassLoader(应用类加载器)
ExtClassLoader(扩展类加载器注意:JDK1.8后被修改为平台类加载器)
BootstrapClassLoader(启动类加载器)
获取类加载器
通过简单的 demo 来得到类加载器
1 | public class User { |
Java 虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。
Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。
这里说的变量包括实例字段、静态字段和构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的,不会共享,也就不存在竞争的问题。
Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,此外每条线程还有自己的工作内存(Working Memory)。
线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,不能直接读写主内存中的变量。
并且,不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值得传递均需要通过主内存来完成,线程、主内存、工作内存关系如下图:
Java 8 之后推出的 Lambda 表达式开启了 Java 语言支持函数式编程(Functional Programming)的新时代。
Lambda 表达式,也称为闭包(Closure),现在很多语言都支持 Lambda 表达式,如 C++、C#、Swift、Objective-C 和 JavaScript 等。为什么 Lambda 表达式这怎么受欢迎,这是因为 Lambda 表达式是实现支持函数式编程技术基础。
函数式编程与面向对象编程有很大的差别,函数式编程将程序代码看作数学中的函数,函数本身作为另一个函数的参数或返回值,即高阶函数。而面向对象编程是按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建的软件系统就存在什么样的实体。即便 Java 8 之后提供了对函数式编程的支持,但是 Java 还是以面向对象为主的语言,函数式编程只是对 Java 语言的补充。
简单来说,Lambda 表达式是创建匿名内部类的语法糖(syntax sugar)。在编译器的帮助下,可以让开发人员用更少的代码来完成工作。
Lambda 表达式标准语法形式如下:
1 | (参数列表) -> { |