Java

内部类

  • 内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)

  • public class People{
        //内部类
        public class Heart{
        }
    }
    

使用场景,作用

  • 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的王正结构可以选择使用内部类来设计
  • 内部类通常可以方便访问外部类的成员,包括私有的成员.
  • 内部类提高了更好的封装性,内部类本身就可以用private , protected等等修饰,封装性可以做更多控制

heart 心

静态内部类

  • 有static修饰,属于外部类本身

  • 它的特点和使用与普通类是完全一样的,,另类有的成分它都有,只是位置在别人里面而已

  • public class Outer{
        //静态成员内部类
        public static class Inner{
        }
    }
    
  • 静态内部类创建对象的格式

  • 外部类名.内部类名 对象名 = new 外部类名.内部类构造器;
    Outer.Inner in = new Outer.Inner();
    
  • 可以直接访问外部类的静态成岩,不能直接访问外部类的实例成员

  • 注意:开放中实际上用的还是比较少

成员内部类

  • 无static修饰,属于外部类的对象

  • JDK16之前,成员内部类中不能定义静态成员变量,JDK16开始也可以定义静态成员了.

  • public class Outer{
        //成员内部类
        public class Inner{
        }
    }
    
  • 静态内部类创建对象的格式

  • 外部类名.内部类名 对象名 = new 外部类构造器.new 内部类构造器;
    Outer.Inner in = new Outer().new Inner();
    
  • 可以直接访问外部类的静态成岩,实例方法中也可以直接访问外部类的实例成员

  • 注意:在成员内部类中访问所在外部类对象,格式:外部类名.this

局部内部类(鸡肋语法,了解即可)

  • 局部内部类放在方法,代码块,构造器等执行体中
  • 局部内部类的类名文件名为:外部类$N内部类.class

匿名代码类

  • 本质上是一个没有名字的局部内部类,定义在方法中,代码块中等,
  • 作用 : 方便创建子类对象,最终目的为了简化代码编写
格式:

​ new 类|抽象类名|接口名{
​ 重写方法

​ }

Employee a = new Employee(){
    public void work{
	}
};
a.work();

anonymous 匿名的

特点总结
  • 匿名内部类是一个没有名字的内部类
  • 匿名内部类写出来就会产生一个匿名内部类的对象
  • 匿名内部类的对象类型相当于是当前new的那个的类型的子类类型

API

Object

作用
  • 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类
  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法

常用方法

方法名 说明
public String toString() 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
public Boolean equals(Object o) 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false
toString()方法

​ 直接输出对象可以不写.toString()方法意思一样

​ 存在意义是为了被子类重写,以便返回对象发内容详细,而不是地址信息!!!

equals()方法
  • 默认是与另一个对象比较地址是否一样
  • 让子类重写,以便比较2个子类对象的内容是否相同

Objects

  • Objects类与Object类还是继承关系,Object类是从JDK1.7开始之后才有的
  • Objects的equals方法比较的结果是一样的,但是更安全
方法名 说明
public static boolean equals(Object a,Object b) 比较两个对象的,底层会先金兴非空判断,从而可以避免空指针异常,在进行equals比较
public static boolean isNull(Object obj) 判断变量是否为NULL,为NULL返回true,反之
equals()方法
//源码
public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

StringBuilder

  • StringBuilder 是一个可变的字符串类,我们可以把他看成是一个对象容器
  • 作用:提高字符串的操作效率,如拼接,修改等
构造器
名称 说明
public StringBuilder() 创建一个空白的可变字符串对象,不包含任何内容
public StringBuilder(String str) 创建一个指定字符串内容的可变字符串对象
常用方法
方法名称 说明
public StringBuilder append(任意类型) 添加数据并返回StringBuilder对象本身
public StringBuilder reverse() 将对象的内容反转
public int lenght() 返回对象内容长度
public String toString() 通过toString()就可以实现把StringBuilder转换为String

math

  • 包含执行基本数字运算的方法,Math类没有提供公开的构造器
  • 如何使用Math类中方法
    • 看类的成员是否都是静态的,如果是,通过类名就可以直接调用
常用方法
方法名 说明
public static int abs(int a) 获取参数绝对值
public static double(double a) 向上取整
public static double(double a) 向下取整
public static int round(float a) 四舍五入
public static int max(int a,int b) 获取两个int值中的较大值
public static double pow(double a,double b) 返回a的b次幂的值
public static double random() 返回值为double的随机数,范围[0.0,1.0).包前不报后

System

  • System的功能是通用的,都是直接用类明调用即可,所以System不能被实例化
常用方法
方法名 说明
public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis() 返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝

时间毫秒值

  • 计算机任务时间是有起点的,起始时间:1970年1月1日 00:00:00
  • 时间毫秒值:指的是从1970年1月1日 00:00:00 走到此刻的总的毫秒数,应该是很大的.1s=1000ms
  • 197年1月1日算C语言的生日

BigDecima

使用步骤
  • 创建对象BigDecimal封装浮点型数据,(最好的方式是调用方法)
常用API
方法名 说明
public BigDecimal add(BigDecimal b) 加法
public BigDecimal subtract(BigDecimal b) 减法
public BigDecimal multiply(BigDecimal b) 乘法
public BigDecimal divide(BigDecimal b) 除法
public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式) 除法

Data

  • Data类的对象在Java中代表当前所在系统的此刻日期时间
