java语法进阶Day01 Object类、时间日期类、System类、装箱与拆箱、字符串与基本类型的互相转换

Day01

第一章 Object类

特点:

是所有类的父类,如果没有额外声明,在构造类的时候默认继承Object类如:

public class AB /* extends Object */ {
...
}
  • toString 方法的重写

Object类默认的toSting方法

Public String toString(Object arg0),如果是基本数据类型输出基本数据,如果是对象则输出项目名称+对象类型+@+地址。

int i = 5;
System.out.println(i);// 5
Person p = new Person();
System.out.println(p);//jinjieDay01.person@15db9742
class Text{
private String name = "sss";
@Override
public String toString(Object o){
return name;
}//改写toString 方法,返回某个成员变量的名称;
}
  • equals方法的重写

    Object类中的equals方法,默认比较两个对象的地址,只要不是同一个对象,则返回false;

    改写:

    class Text{
        private String name = "test";
        @Override
        public boolean equals(Obeject o){
            if(this== o){
                return true;
            }//如果地址相同,则认为一样(考虑了空指针的情况)
            if(o == null || getClass() != o.getClass){
                return false
            }//(如果只有一个为空,或是类型不一样则不一样)
            Text test = (Text)o;//向下造型
            return o.name == this.name;//成员变量name的字符串内容一样则认为相同 
        }
    }
    

    Objects类的equals方法,相比于Object类的优点在于,它优化了空指针异常:

    public static boolean equals(Object a, Object b) {  
        return (a == b) || (a != null && a.equals(b)); 
    }
    

第二章 时间日期类

2.1 Date类

  • java.util.Date表示特定的瞬间,精确到毫秒
构造方式:
  • public Date()
  • public Date(long date)

...
public static void main(Object arg0){
    System.out.println(new Date());// Tue Jan 16 14:37:35 CST 2018
    System.out.println(new Date(0L))// Thu Jan 01 08:00:00 CST 1970
}
...

Date类中已经自行重写了toString方法,此类中的多数方法已经过时

public long getTime()把日期对象转换为对应的毫秒值。

2.2DateFormat类

构造方式

DateFormat为抽象类,不能直接构造,而是用它的子类来构造:

DateFormat date = new SimpleDateFormat("yyyy年MM月dd日hh小时mm分ss秒");//采用一个字符串格式化产生一个对象

符号(区分大小写)含义
y
M
d
h小时
m
s
  • 两个常用方法
    • public Date parse(String str) 将字符串类型转换为一个日期对象
    • public String format(Date date)将日期类型转换为字符串

2.3 练习

请使用日期时间相关的API,计算出一个人已经出生了多少天。

思路:

1.获取当前时间对应的毫秒值

2.获取自己出生日期对应的毫秒值

3.两个时间相减(当前时间– 出生日期)

public static void main(String[] args) throws ParseException {
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date dt1 = format.parse("2020-06-08");
		Date dt2 = format.parse("1997-12-25");
		Long a =60*1000*60*24*365L;
		System.out.println((double)(dt1.getTime()-dt2.getTime())/a);
		
		}

2.4 Calendar类

java.util.Calendar是日历类,它的许多方法代替了Date类的方法。

该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

创建对象

Calendar类为抽象类,不能直接创建对象,通过静态方法返回一个子类来创建:
Calendar calendar = Calendar.getInstance(); 使用默认时区和语言环境获得一个日历

常用方法
1. get/set
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);
cal.set(Calendar.YEAR,2000);
2. add

对指定的日历字段值进行加减操作,正值加,负值减;

Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR,5);//增加五年
cal.add(Calendar.MONTH,-2);//倒退两月
3.getTime方法
Calendar cal = Calendar.getInstance();
Data date = cal.getTime();
//cal.getTime()返回一个日期类的对象,而不是时间

第三章 System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。

3.currentTimeMillis

public static long currentTimeMillis()

获取当前系统时间与1970年01月01日00:00点之间的毫秒差值

3.2 arraycopy方法

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。

参数含义
src原数组
srcPos原数组起始位置
dest目标数组
destPos目标数组起始位置
length复制长度
public static void main(String[] args) {
		int [] a = {1,2,3,4,5};
		int [] b= {11,22,33,44,55};
		System.arraycopy(a, 0, b, 1, 2);
		for(int i = 0; i<a.length;i++) {
			System.out.print(b[i]+" ");
		}
    //表示从a数组的0位置开始复制到b数组中,替换b数组中的元素,替换的位置为b数组中第一个位置,共替换2个长度的值。
    输出:11 1 2 44 55 

上述两种方法均为系统级方法,效率很高。

第四章 StringBuilder类

4.1 字符串的拼接

String类在创建之后无法再修改,但是String类的对象可以不断改变指向,从而实现字符串的“改变”。

String a = "Hello";
a += "World!"

上述的操作过程,会在内存中创建出三个对象,分是"Hello"、“World!”、“HelloWorld!”,最后对象a指向"HelloWorld!",这样直接添加的操作不仅耗时,而且浪费空间。

4.2 StringBuilder类介绍

查阅java.lang.StringBuilder的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

StringBuilder是个字符串的缓冲区,即它是一个容器,它的内部有一个数组,将字符串存入数组中,当数组的空位不足时会自动扩容(默认16字符空间)。

构造方法
  • 有参:第一种方式:StringBuilder str = new StringBuilder("test");

    //第二种:
    String a = "test";
    StringBuilder str = new StringBuilder(str);
    
  • 无参StringBuilder str;此时str的值为空

常用方法
  • append

  • StringBuilder str;
    str.append(true);
    str.append("asdjiasdj");
    str.append(123);
    //可以添加任何类型的内容,将其转变为字符串后,加到数组中
    
  • toString public String toString()将当前对象转为String对象

第五章 包装类

5.1 简介

常见的基本数据类型,如整形变量,字符等,使用方便,但是如果想对它们进行一些操作就不够灵活。而引用数据类型的内部就自带一些操作方法。

基本数据类型对应包装类(位于java,.lang中)
intInteger
longLong
charCharacter
booleanBoolean
doubleDouble
floatFloat
byteByte
shortShort

只有int与char的包装类比较特殊,其余基本类型对应的包装类只是把首字母大写。

5.2 装箱与拆箱

  • 装箱:基本类型转换为对应的包装类型

    Integer i = Integer.valueOf(4);

    或者 Integer i = new Integer(4);

  • 拆箱:包装类型转换为对应的基本类型

    int num =i.intValue();

5.3 自动装箱与自动拆箱

从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。

Integer i =4;/*自动装箱过程,首先进行 valueOf(4),再把得到的Integer赋给i*/
i = i+ 4/*先把i拆箱:i.intValue(),然后作4+4,然后再把8装箱,赋给i;*/

5.4基本类型与字符串之间的转换

字符串转为基本类型
  • 采用各类的静态的parse方法,如字符串转换为Integer

    String s ="123";
    Integer i = Integer.parseInt(s);
    

除了Byte类型,其余类型均拥有自己的parse方法。

  • 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基本类型。
基本类型转换为字符串
  • 直接用+”"拼接String s =4+"";
  • 采用各类的toString()方法;
  • 采用String类的静态valueOf方法,如public static String valueOf(Integer i);

如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。例如:

Integer i = Integer.parseInt("36.77");因为字符串内容无法在编译时判断其对应的基本类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值