这里写目录标题

  • 一、常用API
  • 1.1Math
  • 1.1.1Math类概述
  • 1.1.2Math中方法的调用方式
  • 1.1.3Math类的常用方法
  • 1.2System
  • 1.3 Object类的toString方法
  • 1.4 Object类的equals方法
  • 1.5Arrays
  • 二、日期类
  • 2.1Date类
  • 2.1.1Date类概述
  • 2.1.2Date类构造方法
  • 2.2Date类的常用方法
  • 2.3SimpleDateFormat类
  • 2.3.1SimpleDateFormat类概述
  • 2.3.2SimpleDateFormat类构造方法
  • 2.3.3SimpleDateFormat类的常用方法
  • 2.4Calendar类
  • 2.4.1Calendar类概述
  • 2.4.2Calender类常用方法
  • 2.5二月天案例(应用)
  • 三、异常
  • 3.1异常
  • 3.2JVM默认处理异常的方式
  • 3.3try-catch方式处理异常
  • 3.4Throwable成员方法
  • 3.4.1常用方法
  • 3.5编译时异常和运行时异常的区别
  • 3.6throws方式处理异常
  • 3.7throws和throw的区别
  • 3.8自定义异常


一、常用API

1.1Math

1.1.1Math类概述

Math 包含执行基本数字运算的方法

1.1.2Math中方法的调用方式

Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名.进行调用

1.1.3Math类的常用方法

java 不显示null属性_java 不显示null属性

public class Test2 {
    public static void main(String[] args) {
        double a=-13,b=2.1,c=2.9,d=4;
        System.out.println("abs:"+Math.abs(a));
        System.out.println("ceil:"+Math.ceil(b));
        System.out.println("floor:"+Math.floor(c));
        System.out.println("round:"+Math.round(b));
        System.out.println("round:"+Math.round(c));
        System.out.println("max:"+Math.max(b,c));
        System.out.println("min:"+Math.min(b,c));
        System.out.println("pow:"+Math.pow(b,d));
        System.out.println("random:"+Math.random());
    }
}

运行结果:

java 不显示null属性_java_02

1.2System

System类的常用方法 :

java 不显示null属性_数据结构_03

public class SystemDemo {
    public static void main(String[] args) {
        // 获取开始的时间节点
        long start = System.currentTimeMillis();
        for (int i = 1; i <= 10000; i++) {
            System.out.println(i);
        }
        // 获取代码运行结束后的时间节点
        long end = System.currentTimeMillis();
        System.out.println("共耗时:" + (end - start) + "毫秒");
    }
}

1.3 Object类的toString方法

概述:
Object 是类层次结构的根,所有类都直接或者间接的继承自该类,该类所具备的方法,所有类都会有一份

查看方法源码的方式:选中方法,按下Ctrl + B

  • 重写toString方法的方式
  1. Alt + Insert 选择toString
  2. 在类的空白区域,右键 -> Generate -> 选择toString
  • toString方法的作用:
  • 以良好的格式,更方便的展示对象中的属性值

toString方法是Object类中常用的一个方法,使用时有以下两种情况:(1)默认情况(未被重写的时候)
会默认返回:全类名(包名+类名)+@+哈希值的十六进制
在Object类中toString方法的源码是这样定义的

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

(2)被重写的情况
一般情况下,我们经常会重写toString方法来打印或者拼接对象的属性
重写后,默认是把对象的属性输出
在IDEA中重写toString的快捷键是alt+insert -->toString,重写的默认toString方法代码如下

class Student{
    private String name;
    private int age;
    private String job;//定义了Student类的属性,来看toString方法返回的东西

    public Student(String name, int age, String job) {
        this.name = name;
        this.age = age;  //构造器
        this.job = job;
    }
    //重写toString方法,输出对象的属性

    @Override
    public String toString() {  //这是输出对象属性的toSring方法,当然也可以自己更改
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", job='" + job + '\'' +
                '}';
    }
}

注意细节:当输出一个对象时,toString方法默认被调用
比如面(2)中的代码,如果在main函数中创建一个Student类的student对象,输出student的时候会默认调用toString方法

System.out.println(student);  //两行代码等价
System.out.println(student.toString());

1.4 Object类的equals方法

public boolean equals(Object obj)指示某个其他对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
基本数据类型:比较的是值
引用数据类型:比较的是两个对象的地址值

  • equals方法的作用
  • 用于对象之间的比较,返回true和false的结果
  • 举例:s1.equals(s2); s1和s2是两个对象
  • 重写equals方法的场景
  • 不希望比较对象的地址值,想要结合对象属性进行比较的时候。
  • 重写equals方法的方式
  1. alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可
  2. 在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。

1.5Arrays

常用方法:

java 不显示null属性_数据结构_04


工具类设计思想

1、构造方法用 private 修饰

2、成员用 public static 修饰

