内部类
普通的类是不可加static修饰的,只有内部类才行
普通的内部类不能定义static变量(除了常量)
静态内部类可以定义static,但是去调用外部类的属性的话就和其他类一样,需要实例化外部类
静态内部类是依赖外部类对象,而非静态内部类需要实例化外部类,再通过实例的外部类队对象进行调用。
局部内部类是定义在方法里面的,作用范围只能在方法使用
想要使用局部内部类的方法的话需要你在方法里面实例化你的局部内部类,在调用相对的方法
如何你想要访问方法里面的局部变量的话可以直接访问(在jdk1.7时需要那个局部变量必须时常量,而在jdk1.8后会自动添加),因为如过你去调用这个方法,调用完了,无法保证变量的生命周期和自身相同,所以需要把它的定义final(自己的理解:那个局部变量就会消失,那是你的局部类不会消失,如果你掉用到了局部变量,那个那个对象没有了就会找不到,可能会报错。所以java就把那个局部变量设置为一个常量,不能修改,相当于后面你只时对这个变量值的的一个操作,而这个值时不能改变的,在局部内部类中。)
匿名内部类:没有类名的局部内部类,必须继承一个父类或者实现一个接口,只能创建一个该类的对象
优点:减少代码量
缺点:可读性比较差
//匿名内部类实际代码
Nclass nclass=new Nclass(){
@Override
public void service() {
System.out.println("123");
}
};
Object类
1.是超类、基类,所有类的直接或间接的父类,位于继承树的最顶层
2.任何类,如果没有继承任何类的话,都默认继承了Object类
3.Object中定义的方法,是所有对象都具备的方法
4.Object类型可以储存任何对象
1.最为参数,可接受任何对象
2.最为返回值,可返回任何对象
方法:
get.class:可以得到类之间的类型是否相等(也可以创建对象)
toString:属于它的类型,还有hashcode值
equals:如果不重写的话本质还是用的==,重写后就你自己的规则,来返回时false还是true
finalize:手动回收System.gc();并不是真的回收,还是垃圾回收GC来回收的。通过重写finalize
类型的转换与装箱、拆箱
1.装箱:把基本数据类型转换为引用类型(把栈里面的数据放到堆)
2.拆箱:把引用类型类型转换为基本数据(把堆里面的数据放到栈)
在jdk1.5和1.5之前是没有自动装箱和插箱的,从1.5之后提供了自动拆装箱。
如何实现自动装拆箱(其实还是编译器给你自动编的,本质上和你1.5上差不多)
基本类型转换为字符串
1.S s1=1+"";
2Integer的toSring方法
整数缓冲区
Java预先创建了256个常用的整数包装类型对象,在开发过程中堆己创建的对象进行一个复用。
String类
String name=“hello”;
name=“张三”;张三赋值给name变量,并没有修改原来数据而是name变量的指向给修改,另外新建一个空间在你的方法区里面。
length():sting字符串的长度
charAt(你要获取那个字符串的那个位置的下标)获取指定下标的值
contains(你要包含的值)判断字符串是否包含你传递的值
toCharArray()把字符串转换为数组
indexOf("")//查找你输入的字在字符串的下标从o开始
indexOf("",从哪里开始)指定位置从哪里开始
lastIndexof(“你指点过的字符‘)此类字符在字符串中的最后一个的下标
trim:去掉字符串前后的空格
toUpperCase();把小写转变成大写 toLowerCase():把大写转换成小写
enwith(str):判断是否是str结尾;startWith(str):判断是否是开头
replace(old,new):1.将旧字符串某个子字符替换成新字符2.把老字符串修改成新的字符串
split(“String str”):根据str做拆分 []里面可以写多个拆分 []+里面内容可以出现多个也拆分
equalsIgnoreCase():判断2个字符串不管大小写
compareTo():这个是不叫你2个字符串里面的内容一个一个比,比出不同的,然后得出然后第一个会减去第二个(这个值是你这个字符代表的值)。如果是第一个是a=“戴宝华”;第二个是 a1=“戴宝华话话话”;比较特殊,就会使你第二个比第一个多的数。像上面的那个是-3;
substring():截取字符,可以从你提供下标到你提供的最后下标进行截取;
StringBuffer和StringBuilder
相对于String来说:1.会比String效率高,2.会比String更加节省内存
StringBuffer:可变长字符串,jdk1.0提供,相比于StringBuilder来说运行速度慢,线程安全
方法:
-
append()追加,往它里面一直加内容
-
insert()增加,根据你的提供的下标对你的一个字符添加加到那个位置(从零开始)
-
replace()替换,根据你指定的位置的值对你指定的值进行一个替换(从0开始)
-
delete()删除根据你指定的位置的值对你指定的值范围进行一个删除(从0开始)
-
reverse()反转,字符串的反转
StringBuilder: 可变长字符串,jdk1.5提供,相比于StringBuffer来说运行速度快,但是不安全
BigDecimal:精确计算浮点数
具体实现减法:BigDecimal bigDecimal=new BigDecimal("1.0");
BigDecimal bigDecimal1=new BigDecimal("0.9");
//减法
BigDecimal subtract = bigDecimal.subtract(bigDecimal1);
System.out.println(subtract);
//加法
BigDecimal add = bigDecimal.add(bigDecimal1);
System.out.println(add);
//乘法
BigDecimal multiply = bigDecimal.multiply(bigDecimal1);
System.out.println(multiply);
//除法
BigDecimal divide = new BigDecimal("10").divide(new BigDecimal("2"));
System.out.println(divide);
//如果是10/3这种一直除不完的解决方法,2带包你要保留几位,BigDecimal.ROUND_HALF_UP是四舍五入
BigDecimal divide = bigDecimal.divide(bigDecimal1, 2, BigDecimal.ROUND_HALF_UP);
System.out.println(divide););
System.out.println(divide1)
Date
表示特点的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar中的方法替代
时间单位:
1微秒=1000纳秒(毫微秒)
1毫秒=1000微秒
1秒=1000毫秒
1分钟=60秒
1小时=60分
方法:
toString();把你的一个时间展现为Fri Jun 12 01:01:43 CST 2020
toLocaleString();已经过时,把你的一个时间展现为2020-6-12 1:01:43
date.after(date1):date是不是在date1之后。返回booleam类型
date.before(date1):date是不是在date1之前。返回booleam类型
date.compareTo(date1):比较他们的毫秒值,返回值为int(1,-1,0)date>date1时候就是1,<就是-1,相等就是0。
date.equals(date1):判断2个时间是否相等,返回值是booleam。相等时true,不相等就是false
Calendar
Calendar提供了获取或设置各种日历字段的方法,但是它的构造方法时protected修饰的,所以无法直接创建对象所以在这个类中提供了一个Static Calendar getInstance()方法来创建Calendar方法,这个方法是使用默认时区和区域来获取日历的。
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.getTime());//当前时间
System.out.println(calendar.getTimeInMillis());//获取毫秒数
System.out.println(calendar.get(calendar.YEAR));//获取年份
System.out.println(calendar.get(1));//获取年份,不建议使用,因为这种Calendar调用多了,你就不知道是用的哪一个
System.out.println(calendar.get(calendar.MONTH));//获取月份
System.out.println(calendar.get(2));//获取月份,会比我们的时间少一,所以需要加一
System.out.println(calendar.get(calendar.DAY_OF_MONTH));//获取日
System.out.println(calendar.get(5));//获取日
System.out.println(calendar.get(calendar.DAY_OF_WEEK));//星期 星期是从o开始星期日开始,星期六结束
System.out.println(calendar.get(7));//星期
System.out.println(calendar.get(calendar.HOUR));//小时 12
System.out.println(calendar.get(calendar.HOUR_OF_DAY));//小时 24
System.out.println(calendar.get(calendar.MINUTE));//分钟
System.out.println(calendar.get(calendar.SECOND));//秒
//修改,这个相当于说是你这个月份13号(calendar.DAY_OF_MONTH)是类型,你也可以改成月,年,分,秒,如果是月分的话
//你这个月自动给加一。传递的时间
calendar.set(calendar.DAY_OF_MONTH,13);
System.out.println(calendar.getTime().toLocaleString());
//add修改这个是在你原来的时间的基础上加i(月,年,分,秒,)
calendar.add(calendar.MONTH,i)
System.out.println(calendar.getTime().toLocaleString());
int actualMaximum = calendar.getActualMaximum(calendar.get(Calendar.MONTH));//月份最多多少天
System.out.println(actualMaximum);
int actualMinimum = calendar.getActualMinimum(calendar.get(Calendar.MONTH));//月份最少多少天
System.out.println(actualMinimum);
//获取一个月后的此时此刻
//方法一
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar calendar=Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(calendar.MONTH,1);
String format = df.format(calendar.getTime());
System.out.println(format);
//方法二,n代表你要加几个月
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //制定日bai期格式
Calendar calendar=Calendar.getInstance();
int i = calendar.get(calendar.MONTH)+n;
calendar.set(Calendar.YEAR,i);
String format = df.format(calendar.getTime());
System.out.println(format);
//方法三
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar calendar=Calendar.getInstance();
int i=1;
calendar.add(calendar.MONTH,i)
String format = df.format(calendar.getTime());
System.out.println(format);
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类(日期->文本)(文本->日期)
y 年 M 月 d 天 H 小时 分钟 s秒 S毫秒 D 是你这年过去的全部天
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");//定义模板
Calendar calendar=Calendar.getInstance();
String format = simpleDateFormat.format(calendar.getTime());//把日期转换为String
System.out.println(format);
Date parse = simpleDateFormat.parse("2000/10/22 10:22:33");//把String转换为日期
System.out.println(parse.toLocaleString());
System
构造方法是私有的,不用创建对象
arraycopy(src,srcPoos,dest,destPos,lengtj);src:源数组,srcPoos:从那个位置开始复制,dest:目标数组,destPos:目标数组的位置,length:复制长度,在Arrays.copyof也是调用的是System.arraycopy;
currentTimeMillis()获取当前毫秒数
gc() :告诉垃圾回收器回收垃圾了,回收器有可能回收也有可能不回收
exti():退出jvm 是0的话正常退出,非零非正常退出