java入门(Object类、常用API)

    技术2022-07-10  148

    Object类、常用API

    Object类

    Object类的概述

    Object类是所有类型的超类,其中Object中存在的11个方法,所有类都有继承。

    一个类如果直接继承了一个父类,最终也会继承Object。

    一个类没有直接继承一个父类,默认继承Object类

    Object中toString方法

    Object中toString方法的作用,为了将对象变成字符串形式【就是属性值的字符串拼接】

    public String toString()

    Object中的源码: 默认打印地址,实际使用时,需要进行重写【Alt+Insert】

    /* 1.打印对象时,会默认调用toString方法,来自Object,默认的实现就是打印地址信息。 2.如果需要打印对象,显示对象内属性值内容,可以重写toString方法 */ public class Demo01 { public static void main(String[] args) { Student stu = new Student("文章",18); System.out.println("stu = " + stu); String str = stu.toString(); System.out.println("str = " + str); //没有重写前: //com.itheima.demo01toString.Student@48140564 //重写toString后: //Student{name='文章', age=18} } } public class Student extends Object { private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } /* @Override public String toString() { return name+"::"+age; }*/ //Alt+Insert @Override public String toString() { final StringBuilder sb = new StringBuilder("Student{"); sb.append("name='").append(name).append('\''); sb.append(", age=").append(age); sb.append('}'); return sb.toString(); } }
    Object中equals方法

    equals方法的作用

    用来比较两个对象内容是否相同。

    Object中源码是怎样的,原始功能? 原始功能:默认比较地址

    是否满足子类需要,如果不满足子类需求,如何进行重写。

    不满足,需要重写,Alt+Insert生成:

    @Override public boolean equals(Object o) { if (this == o) return true; // 1)如果地址相同,内容一定相同 //地址不同的逻辑 if (o == null || this.getClass() != o.getClass()) return false; // 2)保证类型一致,否则不同 //类型一致 //3)比较属性值是否一样 Student student = (Student) o; return age == student.age //比较属性age值是否相同 && Objects.equals(name, student.name); //属性 name值是否相同 }

    【例如】

    public class Demo01 { public static void main(String[] args) { Student stu1 = new Student("文章", 18); Student stu2 = new Student("文章", 18); System.out.println(stu1==stu2); //地址不同:false boolean equals = stu1.equals(stu2);//内容是否相同 System.out.println("equals = " + equals);// true } }

    Date类

    导包

    improt java.util.Date;

    创建对象

    public Date():从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date):将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

    调用方法

    public long getTime() 把日期对象转换成对应的时间毫秒值。public void setTime(long time) 把方法参数给定的毫秒值设置给日期对象

    【代码实践】

    /* Date:表示时间的瞬间,精确到毫秒 */ public class Demo01 { public static void main(String[] args) { //1.创建对象 //无参构造:获取当前时间 Date d1 = new Date(); System.out.println("d1 = " + d1);//Tue Aug 06 15:58:17 CST 2019 //CST: China Stander Time 中国标准时间 //有参构造:指定毫秒时间 Date d2 = new Date(1000000000L); System.out.println("d2 = " + d2); //2.调用方法 //public long getTime():获取Date对象的毫秒值 long time = d1.getTime(); System.out.println("time = " + time); //public void setTime(long t): 给Date对象指定毫秒值 d1.setTime(1365078609446L); System.out.println("d1 = " + d1); } }

    日期格式化 DateForamt[SimpleDateFormat]

    日期格式化类有什么功能

    能够将日期对象与文本进行相互转化

    格式化: 按照指定格式,去将Date对象转化为String对象解析:按照指定格式,去将String对象转化为Date对象

    如何创建日期格式化对象

    DateFormat是一个抽象类,不能直接创建对象,使用其子类SimpleDateFormat 参数:pattern就是【指定格式】解析和格式化都要参考的格式

    如何构建格式pattern字符串:

    2019080616:18:18:100 具体的时间 yyyy年MM月dd日 HH:mm:ss:SSS 时间所用的格式 String pattern = "yyyy年MM月dd日 HH:mm:ss:SSS"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); 常见的格式: String pattern = "yyyy-MM-dd HH:mm:ss:SSS"; String pattern = "yyyy/MM/dd HH:mm:ss:SSS"; String pattern = "yyyy.MM.dd HH:mm:ss:SSS"; String pattern = "yyyy年MM月dd日 HH:mm:ss:SSS";

    3. 如何使用日期格式化类的方法

    格式化:Date–>String

    String format(Date date)

    解析:String–>Date

    Date parse(String)

    【代码实践】

    public class Demo01 { public static void main(String[] args) throws ParseException { Date d1 = new Date(); System.out.println("d1 = " + d1);//Tue Aug 06 16:29:41 CST 2019 //日期的格式化 //1.创建日期格式化对象 String pattern = "yyyy年MM月dd日 HH:mm:ss:SSS"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); //2.调用格式化的方法 //format String str = sdf.format(d1); System.out.println("str = " + str); //2019年08月06日 16:29:41:451 //日期的解析 String strTime = "2018年08月08日 12:12:12:12"; //3.调用解析的方法进行解析日期 //parse Date d2 = sdf.parse(strTime); System.out.println("d2 = " + d2); //Wed Aug 08 12:12:12 CST 2018 } }

    Calendar类得使用

    会获取Calendar对象

    Calendar是一个抽象类,内部有一个静态方法可以获取日历对象

    public static Calendar getInstance():获取一个日历对象

    2. 会使用常见的方法

    public int get(int field):返回给定日历字段的值。public void set(int field, int value):将给定的日历字段设置为给定值。public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

    【代码实践】

    /* - public int get(int field):返回给定日历字段的值。 - public void set(int field, int value):将给定的日历字段设置为给定值。 */ public class Demo01 { public static void main(String[] args) { //获取日历对象 Calendar cal = Calendar.getInstance(); //System.out.println("cal = " + cal); //常用方法 //- public int get(int field):返回给定日历字段的值。 int year = cal.get(Calendar.YEAR); System.out.println("year = " + year); int month = cal.get(Calendar.MONTH); System.out.println("month = " + (month+1)); //7 月从0开始,使用时可以+1 int day = cal.get(Calendar.DAY_OF_MONTH); System.out.println("day = " + day); int hour = cal.get(Calendar.HOUR_OF_DAY); System.out.println("hour = " + hour); int min = cal.get(Calendar.MINUTE); System.out.println("min = " + min); int sec = cal.get(Calendar.SECOND); System.out.println("sec = " + sec); int week = cal.get(Calendar.DAY_OF_WEEK); System.out.println("week = " + week);// 周:1表示周日,2表示周一 .... System.out.println("week = " + (week-1));// 一般-1 ,周:0表示周日,1表示周一 .... System.out.println("======="); //- public void set(int field, int value):将给定的日历字段设置为给定值。 cal.set(Calendar.YEAR, 2008); System.out.println(cal.get(Calendar.YEAR)); } } /* - public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。 - public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。 */ public class Demo02 { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); //时间偏移 // void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。 // field:时间字段信息, 年:Calendar.YEAR // amount:时间偏移量 正数:往未来偏移时间 ,负数:往过去偏移时间 //10000天以后,是星期几 cal.add(Calendar.DAY_OF_MONTH, 10000); int week = cal.get(Calendar.DAY_OF_WEEK); System.out.println("week = " + week);// 7 // Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。 Date d1 = cal.getTime(); System.out.println("d1 = " + d1); //Date类中也有一个getTime //long getTime() long time = d1.getTime(); System.out.println("time = " + time); } }

    获取任意年份得2月天数

    /* 获取任意年份得2月天数 */ public class Demo03Practice { public static void main(String[] args) { //1.键盘录入一个年份 Scanner sc = new Scanner(System.in); System.out.println("请输入一个年:"); int year = sc.nextInt(); //2.获取一个日历对象,将该年的3月1日设置进去 Calendar cal = Calendar.getInstance(); cal.set(year, 2, 1); //3月1日 //3.往前偏移1天,得到该年的2月的最后一天,是几号就有几天 cal.add(Calendar.DAY_OF_MONTH,-1 ); int days = cal.get(Calendar.DAY_OF_MONTH); System.out.println("days = " + days); } }

    Math类

    public class Demo01 { public static void main(String[] args) { System.out.println(Math.abs(-3.14)); //3.14 System.out.println(Math.abs(3.14)); //3.14 System.out.println(Math.ceil(3.14)); //4.0 System.out.println(Math.floor(3.14)); //3.0 System.out.println(Math.ceil(-3.14)); //-3.0 System.out.println(Math.floor(-3.14)); //-4.0 System.out.println(Math.round(3.14)); // 3 System.out.println(Math.round(3.6)); // 4 System.out.println(Math.max(100, 200));//200 System.out.println(Math.min(100, 200));//100 System.out.println(Math.pow(2, 10)); // 1024.0 //取[0.0,100.0) System.out.println(Math.random()*100); } }

    System类

    public static long currentTimeMillis() :获取当前时间的毫秒值

    计算程序运行的时间:

    public class Demo01 { public static void main(String[] args) { //在控制台输出1-10000,计算这段代码执行了多少毫秒 long t1 = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { System.out.println(i); } long t2 = System.currentTimeMillis(); System.out.println(t2-t1); } }

    包装类型的介绍及自动装箱和自动拆箱的介绍

    包装类型就是基本数据类型所对应的引用数据类型。

    以Integer为例:

    /* public Integer(int value)根据 int 值创建 Integer 对象(过时) public Integer(String s)根据 String 值创建 Integer 对象(过时) public static Integer valueOf(int i)返回表示指定的 int 值的 Integer 实例 public static Integer valueOf(String s)返回一个保存指定值的 Integer 对象 String public static Integer valueOf(String s,int radix) 指定进制解析字符串,得到一个十进制数据 */ public class Demo01 { public static void main(String[] args) { //构造方法 Integer i1 = new Integer(100); System.out.println("i1 = " + i1); Integer i2 = new Integer("100"); System.out.println("i2 = " + i2); //静态方法 Integer i3 = Integer.valueOf(100); System.out.println("i3 = " + i3); Integer i4 = Integer.valueOf("100"); System.out.println("i4 = " + i4); Integer i5 = Integer.valueOf("1111", 2); //将字符串"1111"使用二进制的方式解析得到一个十进制数据 System.out.println("i5 = " + i5); //15 } }

    基本数据类型和包装类型可以发生自动转化:

    自动装箱:把基本数据类型变成引用数据类型

    自动拆箱:把引用数据类型变成基本数据类型

    基本数据类型和字符串之间的转换

    public class Demo02 { public static void main(String[] args) { //基本数据类型转String类型 int i = 100; //1.直接拼接空串 String str1 = i + ""; //2.String的valueOf方法 String str2 = String.valueOf(i); System.out.println("str1 = " + str1); System.out.println("str2 = " + str2); //将字符串变成基本数据类型 String num = "111"; //1.通过parseXxx方法 int i2 = Integer.parseInt(num); System.out.println("i2 = " + i2); //2.先转化为包装类型 int i3 = Integer.valueOf(num); System.out.println("i3 = " + i3); //注意:进行字符串转化为对应的基本类型数据是,要保证字符串的合法性,否则会报错 //int xxoo = Integer.parseInt("XXOO"); //System.out.println("xxoo = " + xxoo); } }
    Processed: 0.013, SQL: 9