Java备忘录模式是一种行为型设计模式,它允许一个对象在其内部状态发生改变时保存其状态,以便以后恢复到原始状态。它是一种有用的设计模式,可以帮助我们在不破坏封装性的情况下保存和恢复对象的内部状态。
public class Memento { private String state; public Memento(String state){ this.state = state; } public String getState(){ return state; } }
Java备忘录模式由三个主要对象组成:Originator、Caretaker 和 Memento。Originator 是创建并在其内部保存历史状态的对象。Caretaker 是一个保存历史状态的容器,它可以将历史状态传递回 Originator 对象中。Memento 是一个包含历史状态的对象,它是 Caretaker 的内部表示形式。
public class Hello {
// main methord
public static void main(String[] args)
{
// Output: Hello, world!
System.out.println("Hello, world!");
}
}
编译和运行
$ javac Hello.java
$ java Hello
Hello, world!
int num = 5;
float floatNum = 5.99f;
char letter = "D";
boolean bool = true;
String site = "quickref.me";
数据类型 | 尺寸 | 默认 | 范围 |
---|---|---|---|
byte
|
1 字节 | 0 | -128 ~ 127 |
short
|
2 字节 | 0 | -2 15 ~ 2 15 -1 |
int
|
4 字节 | 0 | -2 31 ~ 2 31 -1 |
long
|
8 字节 | 0 | -2 63 ~ 2 63 -1 |
float
|
4 字节 | 0.0f | N/A |
double
|
8 字节 | 0.0d | N/A
|
char
|
2 字节 | u0000 | 0 ~ 65535 |
boolean
|
N/A |
fasle | true/false |
String first = "John";
String last = "Doe";
String name = first + " " + last;
System.out.println(name);
请参阅:字符串
String word = "QuickRef";
for (char c: word.toCharArray()) {
System.out.print(c + "-");
}
// Outputs: Q-u-i-c-k-R-e-f-
请参阅:循环
char[] chars = new char[10];
chars[0] = "a"
chars[1] = "b"
String[] letters = {"A", "B", "C"};
int[] mylist = {100, 200};
boolean[] answers = {true, false};
请参阅:数组
int a = 1;
int b = 2;
System.out.println(a + " " + b); // 1 2
int temp = a;
a = b;
b = temp;
System.out.println(a + " " + b); // 2 1
// Widening
// byte<short<int<long<float<double
int i = 10;
long l = i; // 10
// Narrowing
double d = 10.02;
long l = (long)d; // 10
String.valueOf(10); // "10"
Integer.parseInt("10"); // 10
Double.parseDouble("10"); // 10.0
int j = 10;
if (j == 10) {
System.out.println("I get printed");
} else if (j > 10) {
System.out.println("I don"t");
} else {
System.out.println("I also don"t");
}
请参阅:条件
Scanner in = new Scanner(System.in);
String str = in.nextLine();
System.out.println(str);
int num = in.nextInt();
System.out.println(num);
String str1 = "value";
String str2 = new String("value");
String str3 = String.valueOf(123);
String s = 3 + "str" + 3; // 3str3
String s = 3 + 3 + "str"; // 6str
String s = "3" + 3 + "str"; // 33str
String s = "3" + "3" + "23"; // 3323
String s = "" + 3 + 3 + "23"; // 3323
String s = 3 + 3 + 23; // 29
StringBuilder sb = new StringBuilder(10);
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| | | | | | | | | |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
sb.append("QuickRef");
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | u | i | c | k | R | e | f | |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
sb.delete(5, 9);
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | u | i | c | k | | | | |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
sb.insert(0, "我的");
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| M | y | | Q | u | i | c | k | |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
sb.append("!");
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
| M | y | | Q | u | i | c | k | ! |
└───┴───┴───┴───┴───┴───┴───┴───┴───┘
0 1 2 3 4 5 6 7 8 9
String s1 = new String("QuickRef");
String s2 = new String("QuickRef");
s1 == s2 // false
s1.equals(s2) // true
"AB".equalsIgnoreCase("ab") // true
String str = "Abcd";
str.toUpperCase(); // ABCD
str.toLowerCase(); // abcd
str.concat("#"); // Abcd#
str.replace("b", "-"); // A-cd
" abc ".trim(); // abc
"ab".toCharArray(); // {"a", "b"}
String str = "abcd";
str.charAt(2); // c
str.indexOf("a") // 0
str.indexOf("z") // -1
str.length(); // 4
str.toString(); // abcd
str.substring(2); // cd
str.substring(2,3); // c
str.contains("c"); // true
str.endsWith("d"); // true
str.startsWith("a"); // true
str.isEmpty(); // false
String str = "hello";
str.concat("world");
// Outputs: hello
System.out.println(str);
String str = "hello";
String concat = str.concat("world");
// Outputs: helloworld
System.out.println(concat);
一旦创建不能修改,任何修改都会创建一个新的String
int[] a1;
int[] a2 = {1, 2, 3};
int[] a3 = new int[]{1, 2, 3};
int[] a4 = new int[3];
a4[0] = 1;
a4[2] = 2;
a4[3] = 3;
int[] a = {1, 2, 3};
System.out.println(a[0]); // 1
a[0] = 9;
System.out.println(a[0]); // 9
System.out.println(a.length); // 3
int[] arr = {1, 2, 3};
for (int i=0; i < arr.length; i++) {
arr[i] = arr[i] * 2;
System.out.print(arr[i] + " ");
}
// Outputs: 2 4 6
String[] arr = {"a", "b", "c"};
for (int a: arr) {
System.out.print(a + " ");
}
// Outputs: a b c
int[][] matrix = { {1, 2, 3}, {4, 5} };
int x = matrix[1][0]; // 4
// [[1, 2, 3], [4, 5]]
Arrays.deepToString(matrix)
for (int i = 0; i < a.length; ++i) {
for(int j = 0; j < a[i].length; ++j) {
System.out.println(a[i][j]);
}
}
// Outputs: 1 2 3 4 5 6 7
char[] chars = {"b", "a", "c"};
Arrays.sort(chars);
// [a, b, c]
Arrays.toString(chars);
int k = 15;
if (k > 20) {
System.out.println(1);
} else if (k > 10) {
System.out.println(2);
} else {
System.out.println(3);
}
int month = 3;
String str;
switch (month) {
case 1:
str = "January";
break;
case 2:
str = "February";
break;
case 3:
str = "March";
break;
default:
str = "Some other month";
break;
}
// Outputs: Result March
System.out.println("Result " + str);
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
// Outputs: 20
System.out.println(max);
for (int i = 0; i < 10; i++) {
System.out.print(i);
}
// Outputs: 0123456789
for (int i = 0,j = 0; i < 3; i++,j--) {
System.out.print(j + "|" + i + " ");
}
// Outputs: 0|0 -1|1 -2|2
int[] numbers = {1,2,3,4,5};
for (int number: numbers) {
System.out.print(number);
}
// Outputs: 12345
用于循环数组或列表
int count = 0;
while (count < 5) {
System.out.print(count);
count++;
}
// Outputs: 01234
int count = 0;
do{
System.out.print(count);
count++;
} while (count < 5);
// Outputs: 01234
for (int i = 0; i < 5; i++) {
if (i == 3) {
continue;
}
System.out.print(i);
}
// Outputs: 01245
for (int i = 0; i < 5; i++) {
System.out.print(i);
if (i == 3) {
break;
}
}
// Outputs: 0123
集合 | 接口 | 可组织 | 可排序 | 线程安全 | 可复制 | 可为空 |
---|---|---|---|---|---|---|
ArrayList | List | Y | N | N | Y | Y |
Vector | List | Y | N | Y | Y | Y |
LinkedList | List, Deque | Y | N | N | Y | Y |
HashSet | Set | N | N | N | N | One null
|
LinkedHashSet | Set | Y | N | N | N | One null
|
TreeSet | Set | Y | Y | N | N | N |
HashMap | Map | N | N | N | N (key) | One null (key)
|
HashTable | Map | N | N | Y | N (key) | N (key) |
LinkedHashMap | Map | Y | N | N | N (key) | One null (key)
|
TreeMap | Map | Y | Y | N | N (key) | N (key) |
ArrayDeque | Deque | Y | N | N | Y | N |
PriorityQueue | Queue | Y | N | N | Y | N |
List<Integer> nums = new ArrayList<>();
// Adding
nums.add(2);
nums.add(5);
nums.add(8);
// Retrieving
System.out.println(nums.get(0));
// Indexed for loop iteration
for (int i = 0; i < nums.size(); i++) {
System.out.println(nums.get(i));
}
nums.remove(nums.size() - 1);
nums.remove(0); // VERY slow
for (Integer value : nums) {
System.out.println(value);
}
Map<Integer, String> m = new HashMap<>();
m.put(5, "Five");
m.put(8, "Eight");
m.put(6, "Six");
m.put(4, "Four");
m.put(2, "Two");
// Retrieving
System.out.println(m.get(6));
// Lambda forEach
m.forEach((key, value) -> {
String msg = key + ": " + value;
System.out.println(msg);
});
Set<String> set = new HashSet<>();
if (set.isEmpty()) {
System.out.println("Empty!");
}
set.add("dog");
set.add("cat");
set.add("mouse");
set.add("snake");
set.add("bear");
if (set.contains("cat")) {
System.out.println("Contains cat");
}
set.remove("cat");
for (String element : set) {
System.out.println(element);
}
Deque<String> a = new ArrayDeque<>();
// Using add()
a.add("Dog");
// Using addFirst()
a.addFirst("Cat");
// Using addLast()
a.addLast("Horse");
// [Cat, Dog, Horse]
System.out.println(a);
// Access element
System.out.println(a.peek());
// Remove element
System.out.println(a.pop());
修饰符 | 类 | 包 | 子类 | 全局 |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
no modifier | Y | Y | N | N |
private | Y | N | N | N |
String text = "I am learning Java";
// Removing All Whitespace
text.replaceAll("s+", "");
// Splitting a String
text.split("|");
text.split(Pattern.quote("|"));
请参阅:Java 中的正则表达式
// I am a single line comment!
方法 | 描述 |
---|---|
Math.max(a,b)
|
a 和 b 的最大值 |
Math.min(a,b)
|
a 和 b 的最小值 |
Math.abs(a)
|
绝对值a |
Math.sqrt(a)
|
a 的平方根 |
Math.pow(a,b)
|
a的b次方 |
Math.round(a)
|
最接近的整数 |
Math.sin(ang)
|
正弦 |
Math.cos(ang)
|
ang的余弦 |
Math.tan(ang)
|
ang 的切线 |
Math.asin(ang)
|
ang 的反正弦 |
Math.log(a)
|
a 的自然对数 |
Math.toDegrees(rad)
|
角度 rad |
Math.toRadians(deg)
|
以弧度为单位的角度度 |
try {
// something
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("always printed");
}
在 Java 语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:type identifier [ = value][, identifier [= value] .....
本章节我们主要向大家介绍一下Java Character类,以及Character类的用法。Java Character类 使用字符时,我们通常使用的是内置数...
正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言,但是在每种语言中...
什么是异常?程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生...