文章目录
1. toString 和 equals 方法
1. toString
Object类是类层次结构的根类,每个类都使用Object作为超类。
假设我们定义一个Person类,它其实默认继承了Object类,所以可以使用Object类中的toString方法
Object
类的 toString
方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@
”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
而直接打印对象的地址值没有意义,需要重写Object类中的toString方法
2. equals
判断其他的某个对象是否和这个对象「相等」
- 基本数据类型,比较值
- 应用数据类型,比较地址值
而直接比较对象的地址值没有意义,需要重写Object类中的equals方法
以Person类为例,其中含有两个成员变量String name
和 int age
需要先将obj向下转型为Person类,才能比较两个对象的属性。假设name和age都相等,则两个对象相等,可以这样写
@Override
public boolean equals(Object o) {
if (this == o) return true; //如果是本身,那么直接true
if (o == null || getClass() != o.getClass()) return false; //提升效率
Person person = (Person) o; //需要一个向下转型
return age == person.age && Objects.equals(name, person.name);
}
getClass() != o.getClass()
使用反射技术,判断o是否为Person类型
3. java.lang package
java.lang
中的lang
是language
的缩写
使用方法:
- 看包路径
- 看使用方法
- 看方法摘要
2. Scanner类
可以通过Scanner
进行键盘输入,Scanner
在java.util
包内
引用类型的一般使用步骤:
- 导包
import 包路径.类
只有java.lang
包下的内容不需要导包,其他的包都需要import
- 创建
类名称 对象名 = new 类名称();
- 使用
对象名.成员方法名();
Scanner.in
代表从键盘输入
- 接收
int
类型:sc.nextInt()
- 接收
String
类型:sc.next()
事实上,
Scanner
接收到的都是String
类型,只是它通过方法转换成了对应的类型
3. Random类
Random
属于java.util
包
- 导包
java.util.Random
- 创建
Random r = new Random();
- 使用 注意有多种重载方式
- 使用无参时时随机返回一个
int
范围内的值(包含正负) - 使用有参时,如
int num = r.nextInt(10)
则生成一个[0,10)
的int
值,这个参数叫bound
有时也会使用
int num = r.nextInt(10)+1
来生成一个1~10
的整数
4. ArrayList类
集合类:面向对象类,对事物的描述都是通过对象实现。为方便对多个对象进行操作,必须对多个对象进行存储,因此需要容器类。容器类特点是长度可变。
集合可以作为方法的参数,也可以作为返回值,传入的其实是地址值
泛型
定义: 装在集合当中的元素,全部统一为一个类型
对于ArrayList
来说,有一个尖括号表示泛型
泛型只能是引用类型,不能是基本类型
因为集合中保存的都是地址值
创建格式: ArrayList<string> list = new ArrayList<String>();
对于
ArrayList
来说,直接打印得到的不是地址值,若内容为空,则输出[]
常用的ArrayList方法
public boolean add(E e)
在集合中添加元素,返回是否成功
对于
ArrayList
来说,add
添加动作一定是成功的,返回值可用可不用,但对于其它集合来说,add
可能不成功,故不能省略
public E get(int index)
在集合中获取元素,参数是索引编号(索引从0开始)public E remove(int index)
在集合删除元素,返回被删除的元素public int size()
5. String类
java.lang.String
类代表字符串,字符串的内容永不可变,字符串可以共享使用
创建String的四种方法
-
public String()
创建空白字符串 -
public String (char[] array)
根据字符数组内容创建 -
public String()=(byte[] array)
根据字节数组内容创建前三种是
new
出来的,第四种直接写上双引号,就是字符串对象,只要是字符串,一定是对象 -
String str = "hello"
直接创建
字符串的常量池
程序当中直接写上的双引号字符串,就在字符串常量池中(在堆中)
对于基本类型来说,
==
是进行数值的比较
对于引用类型来说,==
是进行地址的比较
String str1 = "abc";
String str2 = "abc";
char[] charArray ={'a','b','c'};
String str3 = new String(charArray);
//str1 == str2
==
是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法
方法一 :public boolean equals(Object obj)
: 参数可以是任何对象,当参数是一个字符串且内容相同时才会返回true
方法二 : 忽略大小写的比较 public boolean equalsIgnreCase(String str)
String str1 = "hello";
System.out.println("hello".equals(str1));
//尽量写成 "abc".equals(str)
空指针异常
在调用方法时,如果是null.method
,会出现空指针异常 NullPointerException
,引用类型可以为Null
常用API
int length()
char charAt(int)
int indexOf(String str)
String concat(String str)
:拼接字符串,返回新的字符串
char[] toCharArray()
字符串转字符数组(方便遍历用)
byte[] getBytes()
String replace(CharSequence oldString ,CharSequence newString)
字符串数组的替换
CharSquence
是一个接口
String[] split (Sring regex)
按照参数的规则,将字符串拆分成若干部分
Str +=
在字符串原有的基础上拼接(末尾追加)
6. Arrays
Arrays属于 java.util
包内,使用时需要导包
常用API
Arrays.toString
Arrays.sort
(默认升序,字母按照ASCII码)
如果比较的是自定义的类型,那么这个自定义的类需要有comparable或者comparator接口的支持
注意:Array是一个数组,Arrays是一个静态类
7. Math
Math属于 java.util
包内,使用时需要导包
常用API
double abs(double num)
获取绝对值
double ceil(double num)
向上取整
double floor(double num)
向下取整
long round(double num)
四舍五入
math.pi
获取
π
\pi
π 的常量值
double 类型的数字也可以 ++
8. 日期和时间类
常用方法
获取从1970年1月1日
到现在
经过了多少毫秒 System.currentTimeMillis()
这个和
getTime()
效果是一样的
DateFormat类
DateFormat是一个抽象类,所以要调用它的子类SimpleDateFormat来使用
作用:
- 格式化,将日期转化为文本
String format(Date date)
- 解析,将文本转化为日期
Date parse(String source)
构造方法:写对应的模式
如"yyyy-MM-dd HH:mm:ss"
"yyyy年MM月dd日 HH时mm分ss秒"
Calendar类
Calendar类是一个抽象类,里面提供了很多操作日历字段的方法,Calendar无法直接创建对象使用,里边有一个静态方法叫getInstance()
,该方法返回了Calendar类的子类对象
static Calendar getInstance()
使用默认时区和语言环境获得一个日历
public void set(int field,int value)
将给定的日历字段设置为给定值
public void get(int field)
返回给定日历字段的值
public abstract void add(int field,int amount)
为给定的日历字段添加或减去字段量
以上的field都需要Calendar.XX
获得
特别注意 这里field中的MONTH 从
一月~十二月
对应的是0~11
9. System 类
java.lang.System
所以无需导包
-
获得系统时间 获取从
1970年1月1日
到现在
经过了多少毫秒System.currentTimeMillis()
-
复制数组
public static void arraycopy(Object src, //原数组
int srcPos, //起始位置
Object dest, //目标数组
int destPos, //目标数据中的起始位置
int length) //要赋值的数组元素的数量
10. StringBuilder
StringBuilder
称为字符串缓冲区,可以将它视为一个长度可以变化的字符串
StringBuilder
在内存中始终是一个数组,占用空间少,效率高,如果超出了StringBuilder
的容量,可以自动扩容
缓冲区可以提升操作效率,
StringBuilder
的初始容量为16个字符
String
是一个常量,它们的值在创建之后不能修改,字符串的底层是一个被final
修饰的数组,是一个常量
String
在进行字符串相加的时候,内存中会有多个字符串,占用空间多,效率低下
构造方法
StringBuilder()
构造一个不带任何字符的字符串生成器,初始容量为16字符StringBuilder(String str)
构造一个字符串生成器,并初始化为指定的内容
常用方法
-
append
append方法返回的是
this
,调用方法的对象sb
,this==sb
使用append方法无需接受返回值
可以使用链式编程,方法返回值是一个对象,可以继续调用方法
sb.append("a").append("b").append("c");
-
toString
将当前的StringBuilder转化为字符串形式返回
- 将String转化为StringBuilder,可以使用StringBuilder的构造方法
- 将StringBuilder转化为String,可以使用toString方法
11. 包装类
概述
如果想要向集合中存储基本类型的数据,必须使用基本类型对应的包装类
引用类型都是object类型
包装类数值不可变(只能替换掉),带有修饰符
final
,比基本类型多了一个null
,在使用上可以无缝切换
基本类型 | 包装类[属于引用类型] |
---|---|
byte | Byte |
short | Short |
int | Integer[特殊] |
float | Float |
double | Double |
char | Character[特殊] |
boolean | Boolean |
long | Long |
创建一个int
类型的集合 :ArrayLish<Integer> list = new ArrayList<>();
从JDK1.5开始,支持自动装箱、自动拆箱
- 自动装箱:基本类型—>包装类型
- 自动拆箱:包装类型—>基本类型
装箱
把基本类型的数据,包装到包装类中
构造方法
Integer(int value)
构造一个新分配的 Integer
对象,它表示指定的 int
值。
Integer(String s)
构造一个新分配的 Integer
对象,它表示 String
参数所指示的 int
值。
静态方法
static Integer valueOf(int i)
返回一个表示指定的 int
值的 Integer
实例。
static Integer valueOf(String s)
返回保存指定的 String
的值的 Integer
对象。
拆箱
在包装类中取出基本数据类型
成员方法
int intValue()
以 int
类型返回该 Integer
的值。
基本类型和String的转化
基本类型->String
- 基本类型的值+
""
(最常用方法) - 包装类的静态方法
toString
- String类的静态方法
valueOf
String->基本类型
使用包装类的静态方法 parseXXX
,常用的有 parseInt
parseDouble