标签:word 不可变 时间格式 格式化 覆盖 day 包含 本质 时间格式化
bject
类java.lang.Object
类是java
语言中的超级父类
如果一个类没有指定父类,则继承与Object类
public class MyClass /*extends Object*/{
// 代码块
}
学习两个方法:
public String toString()
:返回该对象的字符串表示。public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。toString
方法toString
方法的返回该对象的字符串表示: 对象的类型+@+内存地址值
由于toString
方法返回的结果是内存地址,而在开发中, 对象的属性得到相应的字符串表现形式,所以重写
如果不希望使用toString
的默认行为,对它进行覆盖重写
public class Person{
private String name;
private int age;
@Override
public String toString(){
return "Person{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ‘}‘;
}
//省略构造器, Getter, Setter
}
在IntelliJ IDEA
中,可以点击Code
菜单中的Generate...
,也可以使用快捷键alt+insert
,点击toString()
选项。选择需要包含的成员变量并确定。
判断这两个对象是否是相同的, 返回一个bool值
如果没有覆盖重写equals
方法,那么Object类中默认进行 == 运算符的对象地址比较, 只要不是同一个对象,结果必然为false。
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法
import java.util.Objects;
public class Person{
private String name;
private int age;
// 多态的弊端: 无法使用子类特有的内容(属性和方法) 解决: 使用向下转型,强制转换增加判断,防止出现classcastException
//重写
public boolean equals(Object o){
// 如果对象地址值一样,则相同, 传递的是this本身
if(this==o) return true;
// 如果参数为空,或者类型信息不一样,则认为不同
// getClass() 返回值是Class类型 反射技术
if(o==null||getClass()!=o.getCLass()) return false;
// 转换当前的类型
// 判断当前的类型
// getClass()!=o.getCLass()等效于下面的判断
if(o instanceof Person){
Person person = (Person) o;
// 要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果
return age == person.age && Objects.equals(name, person.name);
// Objects.equals方法: 两个对象进行比较,防止出现空指针异常
};
}
}
参数:object obj:可以传递任意的一个对象
== 比较运算符,返回的是一个bool值, true或者是false
基本类型比较: 比较的是值
引用数据类型: 比较的是两个对象的地址值
毫秒值得作用: 可以对时间和日期进行计算
2099-01-01 到2088-01-01中间多少天? 把日期换成毫秒进行计算,计算完毕,将毫秒转为时间
当前的日期: 2019-07-24
时间远点:1970.1.1 0:00:00
就是计算当前日期到时间远点经历多少毫秒
public class Demo01{
public static void main(String[] args){
System.out.println(System.currentTimeMillis()); // Long类型值
// 获取当前的时间
}
}
注意事项:中国属于东八区,会把时间增加八个小时, 时间远点是一个英国格林时间
date类的空参数构造方法
import java.util.Date;
public class Demo{
public static void main(String[] args){
demo01();
}
/*Date() 获取当前系统的日期和时间
*/
private static void demo01(){
Date date = new Date();
System.out.println(date);
}
}
date类的有参数构造
import java.util.Date;
public class Demo{
public static void main(String[] args){
demo01;
}
private static void demo01(){
/*
Date类的带参数构造,传入一个long类型, 传递毫秒值,把毫秒值转成date
Date(long date)
*/
date = new Date(113134141442L);
System.out.println(date);
}
}
long getTime(): 把日期转为毫秒值
public class Demo{
public static void main(String[] args){
demo01();
}
private static void demo01(){
Date date = new Date();
long time = date.getTime();
System.out.println(time);
}
}
时间格式化日期的抽象类
作用: 格式化解析日期
// 需求在页面上显示自己的系统时间
public class Demo{
public static void main(String[] args){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时: mm分: ss秒");
String time - sdf.format(new Date()); //格式化
System.out.println(time);
}
}
// 让用户输入自己的生日,计算活了多少天
public class Demo{
public static void main(String[] args){
// 用户键盘输入自己的出生年月日
Scanner sc = new Scanner(System.in);
System.out.println("请输入你出生的年月日");
String birthday = sc.nextLine();
// 把string类型的解析成为Date对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(birthday); // 解析日期
long time1 = date1.getTime(); //获取时间戳
// 获取当前的时间
Date date2 = new Date();//现在的时间
long time2 = date2.getTime(); // 当前的时间戳
long time = (time2-time1)/1000/3600/24;
Ststem.out.println(time);
}
}
个人理解:该类用来表示一些日历的字段,可以使用该类对字段进行转换和计算
注意:Calendar类是一个抽象类,不能创建对象,但是提供了获取对象的方式。
int get(int field)
获取字段值
void set(int field, int value)
设置字段值
void add(int field, int amount)
计算字段值
public class Demo{
public static void main(String[] args){
// 获取Calendar对象,其实本质就是返回的是Calendar的子类对象
Calendar c = new Calendar.getInstance();
// 休改Calendar的时间
c.set(Calendar.YEAR, 2019);
c.set(Calendar.MONTH, 7);
c.set(Calenadr.DAY_OF_MONTH,28);
// 一步操作
c.set(2019,8,24);
c.add(Calenadr.YEAR, -1); //减一年
// 获取年
int year = c.get(Calenadr.YEAR);
// 获取月
int month = c.get(Calenadr.MONTH);
// 过去日期
int day = c.get(Calenadr.DDY_OF_MONTH);
System.out.println(year+"年"+month+"月"+day+"日");
}
}
由于字符串类对象内容不可变, 所以每次在字符串拼接的时候,总会在内存中创建一个新的对象
public class Hello{
public static void main(String[] args){
String s = "hello";
s += "world";
System.out.println(s);
}
}
StringBulider类是一个容器, 容器里面可以有很多的字符串,可以对其中的字符串进行操作
public StringBuilder():
构造一个StringBuilder的容器public StringBuilder(String str):
构造一个StringBuilder的容器,将字符串添加进去public class StringBuilderDemo{
public static void main(String[] args){
StringBuilder sb1 = new StringBuilder();
System.out.println(sb1); //空白
StringBuilder sb2 = new StringBuilder("liu");
System.out.println(sb2); // liu
}
}
public StringBuilder append()
: 添加任意数据的字符串形式public StringBuilder toString()
:将当前的StringBuilder对象转换为String对象public class Demo{
public static void main(String[] args){
// 创建对象
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = sb1.append("hello");
// 进行对比
System.out.println("sb1"+sb1);
System.out.println("sb2"+sb2);
System.out.println(sb1=sb2); //true
// 可以添加任何数据
sb1.append("world");
sb1.append(true);
sb1.append(100);
// 实际开发中可以链式编程
sb1.append("world").append("true").append(100);
System.out.println(sb1);
}
}
// 备注:StringBuilder已经覆盖了重写了Object当中的toString方法
// 通过toString方法,StringBuilder对象转为不可变的String对象
public class Demo{
public static void main(String[] args){
//链式创建
StringBuilder sb = new StringBuilder("hello").append("world").append(10);
// 调用方法
String s = sb.toString();
System.out.println(s);
}
}
基本类型 | 对应的包装类(位于java.lang中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
基本数值———>包装类型
Integer i = new Integer(4); //使用构造函数
Integer ii = Integer.valueOf(4); //使用包装类中的valueOf方法
包装对象———>基本数据
int num = i.intValue();
Integer i = 4; // 装箱 Integer i = Integer.valueOf(4);
i = i+5;// 拆箱 i.intValue() + 5;
// 完毕后,继续装箱
基本类型转换String总共有三种方式,查看课后资料可以得知,这里只讲最简单的一种方式:
基本类型直接与””相连接即可;如:34+""
除了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基本类型。代码使用(仅以Integer类的静态方法parseXxx为例)如:
public class Demo18WrapperParse {
public static void main(String[] args) {
int num = Integer.parseInt("100");
}
}
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出
java.lang.NumberFormatException
异常。
标签:word 不可变 时间格式 格式化 覆盖 day 包含 本质 时间格式化
原文地址:https://www.cnblogs.com/liudemeng/p/11357110.html