文章目录
1 API的概述(了解)
(1)应用程序编程接口。
(2)就是JDK提供给我们的一些提高编程效率的java类
2 Object类(掌握)
- Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。
- Object类的构造方法有一个,并且是无参构造
这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是无参构造
2.1 toString()方法
toString()
- 返回对象的字符串表示,默认是由类的全路径+’@’+哈希值的十六进制表示。这个表示其实是没有意义的,一般子类都会重写该方法。
- 如何重写呢?
把该类的所有成员变量值组成返回即可。
重写的最终版方案就是自动生成toString()方法@Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; }System.out.println(s.toString()); // 输出对象的方法相当于打印对象的toString方法 System.out.println(s);
2.2 equals()方法
比较两个对象是否相同。默认情况下,比较的是地址值是否相同。而比较地址值是没有意义的,所以,一般子类也会重写该方法。
重写过程,我也详细的讲解和分析了。但是最终还是自动生成。
@Override
public boolean equals(Object obj) {
//为了提高效率
if(this == obj){
return true;
}
//为了提供程序的健壮性
//我先判断一下,obj是不是学生的一个对象,如果是,再做向下转型,如果不是,直接返回false。
//这个时候,我们要判断的是对象是否是某个类的对象?
//记住一个格式:对象名 instanceof 类名
//表示:判断该对象名是否是该类名一个对象
if(!(obj instanceof Student)){
return false;
}
//如果是就继续
Student s = (Student)obj;
//System.out.println("同一个对象,还需要向下转型并比较吗?");
return this.name.equals(s.name) && this.age == s.age;
}
2.3 了解的方法
A:hashCode() 返回对象的哈希值。哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值。
B:getClass() 返回对象的字节码文件对象,反射中我们会详细讲解
C:finalize() 用于垃圾回收,在不确定的时间
D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。
2.4 两个注意问题
A:直接输出一个对象名称,其实默认调用了该对象的toString()方法。
B:面试题
== 和equals()的区别?
A: ==
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
B: equals()
只能比较引用类型。默认情况下,比较的是地址值是否相同。
3 Scanner类(了解)
在JDK5以后出现的用于键盘录入数据的类
- 构造方法:
public Scanner(InputStream source) - 常用的格式:
说明:System类下有一个静态的字段:public static final InputStream in; 标准的输入流,对应着键盘录入。InputStream is = System.in;Scanner sc = new Scanner(System.in); - 基本方法格式:
A: hasNextXxx() 判断是否是某种类型的
B: nextXxx() 返回某种类型的元素
举例:用int类型的方法举例public boolean hasNextInt() public int nextInt() - 可能会出现的问题 :
1: 常用的两个方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
2: 出现问题:
先获取一个数值,在获取一个字符串,会出现问题。
3: 主要原因:就是那个换行符号的问题。
4: 如何解决呢?
A:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。
B:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。
4 String类(掌握)
字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。
4.1 构造方法
A:public String()
B:public String(byte[] bytes)
C:public String(byte[] bytes,int offset,int length)
D:public String(char[] value)
E:public String(char[] value,int offset,int count)
F:public String(String original)
下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
G:String s = "hello";
4.2 字符串的特点
- 字符串一旦被赋值,就不能改变。
注意:这里指的是字符串的内容不能改变,而不是引用不能改变。

- 字符串如果是变量相加,先开空间,在拼接。
- 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
- 字面值作为字符串对象和通过构造方法创建对象的不同
String s = new String(“hello”);和String s = "hello"的区别?
答:前者会创建2个对象,后者创建1个对象。

- String的equals方法
==:比较引用类型比较的是地址值是否相同
equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。
4.3 String类的判断功能
String类的判断功能:
boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean contains(String str):判断大字符串中是否包含小字符串
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空。
注意:
字符串内容为空和字符串对象为空。
String s = “”;
String s = null;
4.4 String类的获取功能
* int length():获取字符串的长度。
* char charAt(int index):获取指定索引位置的字符
* int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
* 为什么这里是int类型,而不是char类型?
* 原因是:'a'和97其实都可以代表'a'
* int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
* int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
* int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
* String substring(int start):从指定位置开始截取字符串,默认到末尾。
* String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。
4.5 String的转换功能
* byte[] getBytes():把字符串转换为字节数组。
* char[] toCharArray():把字符串转换为字符数组。
* static String valueOf(char[] chs):把字符数组转成字符串。
* static String valueOf(int i):把int类型的数据转成字符串。
* 注意:String类的valueOf方法可以把任意类型的数据转成字符串。
* String toLowerCase():把字符串转成小写。
* String toUpperCase():把字符串转成大写。
* String concat(String str):把字符串拼接。
4.6 String的其他功能
* 替换功能:
* String replace(char old,char new)
* String replace(String old,String new)
*
* 去除字符串两空格
* String trim()
*
* 按字典顺序比较两个字符串
* int compareTo(String str)
* int compareToIgnoreCase(String str)
4.7 字符串案例
A:模拟用户登录
B:字符串遍历
C:统计字符串中大写,小写及数字字符的个数
D:把字符串的首字母转成大写,其他小写
E:把int数组拼接成一个指定格式的字符串
F:字符串反转
G:统计大串中小串出现的次数
5 正则表达式(理解)
正则表达式:符合一定规则的字符串。
5.1 常见规则
A:字符
x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
C:预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
5.2 常见功能
A:判断功能
String类的public boolean matches(String regex)
B:分割功能
String类的public String[] split(String regex)
C:替换功能
String类的public String replaceAll(String regex,String replacement)
D:获取功能
Pattern和Matcher
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
find():查找存不存在
group():获取刚才查找过的数据
5.3 常见案例
案例:
A:判断电话号码和邮箱(matches)
String phone = sc.nextLine();
//定义手机号码的规则
String regex = "1[38]\\d{9}";
//调用功能,判断即可
boolean flag = phone.matches(regex);
//定义邮箱的规则
//String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";
String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";
//调用功能,判断即可
boolean flag = email.matches(regex);
B:按照不同的规则分割数据(split)
C:把论坛中的数字替换为*(replaceAll)
D:获取字符串中由3个字符组成的单词
/*
获取功能
Pattern和Matcher类的使用
模式和匹配器的基本使用顺序
*/
public static void main(String[] args) {
// 定义字符串
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
// 规则
String regex = "\\b\\w{3}\\b";
// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串
// public boolean find()
// boolean flag = m.find();
// System.out.println(flag);
// // 如何得到值呢?
// // public String group()
// String ss = m.group();
// System.out.println(ss);
//
// // 再来一次
// flag = m.find();
// System.out.println(flag);
// ss = m.group();
// System.out.println(ss);
while (m.find()) {
System.out.println(m.group());
}
// 注意:一定要先find(),然后才能group()
// IllegalStateException: No match found
// String ss = m.group();
// System.out.println(ss);
}
6 Math类
* 成员变量:
* public static final double PI
* public static final double E
* 成员方法:
* public static int abs(int a):绝对值
* public static double ceil(double a):向上取整
* public static double floor(double a):向下取整
* public static int max(int a,int b):最大值 (min自学)
* public static double pow(double a,double b):a的b次幂
* public static double random():随机数 [0.0,1.0)
* public static int round(float a) 四舍五入(参数为double的自学)
* public static double sqrt(double a):正平方根
案例:
需求:请设计一个方法,可以实现获取任意范围内的随机数。
/*
* 写一个功能 两个明确: 返回值类型:int 参数列表:int start,int end
*/
public static int getRandom(int start, int end) {
// 回想我们讲过的1-100之间的随机数
// int number = (int) (Math.random() * 100) + 1;
// int number = (int) (Math.random() * end) + start;
// 发现有问题了,怎么办呢?
int number = (int) (Math.random() * (end - start + 1)) + start;
return number;
}
7 Random(理解)
Random:产生随机数的类
* 构造方法:
* public Random():没有给种子,用的是默认种子,是当前时间的毫秒值,每次产生的随机数不同
* public Random(long seed):给出指定的种子,每次种子相同,随机数就相同
*
* 成员方法:
* public int nextInt():返回的是int范围内的随机数
* public int nextInt(int n):返回的是[0,n)范围的内随机数
public class RandomDemo {
public static void main(String[] args) {
// 创建对象
// Random r = new Random();
Random r = new Random(1111);
for (int x = 0; x < 10; x++) {
// int num = r.nextInt();
int num = r.nextInt(100) + 1;
System.out.println(num);
}
}
}
8 System(掌握)
System类包含一些有用的类字段和方法。它不能被实例化
* 方法:
* public static void gc():运行垃圾回收器。
* public static void exit(int status):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
* public static long currentTimeMillis():返回以毫秒为单位的当前时间(可以用来统计程序的运行时间)
* public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
* 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
举个例子:
// 定义数组
int[] arr = { 11, 22, 33, 44, 55 };
int[] arr2 = { 6, 7, 8, 9, 10 };
// 请大家看这个代码的意思
System.arraycopy(arr, 1, arr2, 2, 2);
System.out.println(Arrays.toString(arr2));
//结果:[6, 7, 22, 33, 10]
9 BigInteger(理解)
BigInteger:可以让超过Integer范围内的数据进行运算
// 通过大整数来创建对象
BigInteger bi = new BigInteger("2147483648");
System.out.println("bi:" + bi);
//一些方法
* public BigInteger add(BigInteger val):加
* public BigInteger subtract(BigInteger val):减
* public BigInteger multiply(BigInteger val):乘
* public BigInteger divide(BigInteger val):除
* public BigInteger[] divideAndRemainder(BigInteger val):返回商和余数的数组
10 BigDecimal(理解)
由于在运算的时候,float类型和double很容易丢失精度。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal。
BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。
* 构造方法:
* public BigDecimal(String val)
*
* public BigDecimal add(BigDecimal augend)
* public BigDecimal subtract(BigDecimal subtrahend)
* public BigDecimal multiply(BigDecimal multiplicand)
* public BigDecimal divide(BigDecimal divisor)
* public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):商,几位小数,如何舍取
本文深入解析Java核心类库,覆盖API、Object类、Scanner类、String类、正则表达式、Math类等关键内容,详述各类的构造方法、特性与应用,如toString()、equals()方法的重写,String类的判断、获取与转换功能,及正则表达式的规则与功能。

被折叠的 条评论
为什么被折叠?



