Day01
第一章 Object类
特点:
是所有类的父类,如果没有额外声明,在构造类的时候默认继承Object类如:
public class AB /* extends Object */ {
...
}
- toString 方法的重写
Object类默认的toSting方法
Public String toString(Object arg0)
,如果是基本数据类型输出基本数据,如果是对象则输出项目名称+对象类型+@+地址。
int i = 5;
System.out.println(i);// 5
Person p = new Person();
System.out.println(p);//jinjieDay01.person@15db9742
class Text{
private String name = "sss";
@Override
public String toString(Object o){
return name;
}//改写toString 方法,返回某个成员变量的名称;
}
-
equals方法的重写
Object类中的equals方法,默认比较两个对象的地址,只要不是同一个对象,则返回false;
改写:
class Text{ private String name = "test"; @Override public boolean equals(Obeject o){ if(this== o){ return true; }//如果地址相同,则认为一样(考虑了空指针的情况) if(o == null || getClass() != o.getClass){ return false }//(如果只有一个为空,或是类型不一样则不一样) Text test = (Text)o;//向下造型 return o.name == this.name;//成员变量name的字符串内容一样则认为相同 } }
Objects类的equals方法,相比于Object类的优点在于,它优化了空指针异常:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
第二章 时间日期类
2.1 Date类
java.util.Date
表示特定的瞬间,精确到毫秒
构造方式:
public Date()
public Date(long date)
如
...
public static void main(Object arg0){
System.out.println(new Date());// Tue Jan 16 14:37:35 CST 2018
System.out.println(new Date(0L))// Thu Jan 01 08:00:00 CST 1970
}
...
Date类中已经自行重写了toString方法,此类中的多数方法已经过时
public long getTime()
把日期对象转换为对应的毫秒值。
2.2DateFormat类
构造方式
DateFormat为抽象类,不能直接构造,而是用它的子类来构造:
DateFormat date = new SimpleDateFormat("yyyy年MM月dd日hh小时mm分ss秒");//采用一个字符串格式化产生一个对象
符号(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
h | 小时 |
m | 分 |
s | 秒 |
- 两个常用方法
public Date parse(String str)
将字符串类型转换为一个日期对象public String format(Date date)
将日期类型转换为字符串
2.3 练习
请使用日期时间相关的API,计算出一个人已经出生了多少天。
思路:
1.获取当前时间对应的毫秒值
2.获取自己出生日期对应的毫秒值
3.两个时间相减(当前时间– 出生日期)
public static void main(String[] args) throws ParseException {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date dt1 = format.parse("2020-06-08");
Date dt2 = format.parse("1997-12-25");
Long a =60*1000*60*24*365L;
System.out.println((double)(dt1.getTime()-dt2.getTime())/a);
}
2.4 Calendar类
java.util.Calendar
是日历类,它的许多方法代替了Date类的方法。
该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
创建对象
Calendar类为抽象类,不能直接创建对象,通过静态方法返回一个子类来创建:
Calendar calendar = Calendar.getInstance();
使用默认时区和语言环境获得一个日历
常用方法
1. get/set
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);
cal.set(Calendar.YEAR,2000);
2. add
对指定的日历字段值进行加减操作,正值加,负值减;
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR,5);//增加五年
cal.add(Calendar.MONTH,-2);//倒退两月
3.getTime方法
Calendar cal = Calendar.getInstance();
Data date = cal.getTime();
//cal.getTime()返回一个日期类的对象,而不是时间
第三章 System类
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。
3.currentTimeMillis
public static long currentTimeMillis()
获取当前系统时间与1970年01月01日00:00点之间的毫秒差值
3.2 arraycopy方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中。
参数 | 含义 |
---|---|
src | 原数组 |
srcPos | 原数组起始位置 |
dest | 目标数组 |
destPos | 目标数组起始位置 |
length | 复制长度 |
public static void main(String[] args) {
int [] a = {1,2,3,4,5};
int [] b= {11,22,33,44,55};
System.arraycopy(a, 0, b, 1, 2);
for(int i = 0; i<a.length;i++) {
System.out.print(b[i]+" ");
}
//表示从a数组的0位置开始复制到b数组中,替换b数组中的元素,替换的位置为b数组中第一个位置,共替换2个长度的值。
输出:11 1 2 44 55
上述两种方法均为系统级方法,效率很高。
第四章 StringBuilder类
4.1 字符串的拼接
String类在创建之后无法再修改,但是String类的对象可以不断改变指向,从而实现字符串的“改变”。
String a = "Hello";
a += "World!"
上述的操作过程,会在内存中创建出三个对象,分是"Hello"、“World!”、“HelloWorld!”,最后对象a指向"HelloWorld!",这样直接添加的操作不仅耗时,而且浪费空间。
4.2 StringBuilder类介绍
查阅
java.lang.StringBuilder
的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
StringBuilder是个字符串的缓冲区,即它是一个容器,它的内部有一个数组,将字符串存入数组中,当数组的空位不足时会自动扩容(默认16字符空间)。
构造方法
-
有参:第一种方式:
StringBuilder str = new StringBuilder("test");
//第二种: String a = "test"; StringBuilder str = new StringBuilder(str);
-
无参
StringBuilder str;此时str的值为空
常用方法
-
append
-
StringBuilder str; str.append(true); str.append("asdjiasdj"); str.append(123); //可以添加任何类型的内容,将其转变为字符串后,加到数组中
-
toString
public String toString()
将当前对象转为String对象
第五章 包装类
5.1 简介
常见的基本数据类型,如整形变量,字符等,使用方便,但是如果想对它们进行一些操作就不够灵活。而引用数据类型的内部就自带一些操作方法。
基本数据类型 | 对应包装类(位于java,.lang中) |
---|---|
int | Integer |
long | Long |
char | Character |
boolean | Boolean |
double | Double |
float | Float |
byte | Byte |
short | Short |
只有int与char的包装类比较特殊,其余基本类型对应的包装类只是把首字母大写。
5.2 装箱与拆箱
-
装箱:基本类型转换为对应的包装类型
Integer i = Integer.valueOf(4);
或者 Integer i = new Integer(4);
-
拆箱:包装类型转换为对应的基本类型
int num =i.intValue();
5.3 自动装箱与自动拆箱
从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。
Integer i =4;/*自动装箱过程,首先进行 valueOf(4),再把得到的Integer赋给i*/
i = i+ 4;/*先把i拆箱:i.intValue(),然后作4+4,然后再把8装箱,赋给i;*/
5.4基本类型与字符串之间的转换
字符串转为基本类型
-
采用各类的静态的parse方法,如字符串转换为Integer
String s ="123"; Integer i = Integer.parseInt(s);
除了Byte类型,其余类型均拥有自己的parse方法。
public static byte parseByte(String s)
:将字符串参数转换为对应的byte基本类型。public static short parseShort(String s)
:将字符串参数转换为对应的short基本类型。public static int parseInt(String s)
:将字符串参数转换为对应的int基本类型。public static long parseLong(String s)
:将字符串参数转换为对应的long基本类型。public static float parseFloat(String s)
:将字符串参数转换为对应的float基本类型。public static double parseDouble(String s)
:将字符串参数转换为对应的double基本类型。public static boolean parseBoolean(String s)
:将字符串参数转换为对应的boolean基本类型。
基本类型转换为字符串
- 直接用+”"拼接
String s =4+"";
- 采用各类的toString()方法;
- 采用String类的静态valueOf方法,如public static String valueOf(Integer i);
如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出
java.lang.NumberFormatException
异常。例如:
Integer i = Integer.parseInt("36.77");
因为字符串内容无法在编译时判断其对应的基本类型