乙巳🐍年

acc8226 的博客

Random 类

让系统产生随机数使用

产生 0~9 的随机数 (int)(Math.random()*10);
产生 0~10 的随机数为 (int)(Math.random()*(11));
产生 0~999 的随机数 (int)(Math.random()*1000);

产生 1~10 的随机数为 (int)(Math.random()*10) + 1;

生成从 0 到 n-1 的随机整数 即返回值[0,n) (int)(Math.random()*(n+1);
生成从 0 到 n 的随机整数 即返回值[0,n] (int)(Math.random()*(n+1);

生成从 a 到 b 的随机整数 即返回值[a,b]
a + (int)(Math.random()*(b-a+1));

其实 Math 的 random 方法用的就是 util 包中的 Random 类。因此可以 Random.nextDouble() 替换 Math.random(), 但是这样说不太准确。

阅读全文 »

Localizing Date 本地化时间
Localizing Currency 本地化货币
Localizing Number 本地化数字
Localing Text 本地化文本

对于本地化,java 的 Locale 类。Util 包的使用方法如下

1
2
Locale l = new Locale ("de","DE");
//第一个参数:语言代码; 第二个参数:城市代码

Localizing Date 本地化时间

1
2
3
DateTimeFormatter localFormater=
DateTimeFormatter.ofPattern("yyyy/MM/dd E a HH:mm:ss", new Locale("en", "US"));
System.out.println(LocalDateTime.now().format(localFormater));
阅读全文 »

对序列化的思考

implements Serializable

public interface Serializable
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

若该类没实现 Serializable 接口, 则在使用时会抛出 java.io.NotSerializableException

常用方法

找出最大值 和 最小值

现给出一串数据(313, 89, 123, 323, 313, 15, 90, 56, 39)求出最大值和最小值并输出。

方法一:排序后输出

1
2
3
Arrays.sort(data);
System.out.println(data[0]);
System.out.println(data[data.length - 1]);
阅读全文 »

什么是 ClassLoader
ClassLoader 简称类加载器,主要用于加载和校验编译后的 Java 文件(即:以.class结尾的文件);

有哪些类加载器(ClassLoader)
AppClassLoader(应用类加载器)
ExtClassLoader(扩展类加载器注意:JDK1.8后被修改为平台类加载器)
BootstrapClassLoader(启动类加载器)

获取类加载器
通过简单的 demo 来得到类加载器

1
2
3
4
5
6
7
8
9
public class User {
public static void main(String[] args) {
User user = new User();
Class<? extends User> userClass = user.getClass();
System.out.println(userClass.getClassLoader());
System.out.println(userClass.getClassLoader().getParent());
System.out.println(userClass.getClassLoader().getParent().getParent());
}
}
阅读全文 »

Java 内存模型

Java 虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。

定义模型的目标

Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。
这里说的变量包括实例字段、静态字段和构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的,不会共享,也就不存在竞争的问题。

主内存与工作内存

Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,此外每条线程还有自己的工作内存(Working Memory)。

线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,不能直接读写主内存中的变量。

并且,不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值得传递均需要通过主内存来完成,线程、主内存、工作内存关系如下图:

阅读全文 »
0%