目录
https://blog.csdn.net/FengGLA/article/details/61502423
六:Date类:https://www.runoob.com/java/java-date-time.html
3.获取当前日期时间(使用 Date 对象的 toString() 方法来打印当前日期和时间)
compareTo:按字典来比较字符串,结果有三个,>0 ,=0 ,<0
一:equals
二:instanceof
三:toString
四:日期时间Date
五:子类与父类之间的转换问题:
https://blog.csdn.net/FengGLA/article/details/61502423
实例代码
package com.api;
import com.api.DeepClone;
public class DeepClone implements Cloneable{
private String titie;
private double price;
//obj为Object的一个实例
private static final Object obj= new Object();
public DeepClone() {
}
public DeepClone(String titie, double price) {
super();
this.titie = titie;
this.price = price;
}
public String getTitie() {
return titie;
}
public void setTitie(String titie) {
this.titie = titie;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public boolean equals(Object obj) {
//判断是否是同一对象
if(this == obj) {
return true;
}
//判断obj是否是DeepClone的一个实例,因为只有父类是子类的一个实例,父类才可以强制转换为子类.
//当父类obj是DeepClone的一个实例时,
if(obj instanceof DeepClone) {
//进行类型强制转换,将obj强制转换为DeepClone子类
DeepClone anotherC= (DeepClone)obj;
//判断是否相等(通过父类调用子类变量的方法,那么要注意要将父类型变量和强制转换用括号括起来)
//因为成员访问运算符.的优先级大于类型转换,所以要用括号括起来保证类型转换先于成员访问进行运算。
if(anotherC.titie.equals(this.getTitie())) {
if(anotherC.price==this.price) {
return true;
}
}
}
return false;
}
/*
* 重写toString()方法
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Course [titie=" + titie + ", price=" + price + "]";
}
/**
* 重写hashCode()方法
*/
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.titie.hashCode();
}
//实现深度复制
@Override
protected Object clone() throws CloneNotSupportedException {
//super.clone()得到的是一个父类对象,将它强制转换为子类DeepClone,为实例dc
DeepClone dc = (DeepClone) super.clone();
dc.titie = new String(dc.titie);
return dc;
}
// @Override
// public int hashCode() {
// final int prime = 31;
// int result = 1;
// long temp;
// temp = Double.doubleToLongBits(price);
// result = prime * result + (int) (temp ^ (temp >>> 32));
// result = prime * result + ((titie == null) ? 0 : titie.hashCode());
// return result;
// }
//
// @Override
// public boolean equals(Object obj) {
// if (this == obj)
// return true;
// if (obj == null)
// return false;
// if (getClass() != obj.getClass())
// return false;
// DeepClone other = (DeepClone) obj;
// if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
// return false;
// if (titie == null) {
// if (other.titie != null)
// return false;
// } else if (!titie.equals(other.titie))
// return false;
// return true;
// }
public static void main(String[] args) throws CloneNotSupportedException {
DeepClone c1 = new DeepClone("AA",80);
DeepClone cloneC1 = (DeepClone) c1.clone();
System.out.println(c1==cloneC1);
System.out.println(c1.getClass() == cloneC1.getClass());
System.out.println(c1.equals(cloneC1));
System.out.println(c1);
//判断title是否是公用的
//结论:如果被克隆的对象里面由引用类型的属性,则是共同使用,即指向同一地址
System.out.println("1"+(c1.titie==cloneC1.titie));
System.out.println("2"+(c1.price == cloneC1.price));
//按照惯例,此方法返回的对象应该独立于该对象(正被复制的对象)。
//要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。
//这通常意味着要复制包含正在被复制对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。
//如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。
System.out.println("3"+(c1.obj == cloneC1.obj));
}
}
六:Date类:https://www.runoob.com/java/java-date-time.html
七:Math类
1.Date 类提供两个构造函数来实例化 Date 对象。
第一个构造函数使用当前日期和时间来初始化对象。
Date( )
第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
Date(long millisec)
2.Date对象创建以后,可以调用下面的方法。
序号 | 方法和描述 |
---|---|
1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
2 | boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
3 | Object clone( ) 返回此对象的副本。 |
4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
5 | int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
8 | int hashCode( ) 返回此对象的哈希码值。 |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
10 | String toString( ) 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
3.获取当前日期时间(使用 Date 对象的 toString() 方法来打印当前日期和时间)
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
}
4.日期比较
Java使用以下三种方法来比较两个日期:
- 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
- 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
- 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
5.格式化日期
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
System.out.println("当前时间为: " + ft.format(dNow));
}
}
其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。
注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
日期和时间的格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
' | 文字定界符 | Delimiter |
" | 单引号 | ` |
使用printf格式化日期
printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-10-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "HH:MM:SS PM"格式(12时制) | 02:25:51 下午 |
T | "HH:MM:SS"格式(24时制) | 14:28:16 |
R | "HH:MM"格式(24时制) | 14:28 |
字符串学习:(正则表达式)
1.子串截取:
"12345"
substring(int beginIndex) :从beginindex开始截取
substring(int beginIndex,)
左闭右开区间
2.检索indexOf
1为起始检索点
运行结果:
lastindexOf检索最后一次出现的地方
只取一个字符charAt
结果为:d
valueOf使用,将boolean类型转换为字符串类型
输出结果的false是字符串类型
compareTo:按字典来比较字符串,结果有三个,>0 ,=0 ,<0
结果为:0
结果为-1 ,因为a97 b98
转换为字节数组
打印的是个地址
判断后缀 ,返回布尔类型
判断前缀,返回布尔类型
去掉首尾空格trim()方法
结果
正则表达式:
Pattern类
编译,匹配,替换
判断当前字符串是否全是数字\d 加个*或者+号
//自定义规则
String reg = "\\d*";
//编写数字进行验证
String num="1234";
//把自己编写的规则填进去
System.out.println(num.matches(reg));
编写手机号码规则,matches()方法
结果为:false
捕获组数:一对()为一组, ( (1)(2)(3)(4) 5) 一共五组