核心类库一:
抽象类
抽象方法的概念
抽象方法就是指不能具体实现的方法,也就是该方法没有方法体,使用abstract关键字修饰
具体语法格式如下:
访问控制符 abstract 返回值类型 方法名称(形参列表);
如:
public abstract void cry();
抽象类的概念
抽象类就是指不能具体实现的类,也就是该类不能实例化对象,使用abstract关键字修饰
注意事项
- 抽象类中可以有成员变量、成员方法以及构造方法等。
- 抽象类中可以没有抽象方法,也可以有抽象方法。
- 拥有抽象方法的类必须是抽象类,否则编译报错,因此很多资料上认为拥有抽象方法
并且使用abstract关键字修饰的类才称之为真正意义上的抽象类。
实际意义
抽象类的实际意义不在于创建对象而在于被继承,当一个类继承抽象类之后则必须要重写抽象方法,否则该类也要变成抽象类。
因此抽象类对子类具有强制性和规范性,通常叫做 模板设计模式。
经验分享:
在以后的开发中推荐使用父类引用指向子类对象的形式,因为父类引用可以直接调用的方法一定是父类拥有的方法,若以后更换子类时,只需要将new运算符后面的类型更改即可,其它所有位置的代码不用更改立即生效,从而提高了代码的可维护性。
该方式的缺点在于父类的引用不能直接调用子类独有的方法,若调用则需要强制类型转换。
接口(重点)
基本概念
接口本质上就是一种比抽象类还抽象的类,因此不能实例化对象。
定义类的关键字是class,而定义接口的关键字是interface。
继承类的关键字是extends,而实现接口的关键字是implements。
注意事项
- 接口中的所有成员变量都必须由public static final共同修饰,也就是常量;
- 接口中的所有成员方法都必须由public abstract共同修饰,也就是抽象方法;
类和接口之间的关系
类和类之间的关系 使用extends关键字 支持单继承
类和接口之间的关系 使用implements关键字 支持多实现
接口和接口之间的关系 使用extends关键字 通常看做单继承
抽象类和接口的主要区别(笔试题)
(1)定义抽象类的关键字是class,而定义接口的关键字是interface.
(2)继承抽象类使用extends,而实现接口使用implements.
(3)抽象类中可以有构造方法,而接口中没有构造方法。
(4)抽象类中可以有成员变量,而接口中只能有常量。
(5)抽象类中可以有成员方法,而接口中只能有抽象方法。
(6)继承抽象类只能单继承,而实现接口可以多实现。
(7)接口中增加方法一定会影响子类,而抽象类中增加方法可以不影响子类。
内部类(了解)
基本概念
将一个类的定义放在另外一个类的内部时,这个被放入的类叫做内部类,而该类所在的类叫做外部类。
类体中可以存在的内容:成员方法、成员方法、构造方法、构造块和静态语句块、内部类等
语法格式
class 类名{
class 类名{
内部类的类体;
}
}
基本作用
当一个类存在的价值仅仅是为某一个类单独服务时,则可以将这个类作为所服务类的内部类,内部类可以直接访问所在类的私有成员,而不再需要提供公有的get和set方法。
基本分类
普通内部类 - 直接将一个类的定义放在另外一个类的内部。
静态内部类 - 使用static关键字修饰的内部类。
- 只有内部类才可以使用static关键字修饰,普通类不能修饰。
局部内部类 - 直接将一个类的定义放在一个方法体的内部。 - 该类只在方法体内部有效。
匿名内部类 - 指没有名字的内部类。
匿名内部类(重点、难点)
语法格式
接口/父类类型 引用变量名 = new 接口/父类类型(){
方法的重写;
};
经验的分享
当接口类型的引用作为方法的形参时,实参的传递方式有两种:
a.自定义类实现接口并重写抽象方法,然后new实现类的对象作为实参传递。
b.使用匿名内部类的语法格式直接得到接口类型的引用作为实参传递。
Object类(重点)
基本概念
java.lang.Object类是类层次结构的根类,任何类都是该类的直接或间接子类。
常用的方法
Object() - 无参构造方法,主要用于子类通过super()的方式调用。
boolean equals(Object obj) - 用于判断调用对象是否与参数对象相等。
- 该方法默认比较对象的地址,与==的效果等价。
- 若希望该方法去比较两个对象的内容,则需要重写该方法。
- 当该方法重写后,通常有必要去重写hashCode()方法。
- int hashCode() - 用于获取调用对象的哈希码值(内存地址的编号)。
- 当两个对象调用equals()方法相等时,则各自调用hashCode()的结果必须相同。
- 当两个对象调用equals()方法不相等时,则各自调用hashCode()的结果应该不相同。
String toString() - 用于返回调用对象的字符串形式。
- 该方法默认返回:包名.类名@哈希码值的十六进制形式。
- 若希望打印其他内容则需要进行方法的重写。
- 当使用print()/println()方法打印引用或者让字符串拼接引用时,自动调用该方法
包装类和数学处理类
如:
Person p = new Person(); - 表示声明Person类型的引用指向Person类型的对象。
int num = 66; - 表示声明int类型的变量num初始值为66。
Java语言是一门纯面向对象的编程语言。
基本概念
在某些特殊场合(集合)中,要求存取的数据内容都必须是对象,而对于基本数据类型的变量来说不满足该要求,为了使得这些数据能够存取就需要进行对象化处理,而包装类就是用于将基本数据类型的变量打包成对象的类。
Integer类(重点)
1 基本概念
java.lang.Integer类实现了对int类型的包装,该类由final关键字修饰表示不能被继承。
2 常用的方法
Integer(int value) - 根据参数指定的整数构造对象。
Integer(String s) - 根据字符串来构造对象对象。
该类重写了equals()、hashCode()以及toString()方法。
int intValue() - 用于返回当前对象中包含的整数数据。
static Integer valueOf(int i) - 用于根据参数指定的整数得到Integer对象并返回。
static int parseInt(String s) - 用于将String类型转换为int类型并返回。
3 装箱和拆箱
装箱就是指从int类型向Integer类型转换的过程。
拆箱就是指从Integer类型向int类型转换的过程。
从jdk1.5开始支持了自动装箱和自动拆箱的机制,直接使用赋值运算符完成该操作。
4 自动装箱池(尽量理解)
为了提高自动装箱的效率,在Integer类的内部将-128到127之间的整数提前装箱并放入自动装箱池中,若程序中出现该范围的整数则直接从池中获取并使用,否则才需要创建新的对象。
BigDecimal类(查手册会用即可)
1 基本概念
由于float类型和double类型无法实现精确计算,因此商业开发中需要借助java.math.BigDecimal类型加以描述。
2 常用的方法
BigDecimal(String val) - 根据参数指定的字符串内容来构造对象。
BigDecimal add(BigDecimal augend)
- 用于计算调用对象和参数对象数值相加的和并返回。
BigDecimal subtract(BigDecimal subtrahend)
- 用于计算调用对象和参数对象数值相减的差并返回。
BigDecimal multiply(BigDecimal multiplicand)
- 用于计算调用对象和参数对象数值相乘的积并返回。
BigDecimal divide(BigDecimal divisor)
- 用于计算调用对象和参数对象数值相除的商并返回。
BigInteger类(查手册会用即可)
1 基本概念
若希望表达比long类型还大的数据,则借助java.math.BigInteger类型加以描述。
2 常用的方法
BigInteger(String val) - 根据参数指定的字符串内容来构造对象。
BigInteger add(BigInteger val)
- 用于计算调用对象和参数对象的和并返回。
BigInteger subtract(BigInteger val)
- 用于计算调用对象和参数对象的差并返回。
BigInteger multiply(BigInteger val)
- 用于计算调用对象和参数对象的积并返回。
BigInteger divide(BigInteger val)
- 用于计算调用对象和参数对象的商并返回。
BigInteger[] divideAndRemainder(BigInteger val)
- 用于计算调用对象和参数对象的商和余数共同组成数组并返回。
String类(重中之重)
基本概念
java.lang.String类由final关键字修饰,表示不能被继承。
该类的实例可以描述Java应用程序中所有的字符串字面值,如:“abc”。
该类描述的字符串内容是个常量,一旦创建完毕则无法更改。
如:
String s1 = "hello";
s1 = "world"; - 更改变量s1的指向而不是指向的内容,内容始终不变。
如:
String s1 = ""; - 空字符串,有对象但没有内容
String s1 = null; - 没有对象
常用的构造方法
String() - 使用无参的方式来构造空对象。
String(byte[] bytes) - 根据参数指定的byte数组来构造对象。
String(byte[] bytes, int offset, int length)
- 根据byte数组中从offset位置开始的length个字节来构造对象。
String(char[] value) - 根据参数指定的char数组来构造对象。
String(char[] value, int offset, int count)
- 根据char数组中从offset位置开始的count个字符来构造对象。
String(String original) - 根据参数指定的字符串内容来构造对象。
常用的成员方法
该类重写了equals()、hashCode()以及toString()方法。
char charAt(int index) - 根据参数指定的下标返回对应的单个字符。
int length() - 用于返回当前字符串的长度。
int compareTo(String anotherString) - 用于比较调用对象和参数对象的大小关系。
- 使用调用对象和参数对象中第一个字符起依次做减法运算
- 若第一个字符能确定大小,则后续字符不用比较
- 若第一个字符不能确定大小,则使用下一个对应位置的字符比较大小。
- 直到其中一个字符串的所有字符比较完毕后也没有确定大小,则由长度来决定大小。
- 若当前字符串大则返回正数;若当前字符串小则返回负数;若相等则返回零;
int compareToIgnoreCase(String str) - 不考虑大小写,也就是'a'和'A'是相等的关系。
boolean contains(CharSequence s) - 用于判断当前字符串是否包含参数指定的内容。
- 其中参数是接口类型,因此实参需要传递实现类的对象,而String类就实现了该接口
boolean endsWith(String suffix)
- 判断当前字符串是否以参数指定的内容为结尾。
boolean startsWith(String prefix)
- 判断当前字符串中是否以参数指定的内容为开头。
String toLowerCase()
- 用于将当前字符串中所有字符转换为小写。
String toUpperCase()
- 用于将当前字符串中所有字符转换为大写。
String trim()
- 用于去除当前字符串中两端的空白字符。
boolean equals(Object anObject)
- 用于比较字符串内容是否相等并返回;
boolean equalsIgnoreCase(String anotherString)
- 用于比较字符串内容是否相等并返回,不考虑大小写,如:'A'和'a'是相等。
byte[] getBytes() - 用于将当前字符串内容转换为byte数组并返回。
char[] toCharArray() - 用于将当前字符串内容转换为char数组并返回。
int indexOf(int ch) - 用于返回当前字符串中参数ch指定的字符第一次出现的下标。
int indexOf(int ch, int fromIndex) - 用于从fromIndex位置开始查找ch指定的字符。
- 上述方法若查找失败,则返回-1.
int indexOf(String str) - 用于查找参数str指定的字符串并返回下标。
int indexOf(String str, int fromIndex) - 用于从fromIndex位置开始查找。
int lastIndexOf(int ch) - 用于返回参数ch指定的字符最后一次出现的下标。
int lastIndexOf(int ch, int fromIndex)
- 用于从fromIndex位置开始查找ch指定字符出现的下标,反向搜索的第一次。
int lastIndexOf(String str) - 用于返回str指定字符串最后一次出现的下标。
int lastIndexOf(String str, int fromIndex)
- 用于从fromIndex位置开始反向搜索的第一次。
String substring(int beginIndex)
- 用于获取当前字符串中从beginIndex位置开始的子字符串并返回。
String substring(int beginIndex, int endIndex)
- 用于获取当前字符串中从beginIndex位置开始到endIndex结尾的子字符串并返回。
正则表达式(熟悉、JS)
基本概念
正则表达式本质上就是一个字符串,**通常使用^开头$结尾,**主要用于对用户输入的数据格式进行验证,不对内容验证。
常用的格式
[abc] - 表示可以出现a、b 或 c。
[^abc] - 表示可以出现任何字符,除了 a、b 或 c。
[a-zA-Z] - 表示可以出现a 到 z 或 A 到 Z,两头的字母包括在内。
\d - 表示可以出现任何数字:[0-9]。
\D - 表示可以出现任何非数字: [^0-9]。
\s - 表示可以出现任何空白字符:[ \t\n\x0B\f\r]。
\S - 表示可以出现任何非空白字符:[^\s]
\w - 表示可以出现任何单词字符:[a-zA-Z_0-9]
\W - 表示可以出现任何非单词字符:[^\w]
X? - 表示X可以出现一次或一次也没有,也就是0 ~ 1次。
X* - 表示X可以出现零次或多次,也就是0 ~ n次。
X+ - 表示X可以出现一次或多次,也就是1 ~ n次。
X{n} - 表示X出现恰好 n 次。
X{n,} - 表示X出现至少 n 次,也就是>=n次。
X{n,m} - 表示X出现至少 n 次,但是不超过 m 次,也就是>=n并且<=m。
常用的方法
boolean matches(String regex) - 用于判断当前字符串是否匹配参数指定的正则表达式。
StringBuilder类和StringBuffer类(查手册会用即可)
基本概念
由于String类描述的字符串是个常量不可更改,当程序中出现大量相似的字符串时,对内存空间的消耗比较大,为了节省内存空间直接对字符串本身更改,则需要借助StringBuilder类和StringBuffer类。
StringBuffer类是jdk1.0开始就有的类,属于线程安全的类,因此效率比较低。
StringBuilder类是jdk1.5开始有的类,属于非线程安全的类,因此效率比较高。
常用的方法
StringBuilder(String str) - 根据参数指定的字符串内容来构造对象。
- 初始容量为:16 + str的长度。
StringBuilder insert(int offset, String str)
- 用于将参数指定的字符串str插入到当前字符串中下标为offset的位置。
- 用于当前字符串自身。
StringBuilder append(String str)
- 用于将参数指定的字符串str追加到当前字符串的末尾。
StringBuilder delete(int start, int end)
- 用于将当前字符串中从start位置开始到end位置结束之间的内容删除。
StringBuilder replace(int start, int end, String str)
- 用于将当前字符串中start到end之间的内容使用str进行替换。
StringBuilder reverse()
- 用于将当前字符串中的内容进行反转。
int capacity() - 用于返回当前字符串对象的容量。
int length() - 用于返回字符串的长度。
日期相关的类(查询手册会用即可)
Date类
1 基本概念
java.util.Date类用于描述特定的瞬间,可以精确到毫秒。
2 常用的方法
Date() - 无参构造方法,默认使用当前系统时间来构造对象。
Date(long msec) - 根据参数指定的毫秒数来构造对象。
- 其中参数为距离1970年1月1日0时0分0秒的毫秒数。
long getTime() - 用于获取当前调用对象距离上述标准时间的毫秒数并返回。
void setTime(long msec) - 用于设置当前调用对象表示的时间为参数指定的毫秒数。
SimpleDateFormat类
1 基本概念
java.text.SimpleDateFormat类用于实现日期类型和文本类型之间的转换。
2 常用的方法
SimpleDateFormat(String pattern) - 根据参数指定的模式/格式来构造对象。
- 其中模式字符串可以有:y代表年,M代表月,d代表日,H代表时,m代表分,s代表秒
public final String format(Date date)
- 用于将Date类型转换为String类型并返回。
public Date parse(String source)
- 用于将String类型转换为Date类型并返回。
Calendar类
1 基本概念
java.util.Calendar类用于取代Date类中的过时方法进行日期和时间的处理。
2 常用的方法
static Calendar getInstance() - 获取Calendar类型的对象。
void set(int year, int month, int date, int hourOfDay, int minute, int second)
- 用于设置年月日时分秒信息。
Date getTime() - 将调用对象转换为Date类型并返回。