Object类位于java.lang包下,是所有类(包括数组)的父类(超类)
Object类中的常用方法:
toString()方法: 输出对象的内存地址
equals()方法: 判断两个对象是否是同一内存地址,等价于==
hashcode()方法: 获得对象的哈希码,哈希码是内存地址经过算法后生成的整数值。内存地址一样,哈希码一样。
finallize()方法: 在垃圾收集器对无用的对象进行回收前,调用这个方法对对象进行清理。
包装类: 是将值类型转成对应的引用类型提供的类,方便调用类中的方法
常用的包装类: Integer int , Character char 其他的是数据类型的首字母大写
将值类型转成引用类型的包装类完成的是装箱,将引用类型的包装类转成值类型完成的是拆箱,jdk1.5以后自动转换
内部类:在一个类A的里面定义另外一个类B,B可以直接使用A的所有内容
内部类的分类:
成员内部类: 把内部类当成外部类的成员变量,在编译后会生成两个.class文件
外部类想访问内部类中的内容,必须创建内部类的对象
成员内部类中不能包含任何static的内容
局部内部类: 在外部类的方法中定义一个类
方法中如果有参数,参数必须加final关键字
匿名内部类: 没有名字的类
必须继承一个父类或实现一个接口
没有构造方法
静态内部类: 内部类被static修饰
创建对象不需要依赖于外部类对象
不能直接使用外部类的非静态内容
静态内部类中可以定义static成员
在内部类中直接使用this指代的是当前内部类的对象,如果想引用外部类的对象,需要: 外部类名.this.属性
枚举:可以保证用户的输入的合法性,防止不恰当的用户输入(应用场景:给你提供了一些选项,只能在这些选项中做出选择)
语法: enum 枚举名{ 枚举值列表 }
异常Exception:是在程序运行中发生的不正常的现象,它会中断程序的执行。
错误Error: 错误程序无法处理,必须通过修改代码解决。(Java中的错误)
Exception和Error都继承自Throwable(异常错误的根类)类
运行时异常(RuntimeException,是JVM自动抛出):不处理可以编译通过(不报错)
ArithmeticException: 以0作除数
ArrayIndexOutOfBoundsException: 数组下标越界
NumberFormatException: 字符串中的非数字转整型
ClassCastException: 父类对象转成不相关的子类类型
checked异常(非运行时异常,需要手动抛出): 强制检查异常,不处理编译不了
IOException
SQLException
ClassNotFoundException
异常的捕获(异常被处理,程序继续运行):
try: 放入的是容易产生异常的代码,只要引发异常,try块中后面的代码将不会被执行
catch: 放入的是对异常进行捕获的代码,要保证异常现象和捕获的异常类型匹配(catch只能走一次)
finally: 无论是否引入异常都要被执行到的代码,除非遇到System.exit(0);
可以一起使用的方式: try catch finally (finally最多有一个,不能有多个),try catch ,try finally
throw: 抛出异常, 可以将没有的异常类型通过 throw new Exception() 手动抛出
throws: 声明异常,用在方法的定义位置, 方法中引起的异常如果没有能力解决或不想解决可以通过throws声明,
交给方法的调用者解决
匿名内部类:一个累1只需要构建一个单一的对象,那么这个类其实并不需要额外取一个特有的名字,对于不存在名字的内部类,我们称之为匿名内部类。
java的包分为两大类: java包是java语言的核心包 javax包是java语言的扩展包
String类(Java已经出品方已经写好的一些类): 是final类(不能被继承),可以创建不可改变的字符串
StringBuffer和StringBulider类:是final类,可以创建可以改变的字符串
String substring(int beginIndex)从一个索引开始,截取剩下所有字符
String substring(int beginIndex,int endIndex)返回两个索引位置之间(不包括第endIndex个字符)的所有字符;
字符串和字节数组的相互转换:
byte[] bs=s.getBytes(); 将字符串转成字节数组
String s=new String(bs); 将字节数组转成字符串
StringBuilder是线程非安全的类,效率更快
Math类位于java.lang包,是一个final类,不能被继承,所有的方法都是static的
BigInteger和BigDecimal可以对超出范围的数据进行加减运算,调用add()和divide()方法
生成唯一的36位的随机序列的方式:
UUID.randomUUID().toString()
SimpleDateFormat: 日期时间的格式化类,在java.text.*包中
将日期对象转成字符串:
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EE"); EE代表星期几
String str=simpleDateFormat.format(new Date());
将字符串转成日期对象:
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str="2014-11-15 02:30:30";
try {
Date date=simpleDateFormat.parse(str);
System.out.println((new Date().getTime()-date.getTime())/1000/60/60/24);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar:是日历类,是个抽象类,可以单独获取年、月、日
提供对日期相加的方法:
calendar.add(Calendar.MONTH,1);
jdk1.8及以上版本对日期操作的推荐方式:
获得当前日期年-月-日: LocalDate localDate=LocalDate.now();
System.out.println(localDate);
获得指定日期年-月-日: LocalDate localDate=LocalDate.of(2014,11,15);
System.out.println(localDate);
将字符串转换成LocalDate对象: LocalDate localDate=LocalDate.parse("2020-11-20");
System.out.println(localDate);
LocalDate类表示日期,LocalTime类只表示时间,LocalDateTime类同时包含日期和时间,三个类的用法相同
对LocalDate的格式化输出:
LocalDateTime localDate=LocalDateTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
System.out.println(localDate.format(formatter));
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
LocalDateTime localDate=LocalDateTime.parse("2014年11月15日 02时30分30秒",formatter);
System.out.println(localDate);