常用类总结

一.内部类

1.定义:

在一类内部定义一个完整的类 比如身体的内部类头

2.特点:

  • 内部类可访问外部类的私有成员 不破坏封装性
  • 内部类也会生成.class文件
  • 为外部类提供功能组件

成员内部类

1.内部类对象创造方法:

创建内部类对象时,必须依赖外部类对象。

Outer outer = new Outer();
Inner inner = outer.new Inner();
    Inner inner1 = new Outer().new Inner();

2.注意:

  • 成员内部类在类的内部定义,与实例变量,实例方法同级别的类
  • 当内部类、外部类存在重名属性时,会优先访问内部类属性
  • 内部类方法需要访问外部类同名属性,Outer.this.name
  • 成员内部类不能定义静态成员static,可以包含静态常量static final

静态内部类(常用)

  • 通过创建外部类对象访问外部类的静态成员
  • 调用:Outer.Inner inner = new Outer.Inner();
    inner.run();
  • 只有内部类名前才能加static 普通类不能加
  • 在成员内部类的基础上加一个static

 

局部内部类

  • 定义在方法中,作用范围和创建对象仅限于当前的方法
  • 不能加任何访问修饰符
  • 调用局部内部类方法时候,在所属方法内创建对象并调用
  • 方法内无法保障变量的生命周期 必须加final 不可以单加static 

匿名内部类(常用):相当于创建一个局部内部类

  • 没有类名,特征与局部内部类相同
  • 必须继承一个父类或者实现一个接口
  • 定义类,实现类,创建对象的语法合并,只能创建一个该类的对象。
  • 在类的内部写 class x implements a{},可以创建它的对象
  • 减少代码量,但可读性差

二.Object类

getclass()方法

获取对象所属的类

hashCode()方法

  • 返回对象的哈希码值
  • 相同对象返回相同哈希值

哈希值:根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值

toString()方法

  • 默认情况返回对象类型和16进制的哈希值
  • 可以重写 

instanceof()方法

  • 判断对象是否属于某种类型

equal()方法

  • 看两个对象是否为同一个,通过比较地址是否相同

finalize()方法

三.包装类

对应类型

装箱和拆箱(类型转换)

定义:

  • 装箱:将栈中数据拿到堆里,基本类型转为引用类型
  • 拆箱:将堆中数据拿到栈中,引用类型转为基本类型

jdk1.5之前用的方式:

装箱

        int num=18;
        Integer integer = new Integer(num);
        Integer integer1 = Integer.valueOf(num);

 拆箱

        Integer integer2 = new Integer(100);
        int i = integer2.intValue();

jdk1.6后,自动装箱和拆箱(    通过调用valueof()方法   )

int age=30;
Integer integer=age;//装箱
int age1=integer; //拆箱

利用XJad以及idea可以将字节码文件反编译为,java文件

基本类型和字符串的转换

1.基本类型转换成字符串

int n1=100;

1.1 使用加号

String s1=n1+" ";         

1.2 使用Integer中的toString()方法

String s2=Integer.toString(n1);       

2.字符串转为基本类型

String str="150";

int n2=Integer.parseInt(str);

四.Integer缓存区

从-128到127已经在堆中的数组中缓存好,有的话直接将地址赋给栈中的变量(如代码中的100)

 如此设计的目的,为了对创建的对象进行复用,减少内存消耗

五.String类

1.概述

  • 字符串是常量,创建后不可修改
  • 字符串字面值存储在字符串池中,可以共享
  • String name="hello"; 产生一个对象,字符串池存储
    name="zhansan";
    String name1="zhangsan";

  • 第二种方式String s=new String("hello"); 产生两个对象,堆、池各存储一个

equals比较的是值  ,str==str2    比较的是地址

 2.常用方法

  • length() 返回字符串的 长度
  • charAt(int index) 根据下表找对应位置的字符
  • contains(String str) 判断是否包含某个子字符串
  • toCharArray() 将字符串转为数组
  • index of(String str) 查找str首次出现的下标  存在则返回下标 不存在 返回-1
  • LastIndexOf(String str):查找字符串在当前字符串中最后一次出现得下标索引
  • trim():去掉字符串前后的空格
  • toUpperCase():把大写转成小写
  • endWith(str) 是否以str结尾
  • startWith(str):是否以str开头
  • equals() 比较是否相同
  • compareTo()从第一位往后逐个比较  位数相同对应位置求差 位数不同比长度
  • split(“ ”)用空格将字符串分开
  • replace()将字符串中得字符替换为目标字符,用该方法可以实现插入功能

六.可变字符串

1.StringBuffer

对象sb的重载方法

  • append():追加
  • insert(): 添加,可以控制添加的位置        传参(0,"我在最前面")
  • replace() : 取代指定位置                               传参(开始,结束,str)含头不含尾
  • delete()

2.StringBuilder

用法与StringBuffer相同

共同特性:效率比String高 比String节省内存,比StringBuffer也高

速度比较举例:用String的拼接+=和StringBuilder的拼接99999,用时差异,比较出了速率

七.BigDecimal

1.问题举例

  • double存的是近似值,精度要求不高,如0,9可能存储为0.8999999,bigdecimal可以更精确地处理浮点数
  • double d1=0.9  
  • double d2=0.8
  • d1-d2不等于0.1

2.bigdecimal

在需要精度要求比较高的时候,如银行类,则使用bigdecimal处理大的浮点数

3.具体应用

3.1

   new BigDecimal(“1.0”)括号中需要传入字符串

3.2

  方法  1.subtract:减法 

           2.add:加法 

          3.divide: 除法(除不尽的时候可能出现问题)可以在传参时候设置保留几位小数

             4.multyple:乘法

八.Date类

方法

1.打印当前时间:Date类型的对象tostring方法

2.打印1970年到现在的毫秒数:getTime

3.比较之间前后:date.after(date1)       date.before(date2)

4.比较毫秒值:date.compareTo(date2)

5.比较是否相等 date.equals()

九.Calendar类

方法

 案例

十.SimpleDateFormat

1.方法

 2.掌握

  • 字符串转为日期

  • 日期转为字符串

十一.System类

 方法1:复制数组

  • 将原数组按位置复制到目标数组:System.arraycopy(src,srcPos,dest,desPos,length)
  • // src 源数组
    // srcPos 从哪个位置开始复制
    // dest 目标数组
    // desPos 目标数组的位置
    // length 复制的长度
  • Arrays.copyOf  用的就是System.arraycopy

举例

方法2:获取当前系统时间:

System.currentTimeMillis()

方法3:垃圾回收机制 System.gc();

  • finalize() 垃圾回收时候执行的方法

方法4:退出jvm,不执行后续代码

  

十二:总结

静态内部类和匿名内部类较为常用

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值