Object类 | java.lang.Object 类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。 | |||||||||||||||||
在对象实例 化的时候,最终找的父类就是Object。 | ||||||||||||||||||
如果一个类没有特别指定父类, 那么默认则继承自Object类。例如: | ||||||||||||||||||
public class MyClass /*extends Object*/ { // ... | ||||||||||||||||||
} | ||||||||||||||||||
Object类中方法①toString方法②equals方法 | ||||||||||||||||||
①toString | public String toString() | |||||||||||||||||
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。 | ||||||||||||||||||
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 | ||||||||||||||||||
覆盖重写 | ||||||||||||||||||
如果不希望使用toString方法的默认行为,(一般开发中都是自己重写toString方法) | ||||||||||||||||||
在对象中重写toString()方法 | ||||||||||||||||||
public String toString() { | ||||||||||||||||||
return "学生信息:" + "姓名:" + name + ",年龄:" + age; | ||||||||||||||||||
} | ||||||||||||||||||
②equals | public boolean equals(Object obj) | |||||||||||||||||
默认地址比较 | ||||||||||||||||||
如果没有覆盖重写equals方法,那么Object类中默认进行 == 运算符的对象地址(地址值)比较,只要不是同一个对象,结果必然为false。 | ||||||||||||||||||
自定义重写比较 | 可以使用快捷键 alt+insert ,并选 择 equals() and hashCode() 进行自动代码生成 | |||||||||||||||||
@Override | ||||||||||||||||||
public boolean equals(Object o) { | ||||||||||||||||||
if (this == o) return true; ////提高代码运行速率 | ||||||||||||||||||
if (o == null || getClass() != o.getClass()) return false;//代码健壮性 | ||||||||||||||||||
Student student = (Student) o; | ||||||||||||||||||
return age == student.age && | ||||||||||||||||||
Objects.equals(name, student.name); | ||||||||||||||||||
} | ||||||||||||||||||
日期时间类 | java.util.Date 类 表示特定的瞬间,精确到毫秒。 | |||||||||||||||||
public Date() :分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 | ||||||||||||||||||
public Date(long date) :分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元 (epoch)(时间原点)”, | ||||||||||||||||||
public long getTime() 把日期对象转换成对应的时间毫秒值。 | long S = new Date().getTime(); | |||||||||||||||||
即1970年1月1日00:00:00 GMT)以来的指定毫秒数。 | ||||||||||||||||||
tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒 | ||||||||||||||||||
import java.util.Date; | ||||||||||||||||||
public class Demo01Date { | ||||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
// 创建日期对象,把当前的时间 | ||||||||||||||||||
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 | ||||||||||||||||||
// 把当前的系统日期转成毫秒值s | ||||||||||||||||||
long s = new Date().getTime(); | ||||||||||||||||||
System.out.println(s);//1541852026818 | ||||||||||||||||||
} | ||||||||||||||||||
} | ||||||||||||||||||
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行 | ||||||||||||||||||
了覆盖重写,所以结果为指定格式的字符串 | ||||||||||||||||||
DateFormat类 | ||||||||||||||||||
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转 换,也就是可以在Date对象与String对象之间进行来回转换。 | ||||||||||||||||||
格式化:按照指定的格式,从Date对象转换为String对象。 | SimpleDateFormat里的format方法 | |||||||||||||||||
解析:按照指定的格式,从String对象转换为Date对象。 | SimpleDateFormat里的parse方法 | |||||||||||||||||
构造方法 | ||||||||||||||||||
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类 java.text.SimpleDateFormat 。这个类需要一个 模式(格式)来指定格式化或解析的标准。 | ||||||||||||||||||
构造方法为:public SimpleDateFormat(String pattern) :用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。 | ||||||||||||||||||
参数pattern是一个字符串,代表日期时间的自定义格式。 | ||||||||||||||||||
格式规则 | 年 | 月 | 日 | 时 | 分 | 秒 | ||||||||||||
y | M | d | H | m | s | |||||||||||||
//将Date日期格式化 日期===>文本(SimpleDateFormate中format方法) | ||||||||||||||||||
//步骤1,创建SimpleDateFormate对象,并传入格式(例如yy-MM-dd HH:mm:ss) | ||||||||||||||||||
//2,调用SimpleDateFormat中的format方法,将Date数据格式化为想要的格式的字符串 | ||||||||||||||||||
private static void one() { | ||||||||||||||||||
Date d1 = new Date(); | ||||||||||||||||||
System.out.println(d1); | ||||||||||||||||||
SimpleDateFormat sd1 = new SimpleDateFormat("yyyy年MM月dd HH时mm分ss秒"); | ||||||||||||||||||
String str = sd1.format(d1); | ||||||||||||||||||
System.out.println(str); | ||||||||||||||||||
} | ||||||||||||||||||
//将String字符串转为Date日期类型(解析) 文本===>日期(SimpleDateFormate中parse方法) | ||||||||||||||||||
//步骤1,创建SimpleDateFormat对象,并传入文本格式 | ||||||||||||||||||
//2,调用SimpleDateFormat中的parse方法,将符合格式的字符串转化为Date数据格式 | ||||||||||||||||||
/*注意--- public Date parse(String source) throws ParseException | ||||||||||||||||||
parse方法声明了一个异常叫ParseException | ||||||||||||||||||
如果字符串和构造方法的模式不一样,那么程序就会抛出异常 | ||||||||||||||||||
调用一个抛出了异常的方法,就必须的处理这个异常,要么throws继续抛出这个异常,要么try catch自己处理 | ||||||||||||||||||
*/ | ||||||||||||||||||
private static void two() throws ParseException { | ||||||||||||||||||
String str = "2018-1-1"; | ||||||||||||||||||
SimpleDateFormat sd2= new SimpleDateFormat("yyyy-MM-dd"); | ||||||||||||||||||
Date d1 = sd2.parse(str); | //将记得要抛ParseException异常 | |||||||||||||||||
System.out.println(d1); | ||||||||||||||||||
} | ||||||||||||||||||
} | ||||||||||||||||||
Calendar类 | java.util.Calendar 是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装 为静态成员变量,方便获取。 | |||||||||||||||||
日历类就是方便获取各个时间属性的。 | ||||||||||||||||||
获取方式 | ||||||||||||||||||
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子 类对象,如下: | ||||||||||||||||||
Calendar静态方法 | Calendar cal = Calendar.getInstance(); | |||||||||||||||||
public static Calendar getInstance() :使用默认时区和语言环境获得一个日历 | ||||||||||||||||||
例如: | ||||||||||||||||||
常用方法 | ||||||||||||||||||
根据Calendar类的API文档,常用方法有: | ||||||||||||||||||
public int get(int field) :返回给定日历字段的值。 | ||||||||||||||||||
public void set(int field, int value) :将给定的日历字段设置为给定值。 | ||||||||||||||||||
public abstract void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或减去指 | ||||||||||||||||||
定的时间量。 | ||||||||||||||||||
public Date getTime() :返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。 | ||||||||||||||||||
Calendar类中提供很多成员常量,代表给定的日历字段: | ||||||||||||||||||
年 | 月(从0开始,得+1使用) | 月中的天(几号) | 时(12小时) | 时(24小时制) | 分 | 秒 | 周中的天(周几,周日为1可以减1使用) | |||||||||||
YEAR | MONTH | DAY_OF_MONTH | HOUR | HOUR_OF_DAY | MINUTE | SECOND | DAY_OF_WEEK | |||||||||||
get和set方法 | ||||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
// 创建Calendar对象 | ||||||||||||||||||
Calendar cal = Calendar.getInstance(); | ||||||||||||||||||
// 获得月 | ||||||||||||||||||
int month = cal.get(Calendar.MONTH) + 1; | ||||||||||||||||||
// 获得日 | ||||||||||||||||||
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); | ||||||||||||||||||
// 设置年 | ||||||||||||||||||
cal.set(Calendar.YEAR, 2020); | ||||||||||||||||||
// 获得年 | ||||||||||||||||||
int year = cal.get(Calendar.YEAR); | ||||||||||||||||||
System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); | ||||||||||||||||||
} | ||||||||||||||||||
add方法 | add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量 | |||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
// 创建Calendar对象 | ||||||||||||||||||
Calendar cal = Calendar.getInstance(); | ||||||||||||||||||
// 获得月 | ||||||||||||||||||
int month = cal.get(Calendar.MONTH) + 1; | ||||||||||||||||||
// 获得日 | ||||||||||||||||||
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); | ||||||||||||||||||
// 获得年 | ||||||||||||||||||
int year = cal.get(Calendar.YEAR); | ||||||||||||||||||
System.out.println(year + "年" + month + "月" + dayOfMonth + "日"); | ||||||||||||||||||
//2018年11月11日 | ||||||||||||||||||
// 使用add方法 | ||||||||||||||||||
cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天 | ||||||||||||||||||
cal.add(Calendar.YEAR, -3); // 减3年 | ||||||||||||||||||
// 获得月 | ||||||||||||||||||
int month1 = cal.get(Calendar.MONTH) + 1; | ||||||||||||||||||
// 获得日 | ||||||||||||||||||
int dayOfMonth1 = cal.get(Calendar.DAY_OF_MONTH); | ||||||||||||||||||
// 获得年 | ||||||||||||||||||
int year1 = cal.get(Calendar.YEAR); | ||||||||||||||||||
System.out.println(year1 + "年" + month1 + "月" + dayOfMonth1 + "日"); | ||||||||||||||||||
// 2015年11月13日 | ||||||||||||||||||
} | ||||||||||||||||||
getTime方法 | Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。 | 西方星期的开始为周日,中国为周一。 | ||||||||||||||||
public static void main(String[] args) { | 在Calendar类中,月份的表示是以0-11代表1-12月。 | |||||||||||||||||
Calendar cal = Calendar.getInstance(); | 日期是有大小关系的,时间靠后,时间越大。 | |||||||||||||||||
Date date = cal.getTime(); | ||||||||||||||||||
System.out.println(date); | ||||||||||||||||||
//Sun Nov 11 09:02:50 CST 2018 | ||||||||||||||||||
} | ||||||||||||||||||
System类 | java.lang.System 类中提供了大量的静态(直接方法名点调用)方法,可以获取与系统相关的信息或系统级操作,在System类的API文 档中,常用的方法有: | |||||||||||||||||
public static long currentTimeMillis() :返回以毫秒为单位的当前时间。 | 可用来检测代码运行的时间 | |||||||||||||||||
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将 | ||||||||||||||||||
数组中指定的数据拷贝到另一个数组中。 | ||||||||||||||||||
currentTimeMillis(返回值是long类型) | ||||||||||||||||||
/** | public static void main(String[] args) { | |||||||||||||||||
* 输出100天后星期几 | long fistTime = System.currentTimeMillis(); | |||||||||||||||||
* 月份默认从0开始,如果想拿正常的月份需要+1 | System.out.println("第一次"+fistTime); | |||||||||||||||||
* 星期值默认从星期天(1)开始算第一天,如果是正常国内显示需要-1 | //第一次1542013360291 | |||||||||||||||||
*/ | Calendar ca = Calendar.getInstance(); | |||||||||||||||||
ca.add(Calendar.DATE, 1); | ||||||||||||||||||
int dayOfWeek=ca.get(Calendar.DAY_OF_WEEK); | ||||||||||||||||||
System.out.println("100天后星期" + dayOfWeek); | ||||||||||||||||||
//100天后星期3 | ||||||||||||||||||
System.out.println("第二次"+System.currentTimeMillis()); | ||||||||||||||||||
//第二次1542013360518 | ||||||||||||||||||
} | ||||||||||||||||||
arraycopy方法(复制操作的是数组) | ||||||||||||||||||
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将 数组中指定的数据拷贝到另一个数组中。 | ||||||||||||||||||
参数序号 | 参数名称 | 参数类型 | 参数含义 | public static void main(String[] args) { | ||||||||||||||
1 | src | Object | 源数组 | int arr1[] = {1, 2, 3, 4, 5}; | ||||||||||||||
2 | srcPos | int | 源数组索引起始位置 | int arr2[] = new int[5]; | ||||||||||||||
3 | dest | Object | 目标数组 | System.arraycopy(arr1, 1, arr2, 1, 3); | ||||||||||||||
4 | destPos | int | 目标数组索引起始位置 | System.out.println(Arrays.toString(arr2)); | ||||||||||||||
5 | length | int | 复制元素个数 | }//[0, 2, 3, 4, 0] | ||||||||||||||
StringBuilder类 | 由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。例如: | |||||||||||||||||
在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改。 |
| |||||||||||||||||
根据这句话分析我们的代码,其实总共产生了三个字符串,即 "Hello" 、 "World" 和 "HelloWorld" 。引用变量s 首先指向 Hello 对象, | ||||||||||||||||||
最终指向拼接出来的新字符串对象,即 HelloWord 。 | ||||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
String s = "Hello"; | ||||||||||||||||||
s += "World"; | ||||||||||||||||||
System.out.println(s); | ||||||||||||||||||
} | ||||||||||||||||||
由此可知,如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象, | ||||||||||||||||||
既耗时,又浪费空间。为了解 决这一问题,可以使用 java.lang.StringBuilder 类。 | ||||||||||||||||||
StringBuilder | 又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,(字符串的容器) | |||||||||||||||||
通过某些方法调用可以改变该序列的长度和内容。 (默认16字符空间,超过自动扩充) | ||||||||||||||||||
构造方法 | ||||||||||||||||||
public StringBuilder() :构造一个空的StringBuilder容器。 | ||||||||||||||||||
public StringBuilder(String str) :构造一个StringBuilder容器,并将字符串添加进去。 | ||||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
StringBuilder sb1 = new StringBuilder(); | ||||||||||||||||||
System.out.println(sb1); // (空白) | ||||||||||||||||||
// 使用带参构造 | ||||||||||||||||||
StringBuilder sb2 = new StringBuilder("test1"); | ||||||||||||||||||
System.out.println(sb2); // test1 | ||||||||||||||||||
} | ||||||||||||||||||
常用方法 | ||||||||||||||||||
public StringBuilder append(...) :添加任意类型数据的字符串形式,并返回当前对象自身。 | ||||||||||||||||||
public String toString() :将当前StringBuilder对象转换为String对象。 | ||||||||||||||||||
append(...) 方法 | 备注:StringBuilder已经覆盖重写了Object当中的toString方法。 | |||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
//创建对象 | ||||||||||||||||||
StringBuilder builder = new StringBuilder(); | ||||||||||||||||||
//public StringBuilder append(任意类型) | ||||||||||||||||||
StringBuilder builder2 = builder.append("hello"); | ||||||||||||||||||
//对比一下 | ||||||||||||||||||
System.out.println("builder:" + builder);//builder:hello | ||||||||||||||||||
System.out.println("builder2:" + builder2);//builder2:hello | ||||||||||||||||||
System.out.println(builder == builder2); //true | ||||||||||||||||||
// 可以添加 任何类型 | ||||||||||||||||||
builder.append("hello"); | ||||||||||||||||||
builder.append("world"); | ||||||||||||||||||
builder.append(true); | ||||||||||||||||||
builder.append(100); | ||||||||||||||||||
// 在我们开发中,会遇到调用一个方法后,返回一个对象的情况。然后使用返回的对象继续调用方法。 | ||||||||||||||||||
// 这种时候,我们就可以把代码现在一起,如append方法一样,代码如下 | ||||||||||||||||||
//链式编程 | ||||||||||||||||||
builder.append("hello").append("world").append(true).append(100); | ||||||||||||||||||
System.out.println("builder:" + builder); | ||||||||||||||||||
//builder:hellohelloworldtrue100helloworldtrue100 | ||||||||||||||||||
} | ||||||||||||||||||
toString方法 | 通过toString方法,StringBuilder对象将会转换为不可变的String对象。 | |||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
// 链式创建 | ||||||||||||||||||
StringBuilder sb = new StringBuilder("Hello").append("World").append("Java"); | ||||||||||||||||||
// 调用方法 | ||||||||||||||||||
String str = sb.toString(); | ||||||||||||||||||
System.out.println(str); // HelloWorldJava | ||||||||||||||||||
} | ||||||||||||||||||
包装类 | ||||||||||||||||||
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率, | ||||||||||||||||||
然而很多情况,会创建对象使用,因为 对象可以做更多的功能 | ||||||||||||||||||
基本数据类型 | byte | short | int | long | double | float | char | boolean | ||||||||||
Byte | Short | Integer | Long | Double | Float | Character | Boolean | |||||||||||
包装类作用:①提供一些有用字段 | Long.MAX_VALUE | ②还有一些可进行类型转换的方法 | ||||||||||||||||
装箱与拆箱 | 基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“ | |||||||||||||||||
装箱:从基本类型转换为对应的包装类对象。 | ||||||||||||||||||
拆箱:从包装类对象转换为对应的基本类型。 | ||||||||||||||||||
自动装箱与自动拆箱 | 由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始, | |||||||||||||||||
基本类型与包装类的装箱、拆箱动作 可以自动完成。 | ||||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4); | ||||||||||||||||||
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; | ||||||||||||||||||
// 加法运算完成后,再次装箱,把基本数值转成对象。 | ||||||||||||||||||
} | ||||||||||||||||||
基本类型与字符串之间的转换 | ||||||||||||||||||
基本类型转换为String | 基本类型直接与””相连接即可;如:34+"" | |||||||||||||||||
String转换成对应的基本类型 | ||||||||||||||||||
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型: | ||||||||||||||||||
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基本类型。 | ||||||||||||||||||
public static void main(String[] args) { | 注意:如果字符串参数的内容无法正确转换为对应的基本类型 | |||||||||||||||||
int num = Integer.parseInt("100"); | ,则会抛出 java.lang.NumberFormatException 异常。 | |||||||||||||||||
}//字符串100转为int数据类型Integer |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |