一,Object
1.Object类的概述
A:Object类概述
所有类的超类
Object类的特点:
* 类层次结构的根类
* 所有类直接或间接的继承Objcet类
* 都能使用Object非私有的方法
2.Object类中的方法
* A:Object类中有哪些方法?
* String toString() : 返回的是对象的字符串的表现形式
* boolean equals(Object obj) :判断两个对象是否相等
* Class<?> getClass() : 获取字节码对象
* int hashCode() : 计算哈希码值
03、Object中的toString方法
>* A:什么是toString方法?>* B:为什么要重写toString方法?
总结:
* A:toString()方法
返回的是对象的字符串的表现形式
* B:重写toString方法
* a: 为什么要重写toString方法
写一个类,不重写toString方法,我们直接打印对象名,打印的是地址值,地址值格式是 全类名+"@"+十六进制值
在开发当中,为了方便打印对象中的成员变量的值,我们可以重写toString方法
* b: 案例核心代码(重写Person类中的toString方法)
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
>* 案例
定义一个Student类
属性:姓名,年龄
定义一个测试类
在测试类中定义一个Student对象,为姓名和年龄分别赋
值,要求在打印学生对象的时候,输出效果示例:
name = "张三" , age = 18;
参考案例代码:
package cn.itcast.object_01;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
04、Object中的getClass()方法
>* A:getClass()方法的作用是什么?>* B:获取对象的字节码的有几种方式?
总结:
* A:作用
获取类的字节码对象
* B:获取字节码的方式
a:方式一
* 对象名.getClass()
b:方式二
* 类名.class属性
c:方式三
* Class.forName(String fileName)
package cn.itcast.object_01;
public class ObjcetDemo {
public static void main(String[] args) throws ClassNotFoundException {
Person p = new Person("pp", 23);
// System.out.println(p);
// 获取字节码对象
Class clazz = p.getClass();
System.out.println(clazz);
// 类名.class属性
Class clazz1 = Person.class;
System.out.println(clazz1);
// Class对象里面有静态方法forName
Class clazz2 = Class.forName("cn.itcast.object_01.Person");
System.out.println(clazz2);
}
}
###04、Object中的equals()方法
>* A:回顾==号和equals方法的区别
>* B: equals 方法比较内存地址
总结:
* A:==号和 equals 方法的区别
* == : 比较两个基本数据类型的数值是否相等,如果是引用数据类型比较的是地址值是否相等
* equalse : 比较的是两个字符串的内容是否相等
* B:equals方法比较内存地址
* a: Object类中的equals方法
底层用的是 == 来比较的
== 比较的是地址值是否相等,而不是两个对象中的内容是否相等
Person p = new Person("zhangsan",18);
Person p1 = new Person("zhangsan",18);
* b:重写equals和不重写equals的区别?
* 重写equals: 我们可以按照自己的规则来比较对象的内容是否相等
* 不重写equals:比较的是地址值是否相等,而不是两个对象中的内容是否相等
案例代碼:
public boolean equals(Object obj) {
if(this == obj){
return true;
}
if(obj == null)
return false;
/*if(this.getClass() != obj.getClass()){
return false;
}*/
if(!(obj instanceof Person)){
return false;
}
// 向下转型
Person o = (Person)obj;
if(!this.name.equals(o.getName())){
return false;
}
if(this.age != o.getAge()){
return false;
}
return true;
}
System类
###01、System类中的方法
>* static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length): 数组的拷贝>* static long currentTimeMillis(): 获取系统当前时间,是以毫秒值返回
>* static void exit(int status) : 退出JVM
###02.System类中的arraycopy()方法
void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
* System类方法,复制数组
* arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
* Object src:源数组
* int srcPos:原数组开始的索引
* Object dest:目标数组
* int destPos:目标数组从什么索引开始接收
* int length: 要接收多少个元素
案例演示:
package cn.itcast.system_01;
import java.lang.reflect.Array;
import java.util.Arrays;
public class SystemArrayCopyDemo {
public static void main(String[] args) {
// void arraycopy(Object src, int srcPos, Object dest, int destPos, int
// length)
// * System类方法,复制数组
// * arraycopy(Object src, int srcPos, Object dest, int destPos, int
// length)
// * Object src:源数组
// * int srcPos:原数组开始的索引
// * Object dest:目标数组
// * int destPos:目标数组从什么索引开始接收
// * int length: 要接收多少个元素
// 原数组
int[] arr = {11,2,4,5,7,22};
// 目标数组
int[] dest = new int[arr.length];
System.arraycopy(arr, 0, dest, 0, arr.length);
System.out.println(Arrays.toString(dest));
}
}
###03.System类currentTimeMillis()方法
* A:System类方法currentTimeMillis():
案例演示:
package cn.itcast.system_01;
public class SystemDemo01 {
public static void main(String[] args) {
// static long currentTimeMillis(): 获取系统当前时间,是以毫秒值返回
long start = System.currentTimeMillis();
for(int i = 0 ; i < 1000000;i++){
System.out.println("");
}
long end = System.currentTimeMillis();
System.err.println(end-start);
}
}
###04.System类exit()方法
*A:System类方法exit()方法:案例演示:
System.exit(0);
#Date类
###01、Date类的构造方法
* A: Date类的构造方法* a: 空参构造:创建一个Date对象,当前系统时间
* Date d = new Date();
* b: 带参构造:将"指定的时间" 毫秒值转换成Date对象
* Date d = new Date(long times);
案例代码:
package cn.itcast.date_01;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// * a: 空参构造:创建一个Date对象,默认的时间是1970-1-1
// * Date d = new Date();
// * b: 带参构造:将"指定的时间" 毫秒值转换成Date对象
// * Date d = new Date(long times);
Date d = new Date();
System.out.println(d.toLocaleString());
System.out.println(System.currentTimeMillis());
Date time = new Date(1512712822838L);
System.out.println(time.toLocaleString());
}
}
###02、Date类的get和set方法
* A:Date类的get和set方法* public long getTime()
* 获取时间的毫秒值
* public void setTime(long times)
* 将毫秒值设置成Date对象
案例代码:
package cn.itcast.date_01;
import java.util.Date;
public class DateDemo2 {
public static void main(String[] args) {
// 创建Date对象
Date d = new Date();
System.out.println(d.getTime());
// 将long类型的毫秒值转换成Date对象
d.setTime(1512713519623L);
System.out.println(d.toLocaleString());
}
}
###03、日期格式化SimpleDateFormat
>* A:SimpleDateFormat概述>* B:SimpleDateFormat构造方法
>* B:使用SimpleDateFormat日期格式进行String和Date之间的转换
总结:
*A:概述
* DateFormat 概述
* 是日期/时间格式化子类的抽象类!抽象类是不能创建对象的,我们要使用,使用的是抽象类的子类
SimpleDateFormat的作用:
* 用于格式和解析日期时间的
* 格式化:
将 Date 转换为成 String
*String format(Date date)
* 解析:
将String 转换成 Date
Date parse(String source )
*B:SimpleDateFormat构造方法
* SimpleDateFormat():按照系统默认的格式,进行格式化 17-12-08 上午
* SimpleDateFormat(String pattern):按照指定的模式创建SimpleDateFormat对象
*C: 日期格式化SimpleDateFormat
*注意:
在解析的时候,解析格式必须要跟创建SimpleDateFormat对象中模式一样,否则会包解析异常
* a: 对日期进行格式化的步骤
* 1: 创建SimpleDateFormat对象,并指定格式
* 2: 调用format方法进行格式化
* 日期模式:
* yyyy 年份
* MM 月份
* dd 天
* HH 小时
* mm 分钟
* ss 秒
案例演示:
package cn.itcast.date_01;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo3 {
public static void main(String[] args) throws ParseException {
// method_01();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
// 格式化
System.out.println(sdf.format(new Date()));
// 解析
Date d = sdf.parse("2017/12/08 14-51-52");
System.out.println(d.toLocaleString());
}
private static void method_01() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
// 格式化日期
String format = sdf.format(new Date());
System.out.println(format);
// 解析
Date d = sdf.parse("2017年12月08日");
System.out.println(d.toLocaleString());
}
}
>* 案例:求出你来这个世界上多少天?
案例代码:
// 出生日期
String birthday = "1988-10-19";
// 今天的日期
// Date d = new Date();
// 创建SimpleDateFormat对象,并指定模式yyyy-MM-dd
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 解析
long birthdayTime = sdf.parse(birthday).getTime();
// 今天的日期毫秒值
long NowTime = new Date().getTime();
System.out.println((NowTime - birthdayTime) / 1000 / 60 / 60 / 24);
#Calendar时间类
>* A:Calendar概述
>* B: 获取Calendar对象
>* C:Calendar的获取功能
总结:
A:Calendar概述
* 日历类,为了方便操作年月日
B:获取Calendar对象
* 格式:
Calendar c = Calendar.getInstance();
C:
*获取功能
* int get(int field):
根据字段获取相应的年月日
*修改功能
* void set(int field, int value): 根据字段修改时间
* void set(int year, int month, int date) :修改具体的年月日
*添加功能
* add(int field, int value):修改时间的偏移量
案例代码:
// 获取日历类对象
Calendar c = Calendar.getInstance();
// 修改方法,年月日
// c.set(2020, 2, 8);
// c.set(Calendar.YEAR, 2020);
// 添加:日期的偏移量
c.add(Calendar.DAY_OF_MONTH, -8);
// 获取年月日
System.out.print(c.get(Calendar.YEAR) + "年");
System.out.print((c.get(Calendar.MONTH) + 1) + "月");
System.out.println(c.get(Calendar.DAY_OF_MONTH) + "日");
>* Calendar中常用的常量:
* int year = cal.get(Calendar.YEAR);//当前年
* int month = (cal.get(Calendar.MONTH))+1;//当前月 Calendar.MONTH从0开始
* int day_of_month = cal.get(Calendar.DAY_OF_MONTH);//当前月的第几天:即当前日
* int hour24 = cal.get(Calendar.HOUR_OF_DAY);//当前时钟:HOUR_OF_DAY-24小时制
* int hour12 = cal.get(Calendar.HOUR); //HOUR-12小时制
* int minute = cal.get(Calendar.MINUTE); //当前:分钟
* int second = cal.get(Calendar.SECOND); //当前秒
* int day_of_week = cal.get(Calendar.DAY_OF_WEEK)-1; // 星期几 Calendar.DAY_OF_WEEK用数字(1~7)表示(星期日~星期六)
* int ampm = cal.get(Calendar.AM_PM); //0-上午;1-下午
* int week_of_year = cal.get(Calendar.WEEK_OF_YEAR); //当前年的第几周
* int week_of_month = cal.get(Calendar.WEEK_OF_MONTH); //当前月的星期数
* int day_of_week_in_month = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH); //当前月中的第几个星期
* int day_of_year = cal.get(Calendar.DAY_OF_YEAR); //当前年的第几天
#包装类
###01、基本数据类型对象包装类概述
* A:基本数据类型对象包装类概述*a.基本类型包装类的产生
基本数据类型,只能做一些基本的运算,但是做不了一些较复杂的运算,java就提供了八种数据类型对应包装数据类型
* B:八种基本类型对应的包装类
char :Character
int :Integer
byte :Byte
short :Short
long :Long
float :Float
double :Double
boolean :Boolean
###02、Integer类构造方法
* A:Integer类构造方法*Integer(int value)
* 将int类型的数据封装成Integer对象
*Integer(String s)
* 将String类型的数据封装成Integer对象
字符串必须是数字的字符串 例如"123"
案例演示:
###03、Integer类:字符串转int
>* String转Integer有几种方法?总结:
有两种种方式
*A:Integer intValue():
举例:
Integer i = new Integer("123");
int intNum = i.intValue();
*B:Integer.parseInt(String s):
举例:
int i = Integer.parseInt("123");
###04、Integer类int转成字符串
A:Integer类int转成字符串:B: 直接加 "";
Integer i = new Integer("123");
int intNum = i.intValue();
String s = intNum+"";
C: Integer类的toString()方法
Integer i = new Integer("123");
String s = i.toString();
D:使用Integer静态方法toString(int i)
String s = Integer.toString(123);
案例代码:
package cn.itcast.integer_01;
public class IntegerDemo {
public static void main(String[] args) {
// 创建Integer对象
Integer i = new Integer(10);
Integer ii = new Integer("20");
System.out.println(i);
System.out.println(ii);
// 将String 转 Int
int value = i.intValue();
System.out.println(value);
int num = Integer.parseInt("30");
System.out.println( num);
// 将int转字符串
// 直接加""
String str = value+"";
// toString();
String strNum = i.toString();
System.out.println(str+"0");
// 静态方法 toString(int value)
String s = Integer.toString(50);
System.out.println(s);
}
}
* A:Integer类其他方法
a:十进制转二,八,十六进制
###06自动装箱和自动拆箱
>* 自动装箱>* 自动拆箱
* A:自动装箱:
* 把int类型的数据直接赋值给Integer对象
Integer i = 10;
* B:自动拆箱:
* 把Integer对象类型的数据直接赋值给int
Integer ii = new Integer(10);
int i = ii;
#正则表达式
###01正则表达式的概念和作用
* A: 正则表达式的概念和作用* a: 正则表达式的概述
* 就是一套规则,也是一个字符串
* b: 正则表达式的作用
* 判断字符串是否符合某个规则
###02、正则表达式语法规则
* A: 正则表达式语法规则* a: 字符
* x 代表的是字符x
* \\ 代表的是反斜线字符'\'
* \t 代表的是制表符
* \n 代表的是换行符
* \r 代表的是回车符
* b: 字符类
* [abc] a、b 或 c(简单类)
* [^abc] 任何字符,除了 a、b 或 c(否定)
* [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
* [0-9] 0到9的字符都包括
* [a-zA-Z_0-9] 代表的字母或者数字或者下划线(即单词字符)
* c: 预定义字符类
* . 任何字符(与行结束符可能匹配也可能不匹配)
* \d 数字:[0-9]
* \D 非数字: [^0-9]
* \s 空白字符:[ \t\n\x0B\f\r]
* \S 非空白字符:[^\s]
* \w 单词字符:[a-zA-Z_0-9]
* \W 非单词字符:[^\w]
* d: 数量词
* X? X,一次或一次也没有
* X* X,零次或多次
* X+ X,一次或多次
* X{n} X,恰好 n 次
* X{n,} X,至少 n 次
* X{n,m} X,至少 n 次,但是不超过 m 次
###03、正则表达式练习校验qq号是否合法
需求:
0不能开头
必须都是数字
要求必须是5-15位
案例代码:
/*
0不能开头
必须都是数字
要求必须是5-15位
*/
String qq = "111000";
String regex = "[1-9][0-9]{4,14}";
System.out.println(qq.matches(regex));
###04、正则表达式练习判断字符串中间的字符是否是元音
需求:
什么是元音:
aeiou
public static boolean regexMethod_01(String s) {
// String str = "cof";
return s.matches("[a-zA-Z][aeiouAEIOU][a-zA-Z]");
}
###05、正则表达式切割练习
需求:
切割字符串"aa,bb,cc";
切割字符串"-1 99 4 23";
切割字符串"-1 99 4 23";
案例代码:
public static void regexMethod_02() {
/*
* 切割字符串"aa,bb,cc"; 切割字符串"-1 99 4 23"; 切割字符串"-1 99 4 23";
*/
// String s1 = "aa,bb,cc";
// String s1 = "-1 99 4 23";
String s1 = "-1 99 4 23";
// String[] arr = s1.split(",");
// String[] arr = s1.split(" ");
String[] arr = s1.split(" +");
System.out.println(Arrays.toString(arr));
}
匹配正确的数字:
匹配规则:
* 匹配正整数:”\\d+”
* 匹配正小数:”\\d+\\.\\d+”
* 匹配负整数:”-\\d+”
* 匹配负小数:”-\\d+\\.\\d+”
* 匹配保留两位小数的正数:”\\d+\\.\\d{2}”
* 匹配保留1-3位小数的正数:”\\d+\\.\\d{1,3}”