《Java架构筑基》从Java基础讲起——常见的API方法

1. Object类

1.1 Object有哪些公用方法?

  • a.方法equals测试的是两个对象是否相等
  • b.方法clone进行对象拷贝【问题:是浅拷贝还是深拷贝?】
  • c.方法getClass返回和当前对象相关的Class对象
  • d.方法notify,notifyall,wait都是用来对给定对象进行线程同步的

2. String类

2.1 String类的一些特性

  • String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
  • 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
  • Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。

2.2 一旦被创建就不能改变

  • String s = new String(“hello”)和String s = “hello”;的区别
  • String的特点一旦被创建就不能改变【内容不能变,引用可以变】

问答题

A:String的特点:    一旦被创建就不能改变
B:案例演示   
     a:如何理解这句话
     String s = "hello" ;
     s =  "world" + "java"; 问s的结果是多少?

下面这条语句一共创建了多少个对象:String s = “a”+“b”+”c”; 分别都是什么?
答案:5个对象
分别是 "a" , "b" , "c" , "ab" , "abc"
因为字符串的特点是一旦被创建就不能被改变,所有在使用常量进行相加的时候,都是在创建新的字符串对象
最后在把字符串"abc"这个常量值赋值给引用变量s

输出结果:

《Java架构筑基》从Java基础讲起——常见的API方法

3. StringBuffer类与StringBuilder类

3.1 StringBuffer类概述

  • 字符串缓冲区,StringBuffer是一个容器
  • 我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。 而StringBuffer就可以解决这个问题
  • 线程安全的可变的字符序列 , 安全对应的效率比较低

3.2 StringBuffer和String的区别

  • String是不可变的字符序列
  • StringBuffer 是可以的字符序列

3.3 StringBuffer和String的相互转换

A:String -- StringBuffer

  • a:通过构造方法
  • b:通过append()方法

B:StringBuffer -- String

  • a: 使用substring方法
  • b:通过构造方法
  • c:通过toString()方法

3.4 StringBuilder类

  • StringBuilder是线程不安全的,其他跟StringBuffer一样;StringBuffer和StringBuilder底层是 char[]数组实现的

4. 数组

4.1 数组高级冒泡排序原理图解

《Java架构筑基》从Java基础讲起——常见的API方法

冒泡排序原理

  • 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
  • 冒泡排序代码
/**
* 冒泡排序
* @param arr
*/
private static void bubbleSort(int[] arr) {
    for(int y = 0 ; y < arr.length - 1; y++) {
        for(int x = 0 ; x < arr.length - 1 - y ; x++ ) {
            if(arr[x] > arr[x+1]) {
                int temp = arr[x] ;
                arr[x] = arr[x+1] ;
                arr[x+1] = temp ;
            }
        }
    }
}

4.2 数组高级选择排序原理图解 image

《Java架构筑基》从Java基础讲起——常见的API方法

选择排序原理

  • 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

数组高级选择排序代码实现

private static void selectSort(int[] arr) {
    for(int index = 0 ; index < arr.length - 1 ; index++) {
        for(int x = index + 1 ; x < arr.length ; x++) {
            if(arr[index] > arr[x]) {
                int temp = arr[index] ;
                arr[index] = arr[x] ;
                arr[x] = temp ;
            }
        }
    }
}

4.3 数组高级二分查找原理图解 image

数组高级二分查找思想

  • 每一次都查中间的那个元素,比较大或者小就能减少一半的元素

数组高级二分查找代码

/**
 * 二分查找
 * @param arr
 * @return
 */
private static int binarySearch3(int[] arr , int value) {
    // 定义三个变量
    int minIndex = 0 ;
    int maxIndex = arr.length - 1 ;
    while(minIndex <= maxIndex) {
        int midIndex = (minIndex + maxIndex) >>> 1 ;
        // 比较
        if(arr[midIndex] == value) {
            return midIndex ;
        }else if(arr[midIndex] > value) {
            maxIndex = midIndex - 1 ;
        }else if(arr[midIndex] < value) {
            minIndex = midIndex + 1 ;
        }
    }
    // 返回
    return -1;
}

5. 基本类型包装类

5.1 为什么会有基本类型包装类

为了对基本数据类型进行更多的操作,更方便的操作,java就针对每一种基本数据类型提供了对应的类类型.

常用的操作之一:用于基本数据类型与字符串之间的转换

5.2 基本类型和包装类的对应

byte           Byte
short          Short
int            Integer
long           Long
float          Float
double         Double
char           Character
boolean        Boolean

6. 正则表达式

正则表达式,不需要记忆,用的时候去查就可以呢

  • 是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
  • 具体使用直接上网搜索
    • 例如,匹配手机号,邮箱,身份证号等等

7. Pattern和Matcher类

* 正则的获取功能需要使用的类

8. Math类

* Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
* 成员变量
public static final double E :         自然底数
public static final double PI:        圆周率
    * 成员方法

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)         获取最大值
public static int min(int a, int b)        获取最小值
public static double pow(double a,double b)获取a的b次幂
public static double random()              获取随机数  返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
public static int round(float a)           四舍五入
public static double sqrt(double a)        获取正平方根

9. Random类

随机类

  • 此类用于产生随机数如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列
  • 构造方法
public Random()             没有给定种子,使用的是默认的(当前系统的毫秒值)
public Random(long seed) 给定一个long类型的种子,给定以后每一次生成的随机数是相同的
public int nextInt()
public int nextInt(int n)

10. System类

系统级类

  • System 类包含一些有用的类字段和方法。它不能被实例化。
  • 系统级操作