目录
Java语言特点
简单易学、面向对象、平台无关性、分布式、可靠性、安全性、支持多线程、支持网络编程、编译与解释并存。
Java语言基础
1.数据类型
Java语言定义了4类共八种基本数据类型。
- 整型:byte(1字节),short(2字节),int(4字节),long(8字节)。
- 浮点型:float(4字节),double(8字节)。
- 布尔型:boolean(1字节)。
- 字符型:char(2字节)。
2.类型转换
自动类型转换优先级:byte ➡ short ➡ char ➡ int ➡ long ➡ float ➡ double
字符串转换成数值型数据:
转换的方法 | 功能说明 |
---|---|
Byte.parseByte(String s) | 将数字字符串转换为字节型数据 |
Short.parseShort(String s) | 将数字字符串转换为短整型数据 |
…… | …… |
字符串
字符串常用方法
常用方法 | 功能说明 |
---|---|
public int length() | 返回字符串长度 |
public boolean equals(Object anObject) | 将给定字符串与当前字符串相比较,若两个字符串相等,则返回true,否则返回false |
public String substring(int beginIndex) | 返回字符串中从beginIndex开始到字符串末尾的子串 |
public String substring(int beginIndex, int endIndex) | 返回字符串中从beginIndex开始到endIndex-1子串 |
public char charAt(int index) | 返回index指定位置的字符 |
public int indexOf(String str) | 返回str在字符串中第一次出现的位置 |
public int compareTo(String anotherString) | 若调用该方法的字符串大于参数字符串,则返回大于0的值;若相等则返回数0;若小于参数字符串,则返回小于0的值(ascll码) |
public String replace(char oldChar, char newChar) | 以newChar字符串替换字符串中所有oldChar字符 |
public String trim() | 去掉字符串的首尾空格 |
public String toLowerCase | 将字符串中的所有字符都转换成小写字符 |
public String toUpperCase | 将字符串中的所有字符都转换为大写字符 |
类与对象
方法中的可变参数
返回值类型 方法名(固定参数列表, 数据类型…可变参数名)
{
方法体
}
Object类
Object是所有类的源。
常用方法 | 功能说明 |
---|---|
public boolean equals(Object obj) | 判断两个对象变量所指向的是否为同一个对象 |
public String toString() | 将调用toString()方法的对象转换成字符串 |
public final Class geClass() | 返回运行时所属的类 |
protected Object clone() | 返回调用该方法的对象的一个副本 |
字符串的比较中,使用“==”运算符和使用equals()方法来比较字符串时,其比较方式是不同的。“==”运算符比较的是两个变量本身的值,即两个对象在内存之中的首地址,而equals方法则是比较两个字符串中所包含的内容是否相同。
Math类
Math类包含了用于执行基本数学运算的属性和方法。
方法 | 功能 |
---|---|
exp(double a); | 计算e的a次方 |
log(double a) | 取自然对数值 |
log10(double a); | 取底数为10的对数值 |
sqrt(double a); | a的平方根,a不能是负数 |
cbrt(double a); | a的立方根 |
pow(double a, double b); | a的b次方 |
max(a, b); | 返回a和b中的最大的一个。参数可为double、float、int、long等类型 |
min(a, b); | 返回a和b中的最小的一个。参数可为double、float、int、long等类型 |
abs(a); | 取绝对值。参数可为double、float、int、long等类型 |
ceil(double a); | 返回大于或等于a的最小整数 |
floor(double a); | 返回小于或等于a的最大整数 |
rint(double a); | 返回最接近a的整数,当出现两个最接近的整数时取偶数 |
round(a); | a加上0.5后取小于或等于a的float返回int,double返回long |
Math.PI | 圆周率π的值 |
Math.E | 自然对数e的值 |
Date类
Date支持两种构造函数。
Date()
Date(int year, int month, int day)
下面对Date类的常用方法进行介绍,具体方法名称与功能介绍如表所示。
方法 | 功能 |
---|---|
boolean after(Date date) | 如果调用Date对象包含或晚于指定的日期返回true,否则,返回false |
boolean before(Date date) | 如果调用Date对象包含或早于指定日期返回true,否则,返回false |
Object clone() | 重复调用Date对象 |
int compareTo(Date date) | 比较当调用此方法的Date对象和指定日期。两者相等返回0,调用对象在指定日期之前返回负数;调用对象在指定日期之后则返回正数 |
int compareTo(Object obj) | 若obj是Date类型则操作等同于compareTo(Date)。否则,它会抛出一个ClassCastException |
boolean equals(Object date) | 如果调用Date对象包含相同的时间及指定的日期则返回true,否则,返回false |
long getTime() | 返回自1970年1月1日起已经过的毫秒数 |
int hashCode | 返回调用对象的哈希代码 |
void setTime(long time) | 设置所指定的时间,这表示经过时间一毫秒为单位,1970年1月1日00:00:00GMT以后time毫秒数设置时间和日期 |
String toString() | 调用Date对象换为字符串,并返回结果 |
格式化Date类:
DateFormat dFormat = new SimpleDateFormat("指定格式字符串");
String dFStr = dFormat.format(new Date());
DateFormat常见方法
方法 | 功能 |
---|---|
format(date) | 得到指定格式的date字符串 |
getInstance() | 有Date/TimeInstance()等方法直接调用DateFormat调用获得系统默认格式 |
pares(String str) | 将字符串解析成日期,得到Date对象 |
Calendar类
Calendar类的功能比Date类强大的许多。
Calendar calendar = Calendar.getInstance();
calendar.set(2021, 12, 25); // 年, 月, 日
calendar.set(2021, 12, 25, 10, 20); // 时,分
calendar.set(2021, 12, 25, 10, 11, 12); // 秒
Calendar类中的具体常量:
public static final int ERA = 0;
public static final int YEAR = 1;
public static final int MONTH = 2;
public static final int WEEK_OF_YEAR = 3;
public static final int WEEK_OF_MONTH = 4;
public static final int DATE = 5;
public static final int DAY_OF_MONTH = 5;
public static final int DAY_OF_YEAR = 6;
public static final int DAY_OF_WEEK = 7;
public static final int DAY_OF_WEEK_IN_MONTH = 8;
public static final int AM_PM = 9;
public static final int HOUR = 10;
public static final int HOUR_OF_DAY = 11;
public static final int MINUTE = 12;
public static final int SECOND = 13;
public static final int MILLISECOND = 14;
public static final int ZONE_OFFSET = 15;
public static final int DST_OFFSET = 16;
public static final int FIELD_COUNT = 17;
int year = calendar.get(Calendar.YEAR);
Scanner类
数字格式化类
枚举类
开发过程中经常遇到有些数据的取值被限定在几个确定的值之间的情况,即这些值可以被一一列举出来。
语法为:
[修饰符] enum 枚举类型名
{
枚举成员
方法
}
例如下面枚举:
enum EnumTest {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
这段代码实际上调用了7次Enum(String nme, int ordinal),具体代码如下:
new Enum<EnumTest>("MON", 0);
new Enum<EnumTest>("TUE", 1);
new Enum<EnumTest>("WED", 2);
枚举类的常用方法:
方法 | 功能 |
---|---|
int compareTo(E o) | 比较此枚举与指定对象的顺序 |
String name() | 返回此枚举常量的名称 |
int ordinal() | 返回枚举常量的序数,其中序数是以0开始的 |
Enum[] values() | 返回带指定枚举类型的枚举常量数组 |
int compareTo(枚举常量) | 比较两个枚举常量的前后位置 |
异常处理
toString()
getMessages()
printStackTrace()
子类RuntimeException代表运行时异常,他是程序运行时自动地对某些错误做出反应而产生的,所以RuntimeException可以不编写异常处理的程序代码,依然可以成功编译,因为它是在程序运行时才有可能产生的,如除数为0异常、数组下标越界异常、空指针异常等。这类异常应通过程序调试尽量避免而不是使用try-catch-finally语句捕获它。
文件与输入输出
流
流是指计算机各部件之间的数据流动。流分为字节流和字符流。
泛型
运用泛型意味着编写的代码可以被多种类型不同的对象所重用,从而减少数据类型转换的潜在错误。
泛型类的定义:[修饰符] class 类名<T>
泛型接口的定义:[public] interface 接口<T>
泛型方法的定义:[public] [static] <T> 返回值类型 方法名(T 参数)
Java语言也可以在使用泛型类创建对象时对数据类型做出限制。其语法如下:
class ClassName<T extends anyClass>
其中,anyClass是某个类或接口。
泛型类名<? extends T> o = null;
集合
Set和List都继承与Collection接口。
返回类型 | 方法名 | 说明 |
---|---|---|
boolean | add(E e) | 向此集合中添加一个元素,元素数据类型是E |
boolean | addAll(Colection e) | 将指定此集合c中所有元素,添加到集合 |
void | clear() | 删除此集合中所有元素 |
boolean | contains(Object o) | 判断此集合中是否包含元素o,包含则返回true |
boolean | containsAll(Object o) | 判断此集合是否包含指定集合c中所有元素,包含则返回true |
boolean | isEmpty() | 判断此集合是否为空,是返回true |
Iterator | iterator() | 返回一个Iterator对象,用于遍历此集合中的所有元素 |
boolean | remove(Object o) | 删除此集合中指定的元素o,若元素o存在 |
boolean | removeAll(Collection c) | 删除此集合中所有在集合c中的元素 |
int | size() | 返回此集合中的元素的个数 |
boolean | retainAll(Collection c) | 保留此集合和指定集合c中都出现的元素 |
Object[] | toArray() | 返回此集合中所有元素的数组 |
List
List接口继承了Collection接口。
方法名 | 描述 |
---|---|
add(int index, Object a) | 将a插入调用列表,插入位置的下标由index传递。任何已存在的,在插入点以及插入点之后的元素将前移。因此,没有元素被覆盖 |
get(int index) | 返回list集合中指定索引位置的元素 |
indexOf(Object a) | 返回调用列表中obj的第一个实例的下标。如果obj不是列表中的元素,则返回-1 |
set(int index, Object a) | 用a对调用列表中由index指定的位置进行赋值 |
List接口的实现类:
ArrayList
LinkedList
Iterator迭代器
专门对集合进行迭代操作。
方法名 | 描述 |
---|---|
hasNext() | 如果仍有元素可以迭代,则返回true |
next() | 返回迭代的下一个元素,其返回值类型为Object |
remove() | 从迭代器指向的Colletion中移除迭代器返回的最后一个元素 |
List<String> all = new ArrayList<String>();
all.add("Hello")
Iterator<String> iter = all.iterator();
while(iter.hasNext()){
String str = iter.next();
}
Set集合
Set接口的实现类
HashSet<>()
TreeSet<>()
HashSet类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多之只能一个。
TreeSet类不仅继承了Set接口,还继承了SortedSet接口,他不允许出现重复元素。由于SorteSet接口可实现对集合中的元素进行自然排序(即升序排序),因此TreeSet类会对实现了Comparable接口的类的对象自动排序。TreeSet类的常用方法如表。
方法名 | 说明 |
---|---|
first() | 返回此集合中当前第一个(最低)元素 |
last() | 返回此集合中当前最后一个(最高)元素 |
pollFirst() | 获取并移除第一个(最低)元素;如果集合为空,则返回null |
pollLast() | 获取并移除最后一个(最高)元素;如果集合为空,则返回null |
subSet(E fromElement, E toElement) | 返回一个新集合,其元素是原集合从fromElement(包括)到toElement(不包括)之间的返回元素 |
tailSet(E fromElement) | 返回一个新集合,其元素是原集合中fromElement对象之后的所有元素,包含fromElement对象 |
headSet(E toElement) | 返回一个新集合,其元素是原来集合中toElement对象之前的所有元素,不包括toElement对象 |
Map集合
Map接口常用方法
方法 | 描述 |
---|---|
put(Object k, Object v) | 在Map集合中加入指定的k和v映射关系 |
get(Object k) | 返回与关键词k相关联的值 |
void clear() | 从调用映射中删除所有的关键字/值对 |
containsKey(Object k) | 判断关键字k是否已经存在 |
containValue(Object v) | 判断是否有一个或多个关键字映射值v |
keySet() | 返回包括Map集合的映射关键字的Set集合 |
entrySet() | 返回包含Map集合的映射中的项目的Set集合 |
values() | 返回包含映射中值的Collection集合,可用get()和put()方法 |
int size() | 返回映射中键值/对的个数 |
Map接口的实现类
HashMap
TreeMap
IO(输入/输出)
流概述
流是一组有序的数据序列,根据操作的类型,可以分为输入流和输出流两种。
输入流
1.InputStream流
是所有字节输入流的父类。出错会引发一个IOException异常。
InputStream类的方法
方法 | 描述 |
---|---|
int available() | 返回当前可读的输入字节流 |
void close() | 关闭字节流。关闭之后若再读取则会产生IOException异常 |
void mark(int numBytes) | 在输入流的当前点放置一个标记。读流在读取N个Bytes字节前都保持有效 |
boolean markSupported() | 如果调用的流支持mark()/reset()就返回true |
int read() | 如果下一个字节可读则返回一个整数,遇到文件尾时返回-1 |
int read(byte buffer[]) | 试图读取buffer.length个字节到buffer,并返回实际成功读取的字节数。遇到文件尾时返回-1 |
int read(byte buffer[], int offset, int numBytes) | 试图读取buffer中从buffer[offset]开始的numBytes个字节,返回实际读取的字节数。遇到文件尾时返回-1 |
void reset() | 重新设置输入指针到先前设置的标志处 |
long skip(long numBytes) | 忽略numBytes个输入字节,返回实际忽略的字节数 |
2.Reader
Reader类是专门进行输入数据的字符操作流,它是一个抽象类。
Reader类的方法
方法 | 描述 |
---|---|
abstract void close() | 关闭输入源。进一步的读取将会产生IOException异常 |
void mark(int numChars) | 在输入流的当前位置设立一个标志。该输入流在numChars个字符被读取之前有效 |
boolean markSupported() | 该流支持mark()/reset()则返回 |
int read() | 如果调用的输入流的下一个字符可读则返回一个整型。遇到文件尾时返回-1 |
int read(char buffer[]) | 试图读取buffer.length个字符,返回实际成功读取的字符数。遇到文件尾时返回-1 |
Abstract int read(char buffer[], int offset, int numChars) | 试图读取buffer中从buffer[offset]开始的numChars个字符,返回实际成功读取的字符数。遇到文件尾返回-1 |
boolean ready() | 如果下一个输入请求不等待则返回true,否则返回false |
long skip(long numChars) | 跳过numChars个输入字符,返回跳过的字符设置输入指针到先前设立的标志处 |
输出流
1.OutputStream
2.Writer
文件
文件输入输出流
多线程
继承Thread
class 类名称 extends Thread
{
属性……
方法……
修饰符 run() {
以线程处理的程序
}
}
实现Runnable接口
class 类名称 implements Runnable
{
属性……
方法……
修饰符 run(){
以线程处理的程序
}
}
线程的状态
创建状态、就绪状态、运行状态、阻塞状态、阻塞状态、挂起状态、睡眠状态、等大状态、终止状态。
同步代码块
synchronized关键字定义的代码。
synchronized(this) {
}
同步方法
在一个方法上使用synchronized定义,那么此方法就被称为同步方法。
public synchronized void sale(){
}
死锁
一旦有多个进程,且他们都要争用对多个锁的独占访问,那么就有可能发生死锁。
线程的优先级
Java线程有十个优先级,用数字1~10表示,从低到高,线程默认的优先级是5级。可使用方法setPriority(int)设置,通过getPriority()获知一个线程的优先级。
线程调度方法
sleep()方法是空出CPU,让系统调用别的就绪线程使用CPU。sleep方法等待的是CPU时间片,但不释放资源。
yield()方法也是主动让出CPU,但它将CPU让给优先级更高的线程,该线程不需要等待一定时间被阻塞,而是直接进入就绪状态。
join()方法是将线程插进来,例如线程A在运行,途中加一个线程B,那么线程A会暂停,等线程B运行完毕之后再继续运行线程A。
线程交互
线程间的交互指的是线程之间需要一些协调通信,来共同完成一项任务。线程的交互可以通过wait()方法和notify()方法来实现。
Java程序运行过程中,当线程调用Object类提供的wait()方法时,当前线程停止运行,并解放所占有的资源,线程从运行状态转换为等待状态。当另外的线程执行某个对象的notify()方法时,会唤醒在此对象等待池中的某个线程,使该线程从等待状态转换为就绪状态;当另外的线程执行某个对象的notifyAll()方法时,会唤醒在此对象等待池中的所有线程,使这些线程从等待状态转换为就绪状态。
注解
@Deprecated:表示某个程序元素已过时,不建议使用
@Override:用来限定必须覆盖父类中的方法,主要作用是保证方法覆盖的正确性
@SuppressWarnings:用于抑制警告信息的出现
@SelfVarargs:用于抑制堆污染警告
@FunctionalInterfase:用于指定某个接口必须是函数式接口
元注解
对注解进行标注的注解
自定义注解
[public] @interface 注解名
{
数据类型 成员变量名() [default 初始值];
}