构造器
名称 说明
public Date() 创建一个Date对象,代表是系统当前此刻日期时间
常用方法
名称 方法
public long getTime() 获取时间对象毫秒值
时间毫秒值转成日期对象
构造器 说明
public Date(long time) 把时间毫秒值转成Data日期对象
Data方法 说明
public void setTime(long time) 设置日期对象的时间为当前毫秒值对应的时间
案例

计算出当前时间往后走1小时121秒之后的时间是多少

package com.yu.SingleInstance;

import java.util.Date;

/**
 * 计算出当前时间往后走1小时121秒之后的时间是多少
 */
public class DateTest {
    public static void main(String[] args) {
        //显示当前时间
        Date start = new Date();
        System.out.println(start);
        //计算1小时121秒是多少毫秒
        long time =(60*62+1)*1000;
        //计算当前时间的毫秒值
        long start1 = System.currentTimeMillis();
        //计算当前时间往后走1小时121秒之后的时间
        Date endtime = new Date(time+start1);
        //显示当前时间往后走1小时121秒之后的时间
        System.out.println(endtime);
    }
}

SimpleDateFormat

  • 可以对Date对象或手机毫秒值格式化成我们喜欢的时间形式
  • 也可以把字符串的时间形式解析成日期对象

image-20220512192041469

SimpleDateFormat 的构造器
构造器 说明
public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认格式
public SimpleDateFormat(String pattem) 构造一个SimpleDateFormat,使用指定的格式
SimpleDateFormat 的常用方法
格式化方法 说明
public final String format(Date date) 将日期格式化成日期/时间字符串
public final String format(Object time) 将时间毫秒值格式化成日期/时间字符串
  • y 年
  • M 月
  • d 日
  • H 时
  • m 分
  • s 秒
package com.yu.SingleInstance;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 请计算出2021年08月06日11点11分11秒,往后走2天14小时49分06秒的时间是多少
 */
public class mianshiti {
    public static void main(String[] args) {
        //创建格式,计算出出2021年08月06日11点11分11秒时间毫秒值
        String time = "2021年08月06日11点11分11秒";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH点mm分ss秒");
        try {
            //转换成Date对象值
            Date start = sdf.parse(time);
            System.out.println(sdf.format(start.getTime()));
            //计算出2天14小时49分06秒毫秒值,加个L防止数字过大超过long类型数据
            long out = (2L*24*60*60+14*60*60+49*60+6)*1000;
            //两者相加,计算往后走2天14小时49分06秒的时间是多少
            start.setTime(out+start.getTime());
            //格式化输出
            System.out.println(sdf.format(start));
            //默认格式输出
            System.out.println(start);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

image-20220513104808950

Egg tart 蛋挞

package com.yu.SingleInstance;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class EggTart {
    public static void main(String[] args) {
        //设计时间标准输入格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //开始时间
        String start = "2020年11月11日 00:00:00";
        try {
            //开始时间转为Date类型
            Date starttime = simpleDateFormat.parse(start);
            //结束时间
            Date endtime = new Date();
            //忘记转换为毫秒值
            long ten = 10*60*1000;
//            计算出结束时间
            endtime.setTime(starttime.getTime()+ten);
            //小贾购买优惠劵时间
            Date xiaoj = simpleDateFormat.parse("2020年11月11日 00:03:47");
            //小皮购买优惠劵时间
            Date xiaop = simpleDateFormat.parse("2020年11月11日 00:10:11");
//            System.out.println(simpleDateFormat.format(starttime));
//            System.out.println(simpleDateFormat.format(endtime));
//            System.out.println(simpleDateFormat.format(xiaoj));
//            System.out.println(simpleDateFormat.format(xiaop));
            if(xiaoj.getTime()>=starttime.getTime() && xiaoj.getTime()<=endtime.getTime()){
//                System.out.println(xiaoj.getTime()+"  "+starttime.getTime()+" "+endtime.getTime()+(xiaoj.getTime()>=starttime.getTime() && xiaoj.getTime()<=endtime.getTime()));
                System.out.println("小贾参加了秒杀活动!");
            }else{
//                System.out.println(xiaoj.getTime()+"  "+starttime.getTime()+" "+endtime.getTime()+(xiaoj.getTime()>=starttime.getTime() && xiaoj.getTime()<=endtime.getTime()));
                System.out.println("小贾没有参加了秒杀活动!");
            }
            if(xiaop.getTime()>=starttime.getTime()&&xiaop.getTime()<=endtime.getTime()){
                System.out.println("小皮参加了秒杀活动!");
            }else{
//                System.out.println(xiaop.getTime()+"  "+starttime.getTime()+" "+endtime.getTime()+(xiaop.getTime()>=starttime.getTime() && xiaop.getTime()<=endtime.getTime()));
                System.out.println("小皮没有参加了秒杀活动!");
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

after 之前

before 之后

Calendar

Calendar日历类

  • Calendar代表了系统此刻日期的日历对象
  • Calendar是一个抽象类,不能直接创建对象
创建日历对象的方法
方法名 说明
public static Calendar getInstance() 获取当前日历对象
常用方法
方法名 说明
public int get(int field) 取日期中的某个字段信息
public void set(int field,int value) 修改日历某个字段信息
public void add(int field,int amount) 为某个字段增加/减少指定值
public final Date getTime() 拿到此刻日期对象
public long getTimeInMillis() 拿到此刻时间毫秒值
注意

calendar 是可变日期对象,一旦秀爱后其对象本身表示的时间将产生变化

 posted on 2022-05-13 16:25  yulll  阅读(27)  评论(0)    收藏  举报