public class Test2 {
    public static void main(String[] args) {
        int[] a={5,8,1,6,4};
        System.out.println(Arrays.toString(a));
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

运行结果:

java 不显示null属性_算法_05

二、日期类

2.1Date类

2.1.1Date类概述

Date 代表了一个特定的时间,精确到毫秒

2.1.2Date类构造方法

java 不显示null属性_java_06

public class DateDemo01 {
    public static void main(String[] args) {
        //public Date():分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
        Date d1 = new Date();
        System.out.println(d1);

        //public Date(long date):分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
        long date = 1000*60*60;
        Date d2 = new Date(date);
        System.out.println(d2);
    }
}

运行结果:

java 不显示null属性_算法_07


北京时间:

java 不显示null属性_java_08

2.2Date类的常用方法

java 不显示null属性_java_09

public static void main(String[] args) {
        //创建日期对象
        Date d = new Date();

        //public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
        System.out.println(d.getTime());
        System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");

        //public void setTime(long time):设置时间,给的是毫秒值
//        long time = 1000*60*60;
        long time = System.currentTimeMillis();
        System.out.println(time);
        d.setTime(time);

        System.out.println(d);
    }

运行结果:

java 不显示null属性_算法_10

2.3SimpleDateFormat类

2.3.1SimpleDateFormat类概述

SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

2.3.2SimpleDateFormat类构造方法

java 不显示null属性_数据结构_11

2.3.3SimpleDateFormat类的常用方法

  • 格式化(从Date到String)
  • public final String format(Date date):将日期格式化成日期/时间字符串
  • 解析(从String到Date)
  • public Date parse(String source):从给定字符串的开始解析文本以生成日期
public class Test2 {

    public static void main(String[] args) throws ParseException {
        //创建日期对象
        Date d = new Date();
        System.out.println(d);//d为当前时间
        SimpleDateFormat sdf = new SimpleDateFormat();//默认模式
        System.out.println(sdf);
        String s=sdf.format(d);
        System.out.println(s);//将日期格式化成默认模式的日期/时间字符串
        System.out.println("--------------------------");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf2);
        String s1=sdf2.format(d);
        System.out.println(s1);//将日期格式化成指定模式的日期/时间字符串
        System.out.println("----------------------------");
        String s2="2048-08-09 11:11:11";
        Date dd=sdf.parse(s);//默认格式解析字符串(指定格式的字符串会报错)
        System.out.println(dd);
        Date dd1=sdf2.parse(s2);//指定格式解析字符串(字符串需要指定格式(与指定格式相同格式))
        System.out.println(dd1);
    }
}

运行结果:

java 不显示null属性_算法_12

2.4Calendar类

2.4.1Calendar类概述

Calendar为日历字段提供了一些方法(转换,操作)
Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。
该方法返回一个Calendar 对象。
其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();

2.4.2Calender类常用方法

java 不显示null属性_算法_13

public class Test2 {    

    public static void main(String[] args) {
        //获取日历类对象
        Calendar c = Calendar.getInstance();
        System.out.println(c);
        //public int get(int field):返回给定日历字段的值
        int year = c.get(Calendar.YEAR);//返回年
        int month = c.get(Calendar.MONTH) + 1;//返回月(这里的月是从零开始的)
        int date = c.get(Calendar.DATE);//返回日
        System.out.println(year + "年" + month + "月" + date + "日");

        //public abstract void add(int field, int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段
        //需求1:3年前的今天
        c.add(Calendar.YEAR,-3);//修改年的字段
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH) + 1;
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");


        //public final void set(int year,int month,int date):设置当前日历的年月日
        c.set(2050,10,10);//设置年月日
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH) + 1;
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");

    }
}

运行结果:

java 不显示null属性_算法_14

2.5二月天案例(应用)

  • 案例需求
    获取任意一年的二月有多少天
  • 代码实现
public class CalendarTest {
    public static void main(String[] args) {
        //键盘录入任意的年份
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年:");
        int year = sc.nextInt();

        //设置日历对象的年、月、日
        Calendar c = Calendar.getInstance();
        c.set(year, 2, 1);

        //3月1日往前推一天,就是2月的最后一天
        c.add(Calendar.DATE, -1);

        //获取这一天输出即可
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年的2月份有" + date + "天");
    }
}

三、异常

3.1异常

异常概述:

异常就是程序出现了不正常的情况

异常的体系结构:

java 不显示null属性_System_15

3.2JVM默认处理异常的方式

  • 如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
  • 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
  • 程序停止执行

3.3try-catch方式处理异常

try {
	可能出现异常的代码;
} catch(异常类名 变量名) {
	异常的处理代码;
}

3.4Throwable成员方法

3.4.1常用方法

java 不显示null属性_数据结构_16

public class Test2 {

    public static void main(String[] args) {
        try {
            int[] a={1,2};
            System.out.println(a[2]);
        }catch (Exception e){
            System.out.println(e.getMessage());
            System.out.println("---------------------");
            System.out.println(e.toString());
            System.out.println("---------------------");
            e.printStackTrace();
        }
    }
}

运行结果:

java 不显示null属性_java_17

3.5编译时异常和运行时异常的区别

  • 编译时异常
  • 都是Exception类及其子类
  • 必须显示处理,否则程序就会发生错误,无法通过编译
  • 运行时异常
  • 都是RuntimeException类及其子类
  • 无需显示处理,也可以和编译时异常一样处理

3.6throws方式处理异常

public void 方法() throws 异常类名 {
    
}

注意事项:

  • 这个throws格式是跟在方法的括号后面的
  • 编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理
  • 运行时异常可以不处理,出现问题后,需要我们回来修改代码

3.7throws和throw的区别

java 不显示null属性_System_18

3.8自定义异常

自定义异常类:

public class ScoreException extends Exception {

    public ScoreException() {}

    public ScoreException(String message) {
        super(message);
    }

}

老师类:

public class Teacher {
    public void checkScore(int score) throws ScoreException {
        if(score<0 || score>100) {
//            throw new ScoreException();
            throw new ScoreException("你给的分数有误,分数应该在0-100之间");
        } else {
            System.out.println("成绩正常");
        }
    }
}

测试类:

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入分数:");

        int score = sc.nextInt();

        Teacher t = new Teacher();
        try {
            t.checkScore(score);
        } catch (ScoreException e) {
            e.printStackTrace();
        }
    }
}