JAVAEE知识点复习(连载四)

JavaSE知识点第二部分:Java核心类

  1. 基本数据包装类型
    1)整数型:byte—》Byte
    short—》Short;
    int—》Integer;
    long—》Long;
    2)浮点型:float—》Float;
    double—》Double;
    3)布尔型:boolean—》Boolean;
    4)字符型:char—》Character
    ○判断方法:isLetter()判断是否为字母;
    ○isLowerCase()判断是否为小写字母;
    ○isLetterOrDigit()判断是否为数字或字母;
    ○isSpaceChar()判断是否为空白字符;
    ○isUpperCase()判断是否为大写字母;
    ○isDigit()判断是否为数字;
    △转换:
    ○isLowerCase()转换为小写字母;
    ○toUpperCase()转换为大写字母;

2.Object
特点:是所有类的父类,每个类都直接或间接继承了Object;
△方法
○equals()判断两个对象的值是否相等;
○toString()默认打印对象的内存地址,可以被重写,一般用于打印对象的内部信息;
○getClass()获取对象的类类型,即获取Class;
○notify()唤醒处于等待的对象;
○wait()让对象等待;
○notifyAll()唤醒所有等待的对象;

3 字符串
3.1 String
△构造方法
○String(byte[] b,String char)把字节数组解码为指定编码的字符串;
○String(byte[] b,int start,int end)从字节数组下标开始start处开始解码,到下标end(不包含end)

△获取索引
○charAt(int index)返回指定索引处的char值;
○indexOf(int ch)返回指定字符串在此字符串中第一次出现处的索引;
○lastIndex(int ch)返回指定字符串在此字符串中最后一次出现的索引;
○length()获取字符串长度;

△判断字符串
○compareTo(String anotherString)按字典顺序比较两个字符串;
○contains(CharSequence s)当且仅当此字符串包含指定的char值序列时,返回true;
○endsWith(String suffix)测试此字符串与以指定的后缀结束;
○equals(Object an Object)将此字符串与指定对象比较;
○matches(String regex)告知此字符串是否匹配给定的正则表达式;
○startsWith(String prefix)测试此字符串是否以指定的前缀开始;
○isEmpty()当且仅当length()为0时返回true;

△转换
○getBytes()把字符串转为字节数组;
○valueOf()把指定类型转为字符串;
○toCharArray()把字符串转为字符数组;
○toLowerCase()转为小写字母;
○toUpperCase()转为大写字母;
○trim()清除前后空白格;

△拆分
○split(String regex)根据正则表达式的匹配把字符串拆分成字符串数组;
○substring(int beginIndex,int endIndex)按照指定索引拆分字符串;

3.2 可变长度字符串
○String Builder:线程不安全的,效率高于StringBuffer;
○String Buffer:线程安全的;
这里写图片描述

4 时间日期
4.1 java.util.Date
△子类
java.sql.Date—》格式:yyyy-MM-dd 年月日;
java.sql.Time—》格式:HH–mm–ss 时分秒;
java.sql.Timestamp—》时间戳;

△构造方法
○Date()获取系统当前时间;
○Date(long t)给定一个时间戳,获取时间戳表示的日期;

△常用方法
○after(Date d)当前日期对象是否在指定日期之后;
○before(Date d)当前日期对象是否在指定日期之前;
○getTime()获得当前的时间戳;
○setTime()设置时间对象的具体时间为指定的时间戳;
○compareTo(Date antherDate)比较两个日期的顺序;

4.2 java.util.Calendar
△获取对象:Calendar.getInstance();
△常用方法
○add(int field,int value)计算时间日期的偏移量;
○getTime()获得Date类型的日期对象;
○getTimeMillis()获得时间戳;
○set(int field,int value)设置具体的时间;
○set(year,month,day,hour,minute,second)通过参数直接设置具体时间;
○setTime(Date d)把Date类型转为Calendar类型;

4.3 java.text.SimpleDateFormat
△构造方法:SimpleDateFormat(String s)参数为格式
格式化时间:format(Date d);
parse(String date)把字符串类型解析为Date类型

5 异常处理
△异常处理方式
○向外抛出:throws
○捕获异常:try–catch–finally;

△自定义异常:继承异常类即可;

△常见异常
○ArithmeticException:算术异常;
○NullPointerException:空指针异常;
○IndexOutOfBoundsException:下标越界异常,有两个子类—》ArrayIndexOutBoundsException(数组下标越界),——》StringIndexOutOfBoundsException(字符串下标越界);
○ClassCastException:类型转换异常;
○ParseException:解析异常;
○InputMismatchException:输入不匹配异常;


JAVESE 第三部分知识点 JavaAPI
1 多线程
1.1 开启线程的方式
法一:继承Thread类,重写run方法,实例化Thread对象,调用start();
法二:实现Runnable接口,重写run方法,使用Thread(Runnable)构造方法创建对象,调用start();

1.2 线程的生命周期
这里写图片描述

1.3 线程控制方法
○slee(long millis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行);
○join()等待该线程终止;
○set Priority(int newPriority)更改线程优先级,范围1-10;
○get Priority()返回当前线程的优先级;
○currentThread()获得当前线程对象,下面代码使用在Runnable接口的实现类中,获得当前线程对象的名称:
Thread.currentThread().getName();
如果是在Thread子类中获得当前线程对象,可以直接调用this关键字:this.getName();
○setName(String s)设置线程名称;

1.4 并发问题
多线程共享数据时,会出现线程并发问题,例如:数据不匹配问题(多账户转账/消费)
解决:使用synchronized关键字为对象加锁;
线程A:

public class A extends Thread{

private Object o1;
private Object o2;

public A(Object o1,Object o2){
    this.o1 = o1;
    this.o2 = o2;
}

@Override
public void run() {
            synchronized (o1) {
        System.out.println("线程A持有o1对象");
        synchronized (o2) {
            System.out.println("线程A持有o1对象和o2对象");
            o2.notify();
        }
        System.out.println("线程A释放o2对象,继续持有o1对象");
    }
    System.out.println("线程A释放o1对象和o2对象");
}   

}
线程B:
public class B extends Thread{

private Object o1;
private Object o2;

public B(Object o1,Object o2){
    this.o1 = o1;
    this.o2 = o2;
}

@Override
public void run() {

    synchronized (o2) {
        System.out.println("线程B持有o2对象");
        try {
            o2.wait();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        synchronized (o1) {
            System.out.println("线程B持有o1对象和o2对象");   
        }
        System.out.println("线程B释放o1对象,继续持有o2对象");
    }
    System.out.println("线程B释放o1对象和o2对象");
}

}
Test类:
public static void main(String[] args) {
//创建2个对象
Object o1 = new Object();
Object o2 = new Object();
//实例化线程对象
A a = new A(o1,o2);
B b = new B(o1,o2);
//启动线程
a.start();
b.start();
}

1.5 死锁问题
使用线程锁时会出现死锁问题;
解决:使用Object类的wait()方法让对象处于等待状态,使用notify()方法来唤醒处于等待的对象;
sleep()与wait()的区别:
sleep()的调用者是线程对象,不能被唤醒,让全员都处于等待的状态;
wait()的调用者一般为锁的对象,可以被notify()方法唤醒,可以释放锁,只让调用者处于等待状态,其他的对象继续工作(我等待,大家上);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值