自今天起,记录下每天自学Java的总结以及感悟,与君共勉
最重点:
Object, 包装类。
次重点:
StringBuilder, Date.
Object类
如果我们没有使用extends继承其他类,那么这个类是继承自Object的。
所有类都直接或者间接地继承自Object。
Object是所有类的老祖宗
toString方法
在Object中,有一个方法叫做toString方法,可以将对象转成一个字符串。
String toString():返回对象的字符串形式。
当我们通过一个对象调用toString方法时。会先看一下自己有没有这个方法,如果自己没有则调用父类的toString方法.
Object中的toString方法显示的是地址值。
当我们直接输出一个对象名时,内部会调用对象的toString方法,也就是这个对象的调用toString 方法的结果是什么
那么直接输出对象名的结果就是什么
如果调用toString方法,得到的对象的地址值一般没有意义。我们一般调用那个toString都是想要看到对项目里面的内容,
把对象的属性转成字符串,此时我们可以在子类中重写toString方法。
equals方法
使用==比较对象比较的是地址值
equals可以比较两个对象是否相同
当我们通过一个对象吊调用equals方法时,会先看一下自己有没有这个方法,没有就会向上找父类一直到Object。
而Object中的equals,是使用==比较对象的地址值。
一般来说比较地址值没有意义,如果我们希望通过对象的属性比较两个对象的属性是否相同,需要重写子类中的equals方法。
在JDk7.0之后,多了一个类,这个类叫做Objects,是操作对象的工具类。
这个类里面有一个equals方法,可以直接比较两个对象是否相同。
static boolean equlas (Object a, Object b): 比较参数a和b对象是否相同。
在Objects的equals中,会使用Object的euqals比较两个对象是否相同。
啊如果想要根据属性比较两个对象是否相同,还需要重写equals。
Date类
在Java中,有一个类叫做Date(java.util.Date),这个Date类一般叫做日期类。
注意:Date类虽然叫做日期类。但是它表示的是特定的时间瞬间,精确到毫秒。
构造方法;
Date(): 使用空参构造方法会议当前操作的系统时间构建一个Date对象。
Date(long date): 参数需要传递一个毫秒值。表示从1970年1月1日0时0分0秒开始过了多少毫秒。
中国用的是北京时间,东八区,所以时间是1970年1月1日08时0分0秒开始。
getTime():
在Date中,有一个getTime,可以获取到Date对象表示的毫秒值。
long getTime():获取Date对象表示的毫秒值.
setTime():
在Date中,还有一个setTime方法,可以设置毫秒值。一旦调用setTime 重新设置毫秒值后,该Date对象表示的时间就会改成设定值
void setTime(long time): 参数要穿第一个long类型的毫秒值。 给Date对象重新设置一个时间。
DateFormat
如果希望吧Date对象转成一个指定格式的字符串,那么可以使用【DateFormat】这个类对Date对象进行格式化
DateForamt是一个抽象类,如果要用,需要使用子类 ,子类为【SimpleDateFormat】
SimpleDateFormat的构造方法:
SimpleDateFormat(String pattern): 参数要传递一个字符串,该字符串表示一个模式(格式)。
举个例子:
要转成的格式:2019年03月22日 16时15分33秒
对应的模式: yyyy年MM月dd日 HH时mm分ss秒
就是使用英文字母代替掉中间的数字即可
SimpleDateFormat中的其他方法:
String format(Date date): 将参数Date对昂转成一个字符串并返回。
使用步骤:
1.创建一个Date对象。
2.创建SimpleDateFormat对象,在构造方法中指定转换的模式。
3.调用SimpleDateFormat的format方法,将Date对象转成一个字符串。
如果要将一个字符串转成一个Date对象,呢么可以使用SimpleDateFormat的parse(解析)方法去完成
Date parse(String source):将字符串转成一个Date对象并返回。
使用步骤:
1.定义一个字符串表示时间。
2.创建一个SimpleDateFormat对象,制定一个模式。
3.调用SimpDateFormat的parse方法,将字符串转成一个Date对象。
注意:
1.调用parse方法后,会有一个红色的波浪线的错误,此时是需要抛异常的(后面讲解)
解决方式:把光标移动到红色波浪线上面,然后按alt+回车,选择第一个
2.创建SimpleDateFormat时的构造方法中的模式必须和字符串的格式一致,否则会报错
小结:
Date->String:格式化。 要使用SimpleDateFormat的format方法
String->Date:解析。要使用SimpleDateFormat的parse方法
Calendar:
在Date类中,有很多方法都已经过时了,原因是因为在Calendar类中有了更好的方法可以替代他们。
Calendar叫做日历类,和Date一样,Calendar也可以表示特定的时间瞬间,精确到了毫秒。
Calendar是一个抽象类,如果要用,需要使用他的子类。
由于地区敏感性,Calendar子类对象不能我们自己去new,要通过Calendar的静态方法getInstance进行获取
Calendar获取日历对象的方法;
static Calendar getInstance(): 获取一个Calendar子类对象,并将该子类对象返回。
在Calendar中有一个方法叫做get,可以获取指定字段的值。
int get(int field):获取日历对象中指定字段的值。参数field表示要获取那个字段的值。
举例:
get(年):获取的就是年的值
get(月):获取的就是月的值
get(日):获取的就是日的值
在get方法中参数要传递int类型的数字,我们要使用int数字表示对应的字段。
如果向get方法中直接传递数字,那么会大大地影响我们程序的阅读性。
我们可以使用Calendar中的静态常量代替这些数字,在Calendar中有很多静态常量,每一个静态常量都表示一个数字
并且这个常量名还必须具备见名知意的效果。
在Calendar中月份是从0开始的,范围是0~11,所以输出是,需要+1;
在Calendar中,还有一个方法叫做set,可以设置指定字段的值。
void set(int field,int value): 给自定的字段设置值。
参数field:表示要给那个字段设置值。
参数value:表示要设置成什么值。
在Calendar中,还有一个方法叫做add,可以对指定得字段进行计算。
void add(int field, int amount):对指定字段的值进行计算。
参数field:表示对那个字段的值进行计算。
参数amount:表示如何计算。如果该参数位置是一个正数,那么表示加上该值。
如果该参数位置是一个负数,那么表示减去该值。
在Calendar中还有一个方法,叫做getTime,可以将Calendar转成一个Date对象。
Date getTime();将Calendar转成一个Date对象并返回。
System系统类
System表示系统类,里面有很多方法都是和系统有关的。
static long currentTimeMillis():获取当前操作系统的时间(获取到的是毫秒值)
在System中还有一个方法叫做arraycopy,可以对数组进行复制。
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将指定源数组中的数组从指定位置复制到目标数组的指定位置。
参数src:表示源数组.
参数srcPos:表示源数组的起始位置。
参数dest:表示目标数组。
参数destPos:表示目标数组的起始位置。
参数length:表示赋值得元素个数。
arraycopy是系统级别的,性能非常高。
字符串拼接的效率问题
因为字符串具有不变性,所以每次拼接都会产生新的字符串,这样既耗时又浪费空间,
于是就有了StringBuilder, StringBuilder可以看看成一个可变的字符串,因为他是
可变的,所以每次拼接不会产生新的字符串。 所以StringBuilder的好处是更利于拼接。
StringBuilder是一个可变的字符序列。我们可以把StringBuilder看出一个可变的字符串。
StringBuilder和String本质一样,也都是由一串字符组成的数据,本质都是字符数组。
区别:
StringBuilder是可变的。
String是不可变得。
StringBuilder的构造方法:
StringBuilder();使用空参构造创建StringBuilder对象时,该对象中没有任何内容。
StringBuilder(String str):参数需要传递一个字符串,会根据字符串构建一个StringBuiler对象。
StringBuilder的常见方法:
StringBuilder appen(任何类型):将任何类型的数据拼接(追加)到调用者的StringBuilder对象的后面,返回值为调用者
String toString():将StrinBuilder转成一个字符串并返回。
包装类:
每一个基本类型都有其对应的引用类型(包装类)
基本类型 引用类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
基本类型就是一些简单的书记,功能简单,可以直接使用或者运算。不能调用方法。
引用类型的是可以创建对象的。该对象不仅可以表式数据,还可以调用方法。
引用类型的功能比基本类型要强大。基本类型能做的,对应的包装类也能做。
在JDK5的时候,多了一个新特性,叫做自动拆装箱。
拆箱:包装类转成基本类型。
装箱:基本类型转成包装类。
手动拆装箱
手动装箱(int-> Integer)
使用包装类(Integer)的valueof方法
static Integer valueof(int i):将int类型的数据转成Integer并返回。
手动拆箱(Integer -> int ):
使用包装类(Integer)的intValue方法
int intValue();将Integer转成int
基本类型和字符串的相互转换
基本类型 -> 字符串:
直接在基本类型数据的后面加上""(最常用,最推荐)
int num = 10;
String str = num+"";
字符串 -> 基本类型:
调用对应包装类的静态方法parseXX即可。
如果要把字符串转int,那么调用Integer的静态方法parseInt即可
最重点:
Object, 包装类。
重点:
StringBuilder, Date.
Object类
如果我们没有使用extends继承其他类,那么这个类是继承自Object的。
所有类都直接或者间接地继承自Object。
Object是所有类的老祖宗
toString方法
在Object中,有一个方法叫做toString方法,可以将对象转成一个字符串。
String toString():返回对象的字符串形式。
当我们通过一个对象调用toString方法时。会先看一下自己有没有这个方法,如果自己没有则调用父类的toString方法.
Object中的toString方法显示的是地址值。
当我们直接输出一个对象名时,内部会调用对象的toString方法,也就是这个对象的调用toString 方法的结果是什么
那么直接输出对象名的结果就是什么
如果调用toString方法,得到的对象的地址值一般没有意义。我们一般调用那个toString都是想要看到对项目里面的内容,
把对象的属性转成字符串,此时我们可以在子类中重写toString方法。
equals方法
使用==比较对象比较的是地址值
equals可以比较两个对象是否相同
当我们通过一个对象吊调用equals方法时,会先看一下自己有没有这个方法,没有就会向上找父类一直到Object。
而Object中的equals,是使用==比较对象的地址值。
一般来说比较地址值没有意义,如果我们希望通过对象的属性比较两个对象的属性是否相同,需要重写子类中的equals方法。
在JDk7.0之后,多了一个类,这个类叫做Objects,是操作对象的工具类。
这个类里面有一个equals方法,可以直接比较两个对象是否相同。
static boolean equlas (Object a, Object b): 比较参数a和b对象是否相同。
在Objects的equals中,会使用Object的euqals比较两个对象是否相同。
啊如果想要根据属性比较两个对象是否相同,还需要重写equals。
Date类
在Java中,有一个类叫做Date(java.util.Date),这个Date类一般叫做日期类。
注意:Date类虽然叫做日期类。但是它表示的是特定的时间瞬间,精确到毫秒。
构造方法;
Date(): 使用空参构造方法会议当前操作的系统时间构建一个Date对象。
Date(long date): 参数需要传递一个毫秒值。表示从1970年1月1日0时0分0秒开始过了多少毫秒。
中国用的是北京时间,东八区,所以时间是1970年1月1日08时0分0秒开始。
getTime():
在Date中,有一个getTime,可以获取到Date对象表示的毫秒值。
long getTime():获取Date对象表示的毫秒值.
setTime():
在Date中,还有一个setTime方法,可以设置毫秒值。一旦调用setTime 重新设置毫秒值后,该Date对象表示的时间就会改成设定值
void setTime(long time): 参数要穿第一个long类型的毫秒值。 给Date对象重新设置一个时间。
DateFormat
如果希望吧Date对象转成一个指定格式的字符串,那么可以使用【DateFormat】这个类对Date对象进行格式化
DateForamt是一个抽象类,如果要用,需要使用子类 ,子类为【SimpleDateFormat】
SimpleDateFormat的构造方法:
SimpleDateFormat(String pattern): 参数要传递一个字符串,该字符串表示一个模式(格式)。
举个例子:
要转成的格式:2019年03月22日 16时15分33秒
对应的模式: yyyy年MM月dd日 HH时mm分ss秒
就是使用英文字母代替掉中间的数字即可
SimpleDateFormat中的其他方法:
String format(Date date): 将参数Date对昂转成一个字符串并返回。
使用步骤:
1.创建一个Date对象。
2.创建SimpleDateFormat对象,在构造方法中指定转换的模式。
3.调用SimpleDateFormat的format方法,将Date对象转成一个字符串。
如果要将一个字符串转成一个Date对象,呢么可以使用SimpleDateFormat的parse(解析)方法去完成
Date parse(String source):将字符串转成一个Date对象并返回。
使用步骤:
1.定义一个字符串表示时间。
2.创建一个SimpleDateFormat对象,制定一个模式。
3.调用SimpDateFormat的parse方法,将字符串转成一个Date对象。
注意:
1.调用parse方法后,会有一个红色的波浪线的错误,此时是需要抛异常的(后面讲解)
解决方式:把光标移动到红色波浪线上面,然后按alt+回车,选择第一个
2.创建SimpleDateFormat时的构造方法中的模式必须和字符串的格式一致,否则会报错
小结:
Date->String:格式化。 要使用SimpleDateFormat的format方法
String->Date:解析。要使用SimpleDateFormat的parse方法
Calendar:
在Date类中,有很多方法都已经过时了,原因是因为在Calendar类中有了更好的方法可以替代他们。
Calendar叫做日历类,和Date一样,Calendar也可以表示特定的时间瞬间,精确到了毫秒。
Calendar是一个抽象类,如果要用,需要使用他的子类。
由于地区敏感性,Calendar子类对象不能我们自己去new,要通过Calendar的静态方法getInstance进行获取
Calendar获取日历对象的方法;
static Calendar getInstance(): 获取一个Calendar子类对象,并将该子类对象返回。
在Calendar中有一个方法叫做get,可以获取指定字段的值。
int get(int field):获取日历对象中指定字段的值。参数field表示要获取那个字段的值。
举例:
get(年):获取的就是年的值
get(月):获取的就是月的值
get(日):获取的就是日的值
在get方法中参数要传递int类型的数字,我们要使用int数字表示对应的字段。
如果向get方法中直接传递数字,那么会大大地影响我们程序的阅读性。
我们可以使用Calendar中的静态常量代替这些数字,在Calendar中有很多静态常量,每一个静态常量都表示一个数字
并且这个常量名还必须具备见名知意的效果。
在Calendar中月份是从0开始的,范围是0~11,所以输出是,需要+1;
在Calendar中,还有一个方法叫做set,可以设置指定字段的值。
void set(int field,int value): 给自定的字段设置值。
参数field:表示要给那个字段设置值。
参数value:表示要设置成什么值。
在Calendar中,还有一个方法叫做add,可以对指定得字段进行计算。
void add(int field, int amount):对指定字段的值进行计算。
参数field:表示对那个字段的值进行计算。
参数amount:表示如何计算。如果该参数位置是一个正数,那么表示加上该值。
如果该参数位置是一个负数,那么表示减去该值。
在Calendar中还有一个方法,叫做getTime,可以将Calendar转成一个Date对象。
Date getTime();将Calendar转成一个Date对象并返回。
System系统类
System表示系统类,里面有很多方法都是和系统有关的。
static long currentTimeMillis():获取当前操作系统的时间(获取到的是毫秒值)
在System中还有一个方法叫做arraycopy,可以对数组进行复制。
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将指定源数组中的数组从指定位置复制到目标数组的指定位置。
参数src:表示源数组.
参数srcPos:表示源数组的起始位置。
参数dest:表示目标数组。
参数destPos:表示目标数组的起始位置。
参数length:表示赋值得元素个数。
arraycopy是系统级别的,性能非常高。
字符串拼接的效率问题
因为字符串具有不变性,所以每次拼接都会产生新的字符串,这样既耗时又浪费空间,
于是就有了StringBuilder, StringBuilder可以看看成一个可变的字符串,因为他是
可变的,所以每次拼接不会产生新的字符串。 所以StringBuilder的好处是更利于拼接。
StringBuilder是一个可变的字符序列。我们可以把StringBuilder看出一个可变的字符串。
StringBuilder和String本质一样,也都是由一串字符组成的数据,本质都是字符数组。
区别:
StringBuilder是可变的。
String是不可变得。
StringBuilder的构造方法:
StringBuilder();使用空参构造创建StringBuilder对象时,该对象中没有任何内容。
StringBuilder(String str):参数需要传递一个字符串,会根据字符串构建一个StringBuiler对象。
StringBuilder的常见方法:
StringBuilder appen(任何类型):将任何类型的数据拼接(追加)到调用者的StringBuilder对象的后面,返回值为调用者
String toString():将StrinBuilder转成一个字符串并返回。
包装类:
每一个基本类型都有其对应的引用类型(包装类)
基本类型 引用类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
基本类型就是一些简单的书记,功能简单,可以直接使用或者运算。不能调用方法。
引用类型的是可以创建对象的。该对象不仅可以表式数据,还可以调用方法。
引用类型的功能比基本类型要强大。基本类型能做的,对应的包装类也能做。
在JDK5的时候,多了一个新特性,叫做自动拆装箱。
拆箱:包装类转成基本类型。
装箱:基本类型转成包装类。
手动拆装箱
手动装箱(int-> Integer)
使用包装类(Integer)的valueof方法
static Integer valueof(int i):将int类型的数据转成Integer并返回。
手动拆箱(Integer -> int ):
使用包装类(Integer)的intValue方法
int intValue();将Integer转成int
基本类型和字符串的相互转换
基本类型 -> 字符串:
直接在基本类型数据的后面加上""(最常用,最推荐)
int num = 10;
String str = num+"";
字符串 -> 基本类型:
调用对应包装类的静态方法parseXX即可。
如果要把字符串转int,那么调用Integer的静态方法parseInt即可