JavaSE的常用API

前言

学习JDK中提供的各种功能的Java类,API(Application Programming Interface)

正文

Object

hashCode

A: 返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
B: 不同对象的hashCode()一般来说不会相同。
    但是,同一个对象的hashCode()值肯定相同。

equal

==和equals()的区别?
A:==
    基本类型:比较的是值是否相同
    引用类型:比较的是地址值是否相同
B:equals()
    只能比较引用类型。默认情况下,比较的是地址值是否相同。
    但是,我们可以根据自己的需要重写该方法。
    String类型 也需要用equals来比较

clone

创建并返回此对象的一个副本,这种克隆机制十分高效,而且二者之间完全隔离。
自定义类实现克隆步骤:
    A:自定义类实现Cloneable接口,这是一个标记性接口,实现这个接口的类的对象可以实现自我克隆。
    B:自定义类中重写Object类的clone()方法。
    C:重写clone()方法时通过super.clone()调用Object类的clone()方法来得到该对象的副本,并返回该副本。

深复制与浅复制

Java的clone():深复制与浅复制
clone() 方法 基本数据类型 不会变,但是引用类型会随着克隆的对象改变而本身的属性改变,所以要注意到 clone()方法的正确使用

Scanner

问题

先nextInt()然后nextLine(),后nextLine()读取错误的问题
A:重新创建对象。
B:都以字符串形式接收,然后把字符串转成int类型。

Scanner in = new Scanner(System.in);
String x = in.nextLine();
String str = in.nextLine();
int xx = Integer.parseInt(x);

String

字符串的特点

A:字符串一旦被赋值,就不能改变。
注意:这里指的是字符串的内容不能改变,而不是引用不能改变
B:字面值作为字符串对象和通过构造方法创建对象的不同
String s = new String(“hello”);和String s = “hello”的区别
前者申请了堆区的对象 和 方法区的字符串常量区的对象
后者只需要去创建 方法区的字符串常量区的对象

面试题

字符串如果是变量相加,先开空间,在拼接。
字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。

String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";

System.out.println(s3 == s1 + s2);// false,这里是变量相加
System.out.println(s3 == "hello" + "world");// true,常量相加
System.out.println(s3 == "hell" + "oworld"); //这个也是true

String的转换功能

 byte[] getBytes():把字符串转换为字节数组。
 char[] toCharArray():把字符串转换为字符数组。
 static String valueOf(char[] chs):把字符数组转成字符串。
 static String valueOf(object i):
    注意:String类的valueOf方法可以把任意类型的数据转成字符串。
 String toLowerCase():把字符串转成小写。
 String toUpperCase():把字符串转成大写。
 String concat(String str):把字符串拼接。
 int compareTo(String str):看源码 先比较是否字符相同,然后比较长度
 int compareToIgnoreCase(String str)

StringBuffer/StringBuilder

方法

public StringBuffer append(String str) //添加
public StringBuffer insert(int offset,String str) //插入
public StringBuffer deleteCharAt(int index) //删除
public StringBuffer delete(int start,int end) //删除
public StringBuffer replace(int start,int end,String str) //替换
public String substring(int start,int end) //截取

StringBuffer 和 String的相互转换

String -> StringBuffer
    构造方法
StringBuffer -> String
    toString()方法

Arrays

降序排序

class MyComparator implements Comparator<Integer> {
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
}

class Main {
    public static void main(String[] args) {
        Integer[] arr = { 1, 2, 3, 4 };
        // 第一种方法,直接用Collections的reverseOrder方法
        // Arrays.sort(arr, Collections.reverseOrder());

        // 第二种方法,自定义类重写Comparator接口的compare方法
        Arrays.sort(arr, new MyComparator());
    }
}

包装类

基本类型与包装类的对应

基本类型    包装类
byte        Byte
short       Short
int         Integer
long        Long
float       Float
double      Double
char        Character
boolean     Boolean

String 和 int 的相互转换

A:String -- int
    Integer.parseInt("100");
B:int -- String
int a = 100;
String str = "" + a; //第一种
String str = String.valueOf(a); //第二种
String str = Integer.toString(a); //第三种

进制转换

String -> int
Integer.parseInt("64", 16);

int -> String
Integer.toString(100,16)

数据缓冲池

-128127之间的数据缓冲池问题
//byte以内的数据有常量池

Integer s1 = 122;
Integer s2 = 122;
System.out.println(s1 == s2); //返回true

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)

正则表达式

常见规则

Pattern类中有明确的规则,这里只选取用的比较多的
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] 09的字符都包括

C:预定义字符类
    . 任何字符。我的就是.字符本身,怎么表示呢? \.
    \d 数字:[0-9]
    \w 单词字符:[a-zA-Z_0-9]
        在正则表达式里面组成单词的东西必须有这些东西组成

D:边界匹配器
    ^ 行的开头 
    $ 行的结尾 
    \b 单词边界

E:Greedy 数量词 
    X? X,一次或一次也没有
    X* X,零次或多次
    X+ X,一次或多次
    X{n} X,恰好 n 次 
    X{n,} X,至少 n 次 
    X{n,m} X,至少 n 次,但是不超过 m 次 

功能

// 判断
String类的`public boolean matches(String regex)`
// 分割
String类的`public String[] split(String regex)`
// 替换
String类的`public String replaceAll(String regex,String replacement)`
// 获取 详细看Pattern和Matcher

String s = "I do not love you, could you still love me?";
String reg = "\\b\\w{4}\\b";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group());
}

Date

方法

Date():根据当前的默认毫秒值创建日期对象
Date(long date):根据给定的毫秒值创建日期对象

转换

Date   --   String(格式化)
    public final String format(Date date)

Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);

String -- Date(解析)
    public Date parse(String source)
String str = "2008-08-08 12:12:12";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf2.parse(str);

Calendar

方法

Calendar now = Calendar.getInstance();

int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1;
int day = now.get(Calendar.DATE);
//设置日历
public final void set(int year, int month, int date)
//修改某个字段的值
public abstract void add(int field, int amount);

后记

参考资料

next()和nextLine()的区别
java传参的注意事项
sort降序排列
sort降序排列

快捷键

Java编辑器 格式化 Ctrl+Shift+F

标记

2018.4.30 再次修改并复习

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页