java常用类
autoCloseAble接口
 
1.内部类,2.Object类,3.Object类常用用法,4包装类,5.String类,6.BigDecimal类
内部类:
1.成员内部类;
在一个类中再定义一个类,作为前一个类的成员存在;
2.静态内部类;
在成员内部类的基础上加static;
3.局部内部类;
把一个类定义在一个方法内部;
访问局部变量,只能是访问常量,jdk1.8之后,定义的变量会自动加final,也就是说,有局部类的时候,这个方法内部定义的变量都自动是常量。
原因是局部内部类访问外部类当前方法中的变量时,因为无法保障变量的生命周期与自身相同,变量必须修饰为final.
4.匿名内部类;
没有名字的局部内部类,使用抽象类,接口的时候用的比较多;
 
内部类可以访问外层类的属性,当属性,变量同名时,会直接访问到内部类,如果要访问外部类的属性,变量,需要使用 外部类明.this.变量名 指定;
 
 
 
 
Object类
类中的方法:getClass(),hashcode(),toString(),clone(),,notify(),wait(),equals(),
getClass(),返回对象类型,比如student类,teacher类。实例化成对象后,对象类型就是student类型,teacher类型;
hashcode(),返回的是对象的哈希码值,根据对象存储的堆的地址,或字符串或数字使用hash算法算出来的int类型的数值。
toString(),object类中默认会返回对象的命名空间,类型,以及哈希值,跟hashcode()值是一样的,只不过1个不是10进制,需要转化一下。
equals(), 判断2个对象是否是同一个对象;s1.equals(s2):s1对象引用地址是否等于s2;
finalize(),当对象被判定为垃圾对象时,由jvm自动调用此方法,用以标记垃圾对象;
垃圾对象:没有有效引用指向此对象,为垃圾对象(在内存中定义了一个对象,但是却没有赋值给一个变量,该对象无法使用,此时为垃圾对象);
垃圾回收,由GC销毁垃圾对象,释放数据存储空间;
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象;
手动回收:调用System.gc();通知JVM执行垃圾回收;
 
 
包装类
基本类型数据存放在栈空间;引用数据类型都在堆里面;
8个基本类型,是没有属性方法的;为了便于操作,对应8个基本类型,创造了8个引用类型,也就是这8个基本类型的包装类;
基本数据类型 ---》包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
类型转换与装箱,拆箱:基本类型的数据原本是存放在栈里面的,将数据存到堆里的操作叫装箱,反之则叫拆箱;jdk1.5之后,实现了自动装箱,拆箱;
int age=30;
Integer integer1 = age; //自动装箱;
int age2 = integer1; //自动拆箱
基本类型和成字符串转换:
1.使用+号;数字加字符,就转换成字符串;
2.使用Integer.toString();(toString可填第二个参数,可以转换成几进制比如10,16等)
字符串转数字: 使用Integer.parseXXX();
int num2 = Integer.patseInt(str);
integer 缓冲区:使用integer类型定义变量时会自动装箱,自动把数据转换为引用类型,会存在堆里,但是,integer类里有个缓冲区设定,-128到127之间的数据会从cache缓存中取,并不会创建一个新对象,此时数据还是存在栈中;定义两个100比较,它们是相等的;定义两个200,是不相等的,因为200不在缓冲区内,是重新创建了对象,是引用类型,存在堆中;
 
变量重新赋值,并不是直接改变变量的值,而是重新开辟一个空间,创造一个新的值,字符串,并且把变量名的引用地址重新指向新的字符串。如果定义两个相同的字符串,那么这两个变量名指向的是同一个字符串。实现了字符串常量的共享;也是字符串的不可变性;
即:1.字符串是常量,创建后不可改变;
2.字符串字面值存储在字符串池中,可以共享;
3.String str = "hello"; 产生一个对象,字符串池中存储;
4.String str = new String("hello"); //产生两个对象,堆,池中各存储一个;
最后,字符串比较时不要用 == ,==比较的是引用的地址, str.equals(str2)这样比较的是字符串池中的值;
String类常用方法:
lenth(); //返回字符串长度;
charAt(int index); //返回某个位置的字符;
contains(String str); //判断是否存在某个字符;
toCharArray(); 将字符串转换为数组;
indexOf(String str); 查询某个str首次出现时的下表,存在,则返回该下表,不存在,则返回-1;
lastIndexOf(String str); 查找字符串在当前字符串中最后一次出现的下标索引;
trim(); 去掉字符串前后空格;
toUpperCase(); 小写转换成大写;
endWith(String str); 判断字符串是否以str结尾;
replace(char oldChar, char newChar); 将旧字符串替换成新字符串;
split(String str); 将原字符串以str为分隔符进行拆分,str为[ ,]+等多个字符组成的字符串时,单个空格这样的单字符也能作为分隔符;
 
 
StringBuffer 可变字符串
和String相比,StringBuffer效率更高,更节省内存;
StringBuffer类的方法:
append();在字符串末尾追加字符串;
insert(int index, String str) 插入,在指定下标插入字符串;
replace() 替换
Math类
BigDecimal类, 高精度 可以实现精确计算;防止出现double浮点数计算出现误差的现象;
加 add(); num1.add(num2);
减 subtract()
乘 multiply()
除 divide(); 第二位参数可选,为保留几位小数,第三位可选,常量(有多种,可选四舍五入)
 
 
Date类
表示特定的瞬间,精确到毫秒,Date类中的大部分方法都已经被Calendar类中的方法所取代;
Calendar 在1.1后,取代了date类,提供了获取或设置各种日历字段的方法;由于该类修饰符是protected,无法直接创建对象,只能直接调用该类下的方法;
方法名字:
static Calendar getInstance() 使用默认时区和区域获取日历;
void set(int year,int month,int date,int hourdfday,int minute,int second) 返回给定日历字段的值,字段比如年月日等;
int get(filed) 返回给定日历字段的值。字段比如年月日等;
void setTime(Date date) 用给定的Date值设置此日历的时间
Date getTime() 返回时间戳
void add(int field,int amount) 按照日历的规则,给指定字段添加或减少时间量
long getTimeInMillies 毫秒为单位返回该日历的时间值(时间戳?)
 
SimpleDateFormat类
Yy Mm Dd 年月日
H:i:s 时分秒
 
System系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的;只能直接调用它的方法;
static void arraycopy(str, strPos,dest,destPos,lenth)
复制数组,从str数组的strPos位置开始复制,复制到dest数组的destPos位置,复制lenth个;
static long currentTimeMillis() 获取系统当前时间,返回的是毫秒值
static void gc() 手动启动垃圾回收
static void exit(int status) 退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm;