内部类
内部类概念
-
在一个类内部再定义一个完整的类
特点
-
编译之后可生成独立的字节码文件
-
内部类可直接访问外部类的私有成员,而不破坏封装
-
可以为外部类提供必要的内部功能组件
分类
-
成员内部类
-
在类的内部定义,与实例变量、实例方法同级别的类
-
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象、
Outer out = new Outer();
Inner in = out.new Inner(); -
当外部类、内部类存在重名属性时,会优先访问内部类属性
//内部类属性和外部类属性相同,用 外部类名字.this.属性
//如 Outer.this.name -
成员内部类不能定义静态成员
-
-
静态内部类(static 只有静态内部类才可以用)
-
不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
-
静态内部类:和外部类相同
-
调用外部类的属性
-
先创建外部类对象
-
再调用外部类对象的属性
-
-
-
局部内部类
-
定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法
-
局部内部类访问外部类当前方法中的局部变量时,因无法保障变量生命周期与自身相同,变量必须修饰为final
-
限制类的使用范围
-
-
匿名内部类
-
没有类名的局部内部类(特征与内部类相同)
-
必须继承一个父类或者实现一个接口
-
定义类、实现类、创建类对象的语法合并,只能创建一个该类的对象
-
优点:减少代码量
-
缺点:可读性差
-
Object类
-
超类、基类,所有类的直接或间接父类,位于继承树类的最顶层
-
任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
-
Object类中所定义的方法,是所有对象都具备的方法
-
Object类型可以存储任何对象
-
作为参数,可以接受任何对象
-
作为返回值,可以返回任何对象
-
Object类常用方法
-
getClass()
-
public final Class<?> getClass(){}
-
返回引用中存储的实际对象类型
-
应用: 通常用于判断两个引用中实际存储对象类型是否一致
-
-
hashCode()
方法-
public int hashCode(){}
-
返回该对象的哈希码值
-
哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
-
一般情况下相同对象返回相同哈希码
-
-
toStrig()
方法-
public String toString(){}
-
返回该对象的字符串表示(表现形式)
-
可以根据程序需求覆盖该方法 如:展示对象各个属性值
-
-
equals()
方法-
public boolean equals(Object obj){}
-
默认时限为
(this == obj)
,比较两个对象地址是否相同 -
可以进行覆盖,比较两个对象的内容是否相同
-
-
finalize()
方法 -
当对象被判定为垃圾对象时,由JVM自动调用此方法,以标记垃圾对象静茹回收队列
-
垃圾对象:没有有效引用指向此对象时,为垃圾对象
-
垃圾回收 :由GC销毁垃圾对象,释放数据存储空间
-
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
-
手动回收机制:使用
System.gc()
;通知JVM执行垃圾回收
包装类
定义
-
基本数据类型所对应的引用数据类型
-
包装类对应
-
byte --- Byte
-
short --- Short
-
int --- Integer
-
long --- Long
-
float --- Float
-
double --- Double
-
boolean --- Boolean
-
char --- Character
-
类型转换与装箱、拆箱
装箱
-
类型转换: 装箱,基本类型转换成引用类型的过程
int num = 10;
Integer integer = new Integer.valueOf(num);
//JDK1.5后可以自动,实质是一样的
Integer integer = num;
拆箱
-
类型转换:拆箱,引用类型转换成基本类
Integer integer = new Integer(10);
int num = integer.intValue();
//自动拆箱
int num = integer
基本类型和字符串之间转换
-
基本类型转换成字符串
-
使用+号
int num = 16;
String s1 = num + "";
-
-
使用
Integer
中的toString()
方法int num = 16;
String s2 = Integer.toString(num);
-
-
字符类型转换成基本类型
-
使用
Integer.parseIntXXX();
String str = "150";
int num = Integer.parseInt(str);
-
-
boolean
字符串类型转换成基本类型,”true“---->true 非”true“---->false-
使用
Boolean.parseBoolean();
String str = "true";
booolean b1 = Boolean.parseBoolean(str);
-
整数缓冲区
-
Java预先创建了256个常用的整数包装类型对象
-
在实际应用当中,对已创建的对象进行复用
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
//integer1 与 integer2不相等
//因为new的对象地址不一样
Integer integer3 = 100;
Integer integer4 = 100;
//integer3 与 integer4相等
//在-128~127区间内在堆空间里由一个数组保存了他们的对象
Integer integer5 = 200;
Integer integer6 = 200;
//integer5 与 integer6不相等
//因为堆空间中没有它们的对象,要重新创建,地址不同
String类
概述
-
字符串是常量,创建之后不可改变
-
字符串字面值存储在字符串池中,可以共享
-
String s ="hello";
产生一个对象,字符串池中存储 -
String s = new String("Hello");//产生两个对象,堆、池各存储一个
常用方法
-
public int length()
:返回字符串长度 -
public char charAt(int index)
:根据下标获取字符 -
public boolean contains(String str)
:判断当前字符串中是否包含str
-
public char[] toCharArray()
:将字符串转换成数组 -
public int indexOf(String str)
:查找str
首次出现的下标,存在,则返回该下标;不存在,则返回-1 -
public int lastIndexOf(String str)
:查找字符串在当前字符串中最后一次出现的下标索引 -
public String trim()
:去掉字符串前后的空格 -
public String toUpperCase()
:将小写转换大写 -
public String toLowerCase()
:将大写转换成小写 -
public boolean startsWith(String str)
:判断字符串是否以str
开头 -
public boolean endsWith(String str)
:判断字符串是否以str
结尾 -
public String replace(char oldChar,char newChar)
:将旧字符串替换成新字符串 -
public String[] spilt(String str)
根据str
做拆分String str = "java is the best programing ,language";
String array = str.spilt(" ");
for(String string : array){
System.out.println(string);
}//输出空格分离的数组
//换成
String array = str.spilt("[ ,]");
//输出空客或逗号分离的数组
//换成
String array = str.spilt("[ ,]+");
//输出多个空格或括号分离的数组 -
equals()
比较是否相等equalsIgnoreCase()
忽略大小写的比较 -
compareTo()
比较(在字检表里的顺序)String s1 = "abc";//a 97
String s2 = "xyz";//x 120
System.out.println(s1.compareTo(s2));
//输出-23
//先比第一个,如果相等比第二个,有结果停止
//像"abc" "abcxyz" 则比长度
String s1 = "abc";
String s2 = "abcxyz";
System.out.println(s1.compareTo(s2));
//输出-3
//两个一样0
可变字符串
-
StringBUffer
:可变长字符串,JDK1.0提供,运行效率满、线程安全 -
StringBuilder
:可变长字符串,JDK5.0提供,运行效率快、线程不安全 -
和
String
的区别: 比String
效率高,比String
节省内存 -
方法
StringBuffer s = new StringBuffer();
StringBuilder s = new StringBuilder();-
append()
追加s.append(字符串);
-
insert()
添加s.insert(位置,字符串)
-
replace()
替换s.replace(开始位置,结束位置,替换字符串)
-
delete()
删除s.delete(开始位置,结束位置)
-
清空 用
delete()
-
BigDecimal
类
-
位置:
java.math
包中 -
作用:精确计算浮点数
-
创建方式:
BigDecimal bd = new BigDecimal(1.0);
-
方法:
-
BigDecimal add(BigDecimal bd)
加 -
BigDecimal subtract(BigDecimal bd)
减 -
BigDecimal multiply(BigDecimal bd)
乘 -
BigDecimal divide(BigDecimal bd)
除-
除法
devide(BigDecimal bd,int scal,RoundingMode mode)
-
参数
scal
:指定精确到小数点后几位 -
参数
mode
:-
指定小数部分的取舍模式,通常采用四舍五入的模式
-
取值为
BigDecimal.ROUND_HALF_UP
-
-
-
Date类
-
Data表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法取代
-
时间单位
-
1秒 =1000毫秒
-
1毫秒 = 1000微秒
-
1微妙 = 1000纳秒
-
-
//创建对象
Date date = new Date();
//方法befoore after
boolean b = date1.before(date2);
boolean b = date2.after(date2);
//比较compareTo()
date1.compareTo(date2);
//是否相等equals()
boolean b = date1.equals(date2);
Calendar类
-
Calendar
提供了获取或设置各种日历字段的方法 -
构造方法
-
protected Calendar()
:由于修饰符是protected
,所以无法直接创建该对象
-
-
其他方法
-
使用默认时区和区域获取日历
static Calendar getInstance()
-
设置日历的年、月、日、时、分、秒
void set (int year,int month,int date,int hourofday,int minute,int second)
-
返回给定日历字段的值。字段比如年、月、日等
int get(int field)
-
用给定的Date设置此日历的时间。Date-Calendar
void setTime(Date date)
-
返回一个Date表示此日历的时间。Calendar-Date
Date getTime()
-
按照日历的规则,给指定字段添加或减少时间量
void add(int field,int amount)
-
毫秒为单位返回该日历的时间值
long getTimeMillies()
-
SimpleDateFormat
类
-
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类 -
进行格式化(日期---->文本)、解析(文本---->日期)
-
常用的时间模式字母
-
y------年
-
M------年中的月份
-
d------月中的天数
-
H------一天中的小时(0~23)
-
m------分钟
-
s------秒
-
S------毫秒
-
-
创建
SimpleDateFormat
对象 y 年 M 月SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
//创建Date
Date date = new Date();
//格式化date 把日期转换为字符串
String str = stf.format(date);
System.out.println(str);
//输出 2022/10/08 20-08-28
//解析 把字符串转换为日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date2 = sdf.parse("1990/05/01");
System.out.println(date2);
//输出 Tue May 01 00:00:00 CDT 1990
System类
-
System系统类,主要用于获取系统的属性数据和其它操作,构造方法私有的
-
方法:
-
复制数组
static void arraycopy(src,srcPos,dest,destPos,leng);
//src:源数组
//srcPos:从哪个位置开始复制
//dest:目标数组
//destPos:目标数组的位置
//length:复制的长度
/ -
获取当前系统时间,返回的是毫秒值
static long currentTimeMillis();
-
建议JVM赶快启动垃圾回收器回收垃圾
static void gc();
-
退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm
static void exit(int status);
-
-