javase 04 常用类

04 常用类

Object

Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入;Object类是所有Java类的根基类,如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

包装类

JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中。例如使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型。为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为 包装类(Wrapper Class) 。

基本数据类型包装类
byteByte
booleanBoolean
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble

自动装箱和自动拆箱

基本类型和包装类进行自动的互相转换

自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类 型的包装中。

自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再 去调用intValue()和doubleValue()方法。

常量池

常量池大体可以分为:静态常量池,运行时常量池。

  • 静态常量池 存在于class文件中,比如经常使用的javap -verbose中,常量池总是在最前面把?
  • 运行时常量池呢,就是在class文件被加载进了内存之后,常量池保存在了方法区中,通常说的常量池 值的是运行时常量池。所以呢,讨论的都是运行时常量池

初窥常量池:已经提前创建好一些特殊属性的值。需要时直接给。

在常量池里就直接用,不在就要新建一个。

例如:一个班级里有张三,当外界需要这个班级的张三就直接调用。

若这个班没张三就去创建一个张三。

字符串相关类

String类 对象的创建

每一次赋值都是新建对象。 字符串拼接需要2n-1次对象的创建。

常用操作

String类的下述方法能创建并返回一个新的String对象:

concat, replace, substring, toLowerCase, toUpperCase, trim

提供查找功能的有关方法: endsWith, startsWith, indexOf,,lastIndexOf

提供比较功能的方法: equals, equalsIgnoreCase, compareTo

其它方法:

charAt ,length

public static String valueOf(…) 可以将基本类型数据转换为字符串

String与StringBuffer 与StringBuilder

StringBuffer 和StringBuilder非常类似,均代表可变的字符序列,而且方法也一样。

(StringBuilder被设计用作 StringBuffer 的一个简易替换,建议优先采用该类,因为

在大多数实现中,它比 StringBuffer 要快。)

这三个类的主要区别在两个方面:运算速度(运算性能或执行效率)和线程安全性。

String 是字符串常量,每次赋值地址都会改变。final修饰的类

StringBuffer与StringBuilder:是字符串变量,每次赋值地址不会改变,改变的是指向的内容。

运算速度:StringBuilder > StringBuffer > String
String str = "abc";
System.out.println(str);
str = str + "de";
System.out.println(str);

String str = "abc" + "de";
StringBuilder stringBuilder = new StringBuilder().append("abc").append("de");
System.out.println(str);
System.out.println(stringBuilder.toString());

StringBuffer s=new StringBuffer("ppl");
s.append(1);
System.out.println(s.toString());
线程安全性:StringBuffer String

而StringBuilder的方法没有该关键字修饰,所以不能保证线程安全性。是JDK1.5新增的,该类提供一个与StringBuffer兼容的 API,但不能保证同步,所以在性能上较高。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

线程不安全:StringBuilder

StringBuffer中大部分方法由synchronized关键字修饰,在必要时可对方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致,所以是线程安全的。类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

总结

  • String:适用于少量的字符串操作。

  • StringBuilder:适用于单线程下在字符串缓冲区进行大量操作。

  • StringBuffer:适用于多线程下在字符串缓冲区进行大量操作。

时间处理相关类

作为与我们息息相关的日期,在开发中也是很常见的。在程序中,日期的存储也是个数字,是个长整型的数字。0代表1970年1月1日 00:00:00,而我们处于东八区,所以为1970年1月1日 08:00:0 ,往前推,负数表示之前的时间,往后算正数表示之后的时间。

java 8之前的常用时间相关类

Date

常见方法
System 系统类currentTimeMillis(): 当前时间
Date 日期类new Date() :当前时间
new Date(指定时间):指定时间
getTime(): 获取时间
setTime(指定时间):设置指定时间
SimpleDateFormatnew SimpleDateFormat(模板) format() : 格式化为字符串
parse():转成日期
		Date date=new Date();
        System.out.println(date);
        System.out.println(System.currentTimeMillis());
        SimpleDateFormat format=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        System.out.println(format.format(date));

		Date parse = format.parse("2020-11-11 11:12:11"); //这里有异常
        System.out.println(parse);

java 8 日期相关的api

JDK8的日期|时间 只是为我们提供了更加简便的操作,里面的对象是不可变的。单独给了年, 月 , 日期,时间,日期和时间的类,有一些方法of() 方法可以很方便地指定日期还提供了对两个日期|时间 的计算。

  • LocalTime:代表时间,可以通过时、分、秒来构造

  • LocalDate:代表日期,可以通过年、月、日构造,并且年/月/日的值都是符合日常使用习惯的

  • LocalDateTime:表示日期和时间,可以通过年、月、日、时、分、秒来构造,也可以通过一个LocalDate和LocalTime来构造。可以调用with、plus、minus方法来修改LocalDateTime对象,但是修改后原对象的值不变,会返回一个新的对象

格式化

