final关键字
final
关键字代表最终、不可改变。- 常见四种用法:
- 可以用来修饰一个类。
- 可以用来修饰一个方法。
- 可以用来修饰一个局部变量。
- 可以用来修饰一个成员变量。
四种权限修饰符
public | protected | (default ) | private | |
---|---|---|---|---|
同一个类 | YES | YES | YES | YES |
同一个包 | YES | YES | YES | NO |
不同包子类 | YES | YES | NO | NO |
不同包非子类 | YES | NO | NO | NO |
内部类的概念与分类
1、 成员内部类
成员内部类定义格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
//...
}
//...
}
注意:内用外,随意访问;外用内,需要内部对象。
如何使用成员内部类?有两种方式
- 间接方式:在外部类的方法中,使用内部类;然后main只是调用外部类的方法。
- 直接方式:
外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
- 如果出现了重名现象,那么格式是:
外部类名称.this.外部类成员变量名称
。
2、 局部内部类
如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。
“局部”:只有当前所属的方法才能使用它。
定义格式:
修饰符 class 外部类名称 {
修饰符 返回值类型 外部类方法名称(参数列表) {
class 局部内部类名称 {
//...
}
}
}
注意事项:局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final
的】。
备注:从Java 8开始,只要局部变量事实不变,那么final
关键字可以省略。
3、 匿名内部类【使用频率最高】
如果接口的实现类(或者父类的子类)只需要使用唯一的一次。那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。
匿名内部类的定义格式:
接口名称 对象名 = new 接口名称(){
//覆盖重写所有抽象方法
};
对格式进行解析:
new
代表创建对象动作- 接口名称就是匿名内部类需要实现哪个接口。
{...}
这才是匿名内部类的名称。
注意:
- 匿名内部类,在创建对象的时候,只能使用唯一一次。
- 匿名对象,只能在调用方法的时候唯一使用一次。
- 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】。
类的权限修饰符
- 外部类:
public
/(default
) - 成员内部类:
public
/protected
/(default
)/private
- 局部内部类:什么都不能写
Object类
- 类
Object
是所有类的超类。 - 所有得对象(包括数组)都可以实现这个类得方法。
Date类
- 毫秒是千分之一秒。
- 格式化日期使用
DateFormat
类中的方法,将日期格式化为文本。- 创建
SimpleDateFormat
对象,构造方法中传递指定的模式。 - 调用
SimpleDateFormat
对象中的方法format
,按照构造方法中指定的模式,把date
日期格式化为符合模式的字符串(文本)。 SimpleDateFormat
对象的parse
方法,将字符串转换成日期。
- 创建
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date date = new Date();
String s1 = "2021-06-07";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d1 = sdf.parse(s1);
System.out.println(days(d1,date));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static int days(Date d1,Date d2) {
int n = (int) ((d1.getTime() - d2.getTime())/ (1000*3600*24));
return n;
}
}
Calendar类
-
Calender
类,日历类。 -
Calendar
类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR
,MONTH
,DAY_OF_MONTH
,HOUR
)。 -
Calendar
类无法直接创建对象,里边有一个静态方法叫getInstance()
,该方法返回了Calendar
类的子类对象。 -
static CalendarvgetInstance()
使用默认时区和语言环境获得一个日历。 -
常用方法:
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
对象。
System类
-
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System
类的API文档中,常用的方法有:public static long currentTimeMills();
返回以毫秒为单位的当前时间。public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
将数组中指定的数据拷贝到另一个数组中。
StringBiuder类
-
StringBiuder
即字符串缓冲区,可以提高字符串的操作效率(可以看成一个长度变化的字符串),底层也是一个数组,但是没有被final
修饰,可以改变长度。 -
StringBiuder
的构造方法StringBiuder();
构造一个不带任何字符的字符串生成其,其初始值为16个字符。StringBiuder(String str);
构造一个字符串生成器,并初始化为指定的字符串内容。
-
常用方法:
public StringBiuder append(...);
添加任意类型数据的字符串形式,并返回当前对象自身。public String toString();
将当前StringBiuder
对象转换为String
对象。