Java基础05(常用类)
Java基础05(常用类)
内部类
成员内部类
-
在类的内部定义,与实例变量、实例方法同级别的类
-
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
- Outer out=new Outer();
- Inner in =out.new Inner();//Inner in =new Outer().new Inner();
-
当外部类、内部类存在重名属性时,会优先访问内部类属性。
-
成员内部类不能定义静态成员(静态常量除外)
静态内部类
-
不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员。
-
相当于外部类,可以直接实例化对象
- Outer.Inner inner=new Outer.Inner();
-
必须将外部类实例化才能使用外部类的属性
-
普通类不能用static修饰
局部内部类
- 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法。
- 不能加任何访问修饰符(public等)
- 可以直接访问外部类变量
- 局部内部类访问外部类当前方法的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final
匿名内部类
-
没有类名的局部内部类(一切特征都与局部内部类相同)
-
必须继承一个父类或者实现一个接口。
-
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
-
优点:减少代码量;缺点:可读性较差
Inner inner1=new Inner() { @Override public void showUsb() { System.out.println("Inner has been used"); } };
Object类
- 超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
- 任何类,如果没有书写extends显示继承某个类,都默认直接继承object类,否则为间接继承
- Object类中所定义的方法,时所有对象都具备的方法
- Object类型可以储存任何对象
- 作为参数,可接受任何对象
- 作为返回值,可返回任何对象
getClass()
- public final Class<>getClasss();
- 返回引用中存储的实际对象类型
- 应用:通常用于判断两个引用中实际存储对象类型是否一致
hashCode()
- public int hashCode(){}
- 返回该对象的哈希码值
- 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
- 一般情况下相同对象返回相同哈希码
toString()
- public String toString(){}
- 返回该对象的字符串表示(表现形式)
- 可以根据程序需求覆盖该方法,入:展示对象各个属性值。(重写)
equals()
- public boolean equals(Object obj){}
- 默认实现为(this==obj),比较两个对象地址是否相同
- 可进行覆盖,比较两个对象的内容是否相同
- 比较两个引用是否指向同一个对象
- 判断obj是否为null
- 判断两个引用指向的实际对象类型是否一致
- 强制类型转换
- 一次比较各个属性值是否相同
finalize()
- 当对象被判定为垃圾对象时,由JYM自动调用此方法,用以标记垃圾对象,进入回收队列
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
- 自动回收机制:JYM的内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用System.gc();通知JYM执行垃圾回收
包装类
- 基本数据类型所对应的引用数据类型
- Object课统一所有数据,包装类的默认值是null

-
类型转换与装箱、拆箱,JDK1.5之后自动实现装箱拆箱
- 装箱、拆箱
int num=111; Integer integer=num;//Integer integer=new Integer(num) //Integer.valueOf(num) int num2=integer;// int num2=integer.intValue;-
8种包装类提供不同类型的转化方式:
-
Number父类提供的6个共性方法
-
parseXXX()静态方法
-
valueOf()静态方法
int num=1245; String str=""+num; String str1=Integer.toString(num); ============================ String str01="2344"; int num=Integer.parseInt(str01); String str02="true"; boolean bool=Boolean.parseBoolean(str02);//str02=true,bool=true;else bool=false(注意:需保证类型兼容,否则抛出NumberFirmatException异常)
-
-
整数缓冲区
- Java预先创建了256个常用的整数包装类型对象
Integer integer1=new Integer(100); Integer integer2=new Integer(100); System.out.println(integer1==integer2);//栈中地址不相等 Integer integer3=100; Integer integer4=100;//实际上是Integer.valueOf(100) System.out.println(integer3==integer4);//栈中地址指向堆中的临时缓冲区(实际上是数组),范围在-128到127,因为用的多 Integer integer5=200; Integer integer6=200; System.out.println(integer5==integer6);//超过缓冲区的数字会自动new一个地址- 在实际应用当中,对已创建的对象进行复用
String类
概述

1.字符串是常量,创建之后不可改变
2.字符串字面值存储在字符串池中,可以共享
方法
- public int length();返回字符串的长度
- public char charAt(int index);返回某个位置的字符
- public boolean contains(String str);判断是否包含某个字符串
- public char[] toCharArray():将字符串转换成数组
- public int indexOf(String str):查找str首次出现的下标,存在则返回下标,不存在则返回-1
- public int lastIndexOf(String str):查找字符串最后一次出现的下标
- public String trim():去掉字符串前后的空格
- public String toUpperCase();将小写转换成大写
- public boolean endWith(String str);判断字符串是否以str结尾
- public String replace (char oldChar,char newChar);将旧字符串替换成新字符串。
- public String[] split(String str):根据str做拆分
- public int compare(String str):比较首字母编码差值/字符串长度差值
心得: String方法不对原来的对象改变,而是生成新的空间
可变字符串
-
StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全
-
append();追加
-
insert();添加
-
replace();替换
-
delete();删除
sb.append("hello,world"); sb.insert(0,"hi"); sb.replace(0,5,"你好"); sb.delete(0,2); StringBuffer sb=new StringBuffer(); sb.append(""); String str=""; for (int i = 0; i < 99999; i++) { sb.append(i);//用时很短 } for (int i = 0; i < 99999; i++) { str+=i;//用时很长 }
-
-
StringBUilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全
BigDecimal类
-
位置:java.math包中
-
作用:精确计算浮点数
-
创建方式:BigDecimal bd=new BigDEcimal("1.0")字符串最准确
BigDecimal bd1=new BigDecimal("1.0"); BigDecimal bd2=new BigDecimal("0.9"); BigDecimal bd3=bd1.subtract(bd2);// add|multiply|divide
Date类(特定时间)
- public long getTime();ms为单位,1970年1月1日
- public boolean after();//before
- compareTo();
- equals();
Calendar类(日历)

SimpleDateFormat类(格式化时间)

System类(系统类)


浙公网安备 33010602011771号