常用类
Posted liudemeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用类相关的知识,希望对你有一定的参考价值。
1.Object
类
1.概述
java.lang.Object
类是java
语言中的超级父类
如果一个类没有指定父类,则继承与Object类
public class MyClass /*extends Object*/
// 代码块
学习两个方法:
public String toString()
:返回该对象的字符串表示。public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。
2.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()
选项。选择需要包含的成员变量并确定。
3.equals方法
方法摘要
判断这两个对象是否是相同的, 返回一个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方法: 两个对象进行比较,防止出现空指针异常
;
4.equals和等等于运算符区别
参数:object obj:可以传递任意的一个对象
== 比较运算符,返回的是一个bool值, true或者是false
基本类型比较: 比较的是值
引用数据类型: 比较的是两个对象的地址值
2.Date类
1.概述
- java.util.Date: 表示日期和时间的类
- 类Date表示特定的瞬间精确到毫秒
毫秒值得作用: 可以对时间和日期进行计算
2099-01-01 到2088-01-01中间多少天? 把日期换成毫秒进行计算,计算完毕,将毫秒转为时间
2.获取当前日期
-
当前的日期: 2019-07-24
-
时间远点:1970.1.1 0:00:00
-
就是计算当前日期到时间远点经历多少毫秒
public class Demo01 public static void main(String[] args) System.out.println(System.currentTimeMillis()); // Long类型值 // 获取当前的时间
注意事项:中国属于东八区,会把时间增加八个小时, 时间远点是一个英国格林时间
3.构造方法
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);
4.常用的方法
-
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);
3.DateFormat类
时间格式化日期的抽象类
作用: 格式化解析日期
1.成员方法
1.String format(Date date)
- 按照指定的模式,吧Date日期格式化为符合模式的字符串
2.Date parse(String source)
- 把符合模式的字符串,解析Date日期
- java.txt.SimpleDateFormat 继续了DateFormat
// 需求在页面上显示自己的系统时间
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);
4.Calendar类
个人理解:该类用来表示一些日历的字段,可以使用该类对字段进行转换和计算
注意: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+"日");
5.System类
- public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length) 把原数组中的指定元素,复制到目标数组中 参数解释: src - 源数组。 srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目标数据中的起始位置。 length - 要复制的数组元素的数量。
- static void exit(int status) 退出虚拟机
- static void gc() 运行垃圾回收器(尽力回收没有用的对象) Student s=new Student(); s=null;//当s=null时,前面的Student对象就变成了垃圾
- static long currentTimeMillis() 获取当前系统时间的毫秒值(距离1970年1月1日有多少毫秒) 注意:1秒=1000毫秒
6.StringBuilder类
字符串拼接问题
由于字符串类对象内容不可变, 所以每次在字符串拼接的时候,总会在内存中创建一个新的对象
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对象
append方法
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方法
// 通过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);
7.包装类
概述
基本类型 | 对应的包装类(位于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
基本类型转换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基本类型。
代码使用(仅以Integer类的静态方法parseXxx为例)如:
public class Demo18WrapperParse
public static void main(String[] args)
int num = Integer.parseInt("100");
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出
java.lang.NumberFormatException
异常。
以上是关于常用类的主要内容,如果未能解决你的问题,请参考以下文章