Java学习_Java核心类
2021-03-09 05:28
标签:调用 链式 核心 mit com 中文 obj 不同 mem 我们把能创建“新”对象的静态方法称为静态工厂方法。 把一组对应的读方法( 输出: 以上更新于 2020年12月25日 00:07:59,后续待更 Java学习_Java核心类 标签:调用 链式 核心 mit com 中文 obj 不同 mem 原文地址:https://www.cnblogs.com/fjnuczq/p/14186661.html
String
内部是通过一个char[]
数组表示的,因此,可以按下面的写法:
String s2 = new String(new char[] {‘H‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘!‘});
private final char[]
字段,以及没有任何修改char[]
的方法实现的。equals()
方法。equalsIgnoreCase()
方法。String
还提供了isEmpty()
和isBlank()
来判断字符串是否为空和空白字符串。join()
,它用指定的字符串连接字符串数组。
String[] arr = {"A", "B", "C"};
String s = String.join("***", arr); // "A***B***C"
formatted()
方法和format()
静态方法,可以传入其他参数,替换占位符,然后生成新的字符串。
1 public class Main {
2 public static void main(String[] args) {
3 String s = "Hi %s, your score is %d!";
4 System.out.println(s.formatted("Alice", 80));
5 System.out.println(String.format("Hi %s, your score is %.2f!", "Bob", 59.5));
6 }
7 }
valueOf()
。
1 String.valueOf(123); // "123"
2 String.valueOf(45.67); // "45.67"
3 String.valueOf(true); // "true"
4 String.valueOf(new Object()); // 类似java.lang.Object@636be97c
new String(char[])
创建新的String
实例时,它并不会直接引用传入的char[]
数组,而是会复制一份,所以,修改外部的char[]
数组不会影响String
实例内部的char[]
数组,因为这是两个不同的数组。UTF-8
又是什么编码呢?因为英文字符的Unicode
编码高字节总是00
,包含大量英文的文本会浪费空间,所以,出现了UTF-8
编码,它是一种变长编码,用来把固定长度的Unicode
编码变成1~4字节的变长编码。通过UTF-8
编码,英文字符‘A‘
的UTF-8
编码变为0x41
,正好和ASCII
码一致,而中文‘中‘
的UTF-8
编码为3字节0xe4b8ad
。
StringBuilder
StringBuilder
,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder
中新增字符时,不会创建新的临时对象。StringBuilder
还可以进行链式操作。
1 public class Main {
2 public static void main(String[] args) {
3 var sb = new StringBuilder(1024);
4 sb.append("Mr ")
5 .append("Bob")
6 .append("!")
7 .insert(0, "Hello, ");
8 System.out.println(sb.toString());
9 }
10 }
StringBuilder
的源码,可以发现,进行链式操作的关键是,定义的append()
方法会返回this
,这样,就可以不断调用自身的其他方法。+
操作,并不需要我们将其改写为StringBuilder
,因为Java编译器在编译时就自动把多个连续的+
操作编码为StringConcatFactory
的操作。在运行期,StringConcatFactory
会自动把字符串连接操作优化为数组复制或者StringBuilder
操作。public StringBuilder delete?(int start, int end)
1 //源码
2 public final class Integer {
3 private final int value;
4 }
Integer.valueOf()
就是静态工厂方法,它尽可能地返回缓存的实例以节省内存。创建新对象时,优先选用静态工厂方法而不是new操作符。处理无符号整型
JavaBean
class
的定义都符合这样的规范:
private
实例字段;public
方法来读写实例字段。
// 读方法:
public Type getXyz()
// 写方法:
public void setXyz(Type value)
boolean
字段比较特殊,它的读方法一般命名为isXyz()。
// 读方法:
public boolean isChild()
// 写方法:
public void setChild(boolean value)
getter
)和写方法(setter
)称为属性(property
)。例如,name
属性:
String getName()
setName(String)
getter
的属性称为只读属性(read-only)setter
的属性称为只写属性(write-only枚举一个JavaBean的所有属性,可以直接使用Java核心库提供的Introspector。
1 import java.beans.*;
2
3 public class Main {
4 public static void main(String[] args) throws Exception {
5 BeanInfo info = Introspector.getBeanInfo(Person.class);
6 for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
7 System.out.println(pd.getName());
8 System.out.println(" " + pd.getReadMethod());
9 System.out.println(" " + pd.getWriteMethod());
10 }
11 }
12 }
13
14 class Person {
15 private String name;
16 private int age;
17
18 public String getName() {
19 return name;
20 }
21
22 public void setName(String name) {
23 this.name = name;
24 }
25
26 public int getAge() {
27 return age;
28 }
29
30 public void setAge(int age) {
31 this.age = age;
32 }
33 }
age
public int Person.getAge()
public void Person.setAge(int)
class
public final native java.lang.Class java.lang.Object.getClass()
null
name
public java.lang.String Person.getName()
public void Person.setName(java.lang.String)
上一篇:算法题:字符串相乘