• 【JavaSE】内部类、基本类型包装类、日期类之间的关系


      👉引言💎

    在这里插入图片描述

    铭记于心
    🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

    在这里插入图片描述


    内部类与API,异常

    内部类

    • 内部类的访问特点
      内部类可以直接访问外部类的成员,包括私有
      外部类要访问内部类的成员,必须创建对象
    • 成员内部类的定义位置

    在类中方法,跟成员变量是一个位置

    • 外界创建成员内部类格式

    格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;

    举例:Outer.Inner oi = new Outer().new Inner();

    • 成员内部类的推荐使用方案

    将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。

    c++内部类与java内部类最大的区别就是:c++的内部类对象没有外部类对象的指针,不能访问外部类对象的非静态成员;java的非静态内部类对象有外部类对象的指针,能访问外部类对象的非静态成员。
    java 中右多个内部类,还有匿名内部类。

    局部类(较少使用)

    • 局部内部类定义位置

    局部内部类是在方法中定义的类

    • 局部内部类方式

    局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用

    该类可以直接访问外部类的成员,也可以访问方法内的局部变量

    匿名内部类

    • 匿名内部类的前提

    存在一个类或者接口,这里的类可以是具体类也可以是抽象类

    • 匿名内部类的格式

    格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }

    new Inter()
    { 
    @Override 
    public void method(){} 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 匿名内部类的本质

    本质:是一个继承了该类或者实现了该接口的子类匿名对象
    请添加图片描述
    请添加图片描述

    即可通过该匿名对象调用父类成员方法,还可以通过多态的方式接收该对象

    匿名内部类可以通过多态的形式接受

    Inter i = new Inter(){ @Override public void method(){ } }
    
    
    • 1
    • 2

    匿名内部类直接调用方法

    interface Inter
    { void method(); }
    
    class Test
    { 
    public static void main(String[] args){
     new Inter(){ 
     @Override 
     public void method()
     { System.out.println("我是匿名内部类"); }
      }.method(); // 直接调用方法 }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    匿名内部类在开发中的使用

    当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码

    System类

    public static void exit​(int status)
    终止当前java虚拟机,非零表示异常终止

    public static long currentTimeMillis​() 返回当前时间(以毫秒为单位)

    基本类型包装类

    整形到字符串:也可用String.valueof
    
    String str = Integer.toString(i);
    
    字符串到整形:也可以用parseInt方法
    
    int i = Integer.valueOf(str).intValue();
    
    double型请查看Double方法
    
    toLowerCase,toUpperCase转换大小写
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    日期类

    Date​()
    分配一个 Date对象并对其进行初始化,以便它表示分配的时间,以最接近的毫秒为单位。

    boolean after​(Date when) 测试此日期是否在指定日期之后。  
    boolean before​(Date when) 测试此日期是否在指定日期之前。  
    Object clone​() 返回此对象的副本。  
    int compareTo​(Date anotherDate) 比较两个日期进行订购。  
    boolean equals​(Object obj) 比较两个日期来平等。  
    static Date from​(Instant instant)Instant对象获取 Date一个实例。 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    案例

     SimpleDateFormat sdf = new SimpleDateFormat();
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年M月d日");
            Date date = new Date();
            String format = sdf1.format(date);
            System.out.println(format);
    2022114
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    日期工具类的实现

    public class data {
        private data() { };
        public static String ToString(Date d, String format) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.format(d);
        }
        public static Date todata(String S, String format) throws ParseException {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.parse(S);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Calendar类

    static Calendar getInstance​() 使用默认时区和区域设置获取日历。  
    static Calendar getInstance​(Locale aLocale) 使用默认时区和指定的区域设置获取日历。  
    static Calendar getInstance​(TimeZone zone) 使用指定的时区和默认语言环境获取日历。  
    static Calendar getInstance​(TimeZone zone, Locale aLocale) 获取具有指定时区和区域设置的日历 
    
    
    abstract void add​(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段。  
    boolean after​(Object when) 返回 Calendar是否表示在指定的 Object表示的时间之后的时间。  
    boolean before​(Object when) 返回此 Calendar是否表示由指定的 Object表示的时间之前的时间。 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    二月天案例

    public class hello {
        public static void main(String[] args)  {
            Calendar calendar = Calendar.getInstance();
            System.out.println("请输入要查询的年份:");
            Scanner Sc = new Scanner(System.in);
            int number=Sc.nextInt();
            calendar.set(number,2,1);
            calendar.add(Calendar.DAY_OF_MONTH,-1);
            System.out.println(number+"年的二月份共有"+calendar.get(Calendar.DAY_OF_MONTH)+"天");
        }
    }
    
    请输入要查询的年份:
    2018
    2018年的二月份共有28
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    🌹写在最后💖
    相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!🌹🌹🌹在这里插入图片描述

  • 相关阅读:
    无人机航线规划
    JS/TS项目里的Module都是什么?
    Excel 导入实例
    Oracle 19c OCP 1Z0-083题库(7-12)
    基于KT6368A的车载OBD蓝牙芯片模块解决方案低成本国产替代
    Graalvm 安装和静态编译
    可信(隐私)计算
    冠军斩获10万奖金!首届“域见杯”医检AI开发者大赛精彩落幕
    Java面试题
    leetcode
  • 原文地址:https://blog.csdn.net/runofsun/article/details/125937699