Object类
Object类Object代表最高父类,任何一个类都可以直接或间接的使用Object类的方法
- 简介
java.lang.Object 类是Java语言中的根类,它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类。
例如:
public class MyClass /*extends Object*/ {
// ...
}
- toString方法
public String toString() :返回该对象的字符串表示。toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。
例如自定义的Cat类:
public class Cat {
private String name;
private int age;
@Override
public String toString() {
return "Cat{" + "name=" + name + " + ", age=" + age + "}";
} / / 省略构造器与Getter Setter
}
在IntelliJ IDEA中,可以点击 Code 菜单中的 Generate… ,也可以使用快捷键 alt+insert ,点击 toString() 选项。选择需要包含的成员变量并确定。
- equals方法
public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。
基本数据类型:比较的是值
引用数据类型:比较的是两个对象的地址值
如果想要比较两个对象的属性则需要重写equals方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cat cat = (Cat) o;
return age == cat.age &&
Objects.equals(name, cat.name);
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
IDEA自动重写equals代码中,使用到了 java.util.Objects 类,那么这个类是什么呢?
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。源代码:
public static boolean equals(Object a, Object b) :判断两个对象是否相等第二节.Date类Date代表日期,可以用来获取系统相关的一些日期跟时间
java.util.Date 类
表示特定的瞬间,精确到毫秒
建日期对象,当前的时间
System.out.println(new Date());//Sun Dec 02 10:56:34 CST 2018
// 创建日期对象,当前时间的毫秒值转成日期对象
System.out.println(new Date(0L));//Thu Jan 01 08:00:00 CST 1970
}
}
- 常用方法
Date类中的多数方法已经过时,常用的方法有:
public long getTime() 把日期对象转换成对应的时间毫秒值。
Date d = new Date();
long t = d.getTime();
- 获取当前系统时间与getTime()方法等效
System.out.println(System.currentTimeMillis());
DateFormat类
Format代表格式化,DateFormat是对日期跟时间格式化,按照我们想要的格式给大家展示出来
3.1简介java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,从Date对象转换为String对象。
解析:按照指定的格式,从String对象转换为Date对象。
3.2构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类 java.text.SimpleDateFormat
3.3格式规则创建SimpleDateFormat对象的代码
如:
public static void main(String[] args) throws ParseException {
//创建对象,格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date();//创建对象,获取当前时间
System.out.println(d);//Mon Dec 03 11:06:44 CST 2018
String s = sdf.format(d);//调用方法,把日期转换成为指定格式
System.out.println("s = " + s);//s = 2018-12-03
Date parse = sdf.parse(s);//调用方法,把指定格式时间转换为日期
System.out.println(parse);//Mon Dec 03 00:00:00 CST 2018
}
年 M:月 d:日 H:时 m:分 s:秒
Celendar类
日期类
public static void main(String[] args) {
Calendar instance = getInstance();
//修改年月日或给定时间
instance.set(YEAR, 1993);
instance.set(MINUTE, 6);
instance.set(DAY_OF_MONTH, 1);
//取出指定年月日
System.out.println(instance.get(YEAR));
System.out.println(instance.get(MINUTE));
System.out.println(instance.get(DAY_OF_MONTH));
//取出日期
System.out.println(instance.getTime());
//修改年份
instance.add(YEAR,10);//增加十年
System.out.println(instance.get(YEAR));//2003
instance.add(YEAR,-3);//减少三年
System.out.println(instance.get(YEAR));//2000
}
System类
获取与系统相关的类,有大量的静态方法
求出字符拼接十万次的时间,代码实现:
public static void main(String[] args) {
String str = "";//存钱罐,初始值
//获取起始时间
long t1 = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {//循环
str += "java";
}
//获取最终时间
long t2 = System.currentTimeMillis();
long l = t2 - t1;//时间差
System.out.println(l);//3177
}
数组复制
public static void main(String[] args) {
int[] t1 = {1,2,3,4,5};
int[] t2 = {55,66,77,88,99};
System.out.println(Arrays.toString(t2));
//[55, 66, 77, 88, 99]复制前
System.arraycopy(t1,1,t2,0,3);
System.out.println(Arrays.toString(t2));
//[2, 3, 4, 88, 99]复制后
}
StringBuilder
他是一个字符串缓冲区,可以提高字符串相关操作的效率
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder();//空参构造
StringBuilder sb2 = new StringBuilder("java");//有参构造
StringBuilder sb3 = sb1.append("abc");
System.out.println(sb1);//abc
System.out.println(sb3);//abc
System.out.println(sb1==sb3);//两个对象是同一个对象true
//链式编程
StringBuilder h = sb1.append(1).append(81.2).append('h');
System.out.println(h);//abc181.2h
String s = h.toString();//转换为字符串
System.out.println(s);//abc181.2h
StringBuilder b4 = new StringBuilder(s);//转换为StringBuilder
System.out.println(b4);//abc181.2h
}
包装类
基本数据类型int–>Integer
基本数据类型char–>Character
其余的基本数据类型至于要把首写字母大写即可
引用数据类型String不变
public static void main(String[] args) {
//装箱
Integer integer = new Integer(1);//构造方法
System.out.println(integer);//1
Integer integer1 = new Integer("2");//构造方法
System.out.println(integer1);//2
Integer integer2 = Integer.valueOf(3);//静态方法
System.out.println(integer2);//3
Integer integer3 = Integer.valueOf("4");//静态方法
System.out.println(integer3);//4
//拆箱
int i = integer.intValue();
System.out.println(i);//1
}
自动拆装箱
public static void main(String[] args) {
//自动装箱
Integer a = 1;
//自动拆箱
a += 2;
System.out.println(a);//3
ArrayList<Integer> arr = new ArrayList<>();
arr.add(1);//自动装箱
int integer = arr.get(0);//自动拆箱
}
字符串跟基本数据类型互相转换
public static void main(String[] args) {
//以int举例
//基本数据类型转换为字符串
String s = 1 + "";//直接加
System.out.println(s+66);//166
String s1 = Integer.toString(2);//包装类的静态方法
System.out.println(s1+66);//266
String s2 = String.valueOf(3);//String中的静态方法
System.out.println(s2+66);//366
//字符串转换从基本数据类型
int i = Integer.parseInt(s2);//包装类的静态方法
System.out.println(i+66);//69
}