​ DateTimeFormatter 类,它的使用也非常简单,调用静态方法ofPattern 生成指定匹配格式的实例;调用实例的 format 方法可以将TemporalAccessor 对象转换成指定格式的日期时间字符串,实际上这个TemporalAccessor 是个接口,前面介绍的LocalTime/LocalDate/LocalDateTime 都间接实现了这个接口;调用实例的parse 方法可以将时间日期字符串转换为 TemporalAccessor 对象,进而得到对应的 LocalTime/LocalDate/LocalDateTime 对象

java 8 的时间相关类

将时间分割封装成类,有year,month,day,hour,minute,seconds类等。

也可以转化成时,分,秒,天。计数单位,从而简便的比价日期前后。不需要考虑特殊的时段,大月小月,以及闰年 平年。

也增加Zoned(时区)

类中方法
LocalDateLocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日。 也可以访问其他日期字段,例如日期,星期几和星期。 例如,值“2007年10月2日”可存储在LocalDate
LocalDateTimeLocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年 - 月 - 日 - 时 - 分 - 秒。 也可以访问其他日期和时间字段,例如日期,星期几和星期。 时间表示为纳秒精度。 例如,值“2007年10月2日在13:45.30.123456789”可以存储在LocalDateTime
Period这个类以年,月和日为单位建立数量或时间量。请参阅Duration的等效于此类的时间。可以求两个时间的差值。
Duration该类以秒和纳秒为单位建立数量或时间量。 它可以使用其他基于持续时间的单位进行访问,例如分钟和小时。 此外, DAYS单位可以使用,并被视为完全等于24小时,因此忽略了夏令时效应。 请参阅Period相当于此类的日期。
ChronoUnit这组单位提供基于单位的访问来操纵日期,时间或日期时间。 可以通过实施TemporalUnit扩展标准的单位。

老哥去看API吧,上面几个类,比较像工具类。

public class Test {
    public static void main(String[] args) {
        LocalDateTime now=LocalDateTime.now();
        System.out.println(now);

        //牛啊,串行修改属性。
        LocalDateTime time=now.withSecond(50).withMinute(20).withHour(11).withDayOfMonth(12).withMonth(12).withYear(2000);
        System.out.println(time);

        //判断时间前后
        System.out.println(time.isBefore(now));
        System.out.println(time.isAfter(now));

        //时间差值
        Period period = Period.between(time.toLocalDate(),now.toLocalDate());
        System.out.println(period);

        Duration between1 = Duration.between(time, now);
        System.out.println(between1);
        System.out.println(between1.toDays());

        //与时间做单位
        long between = ChronoUnit.DAYS.between(time, now);
        System.out.println(between);

    }
}

Math类

java.lang.Math 提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为 double 型。

System.out.println(Math.abs(-10)); //10 获取-10的绝对值 
System.out.println(Math.pow(3, 2)); //9.0 3的平方 
System.out.println(Math.max(21, 12));//21 大数 
System.out.println(Math.sqrt(9)); //3.0 开方 
System.out.println(Math.ceil(15.2)); //16.0 向上取整
System.out.println(Math.floor(9.9)); //9.0 向下取整 
System.out.println(Math.ceil(-15.2)); //-15.0 
System.out.println(Math.floor(-9.9)); //-10.0 
System.out.println(Math.round(1.3)); // 1 四舍五入

File类

java.io.File类:文件和目录路径名的抽象表示形式。

File 类的常见构造方法: public File(String pathname)

以 pathname 为路径创建 File 对象,如果 pathname 是相对路径,则默认的当前路径在系 统属性 user.dir 中存储。 File 的静态属性 separator 存储了当前系统的路径分隔符。

文件夹 与文件 都抽象为File,构建 File 的方式**

  • File(String pathname) ; 可以是绝对路径,也可以是相对路径(盘符)

  • File(File parent, String child)

  • File(String parent, String child) ; 抽象一个指定路径下的 文件

分割符:静态常量

  • 路径分隔符: ; pathSeparator

  • 目录分隔符: \ / separator

常见方法

	public boolean canRead()//可读
    public boolean canWrite()//可写
    public boolean exists() //测试此抽象路径名表示的文件或目录是否存在。
    public boolean isDirectory()//测试此抽象路径名表示的文件是否为目录。
    public boolean isFile()//测试此抽象路径名表示的文件是否为普通文件。
    public boolean isHidden()//测试此抽象路径名命名的文件是否为隐藏文件。
    public long lastModified()//返回此抽象路径名表示的文件上次修改的时间。 
    public long length() //返回由此抽象路径名表示的文件的长度。
    public String getName()//返回由此抽象路径名表示的文件或目录的名称。 
    public String getPath()//将此抽象路径名转换为路径名字符串。 
    public String getAbsolutePath()//返回此抽象路径名的绝对形式。 
    public boolean createNewFile() //当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
    public boolean mkdir()  //创建由此抽象路径名命名的目录。
    public boolean mkdirs() //创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
    public boolean delete()//删除
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值