常用类
- 数组:查重 排序 复制 查找
- 内部类:成员内部类–和类中的属性,方法同级别 ,在内部类中不能声明static成员
静态内部类–可以声明static成员
局部内部类–在外部类的方法中生命的类,仅在方法内部使用
匿名内部类–相当于接口的实现类
public interface Usb{
void service();
}
main(){
Usb mouse=new Usb(){
//匿名内部类,在声明的同时,直接创建对象,相当于此类实现Usb接口
public void service(){
}
}
}
- Object
- getClass() 返回值类型是Class 获取当前对象的类型
- hashCode() java根据哈希算法得到的一个哈希值 是整数,同一个对象或字符串的哈希值是固定的,不同对象的哈希值可能会重复 重写haseHode()
- equals()比较引用类性的值是否相等
案例–声明对象数组,数组中存放不同的对象(地址不同 并不代表对象不同,通过重写equals 属性值相同则对象相同) - toString()new出的对象 对象里存储的默认是堆空间的地址,如果重写了toString(),获取对象的时候,就将获取到toString里面的内容
- finalize() 释放对象所占用的堆内存空间, 通过System.gc()
【说明】当调用System.gc()方法后,并不是立即就清理内存,根据垃圾回收算法来判断何时
包装类
8个基本类型 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 boolan 1
例如:集合
byte | Byte |
---|---|
showt | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
【说明】基本类型和包装类类型之间自动转换
包装类的作用:
- 让基本类型作为引用类型来使用
- 类中封装了一些方法,例如类型转换的方法
装箱:把子类类型转换父类类型,把基本类型转换为引用类型 自动完成
拆箱:把父类类型转换为子类类型(强转),把引用类型转为基本类型(自动完成)
package com.qf.pro2103.day15;
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1=10;
Integer num2=num1; //装箱,基本类型int 自动转换为引用类型Integer
int numm3=num2; //拆箱,引用类型Integer,自动转为基本类型int
}
}
```java
package com.qf.pro2103.day15;
public class Demo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//把字符串转换为数值类型
String strAge="20";
//把字符串转换为整形后才能做算术计算
int intAge=Integer.valueOf(strAge); //valueOf 转换后是Integer,然后 拆箱
int intAge2=Integer.parseInt(strAge);//parseInt 直接转换为int
String strPi="3.14";
float pi=Float.parseFloat(strPi);
System.out.println(intAge);
System.out.println(intAge2);
}
}
【面试题】
public class Demo4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//声明了两个引用类型变量
Integer num1=126;
Integer num2=126;
System.out.println(num1==num2); //true
Integer num3=361;
Integer num4=361;
System.out.println(num3==num4); //false
//面试题问:输出结果是什么? 为什么
//由于整型值比较常用,所以java默认缓存了256个整数值
//-128~127之间的值,所以当使用此范围的数值时,共用缓存区地址中的数值
//如果超出范围,那么将独立开辟空间存储
}
3.String 重点
//方法一
String name="xxx";
//方法二
String name1=new String("xxx");
String:不可变字符串,不能改变里面的值
本质:是一个final修饰的char类型的数组,随所以字符串一旦赋值不能改变
private final char value[];
//使用方式1:
String name1="xxx1";
//使用方式2:
String name2=new String("xxx2");
//为什么没有输出应用类型的地址?
//因为重写了toString方法
System.out.println(name1);
System.out.println(name2);
//改变字符串的值,改变的并不是原字符串的值
//新开辟方法区中常量池的空间,存放改变后的字符串的值
name1=name1+",生日快乐!";
System.out.println(name1);
public class Demo7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String name="xxx";
//每次存放字符串的时候,到常量池中查找,此字符串值是否存在
//如果有,则直接复用其地址
String name2="xxx";
System.out.println(name==name2);
System.out.println(name.equals(name2));
name2=name2+",生日快乐!";
System.out.println(name==name2);
}
字符串重用方法:
- length() 字符串中字符的个数
- charAt(索引) 返回的是字符串中对应索引位置的字符
- contains(字符串) 返回boolean值,判断参数字符串是否在字符串中,如果在,返回true,不在,返回false
- toCharArray() 把字符串转换为字符型数组
- indexOf(参数字符串) 查找参数字符串在字符串中首次出现的索引位置,如果不在返回-1
- trim() 去除字符串两端的空格,返回是去除两端空格后的字符串
- replace(“要替换的内容”,“替换成的内容”) 把字符串中参数1的部分,用参数2给替换掉
- toUpperCase() 把字符串中的小写字母转为大写
- toLowerCase() 把字符串中的大写字母转为小写
- endsWith(参数) 判断字符串是否以参数结尾,如果是返回true,否则返回false
- split(分割标记) 把字符串按照参数进行分割,返回分割后的数组
- substring(beginindex) 从字符串的参数所指的索引位置开始截取,一直截取到最后,返回截取到的字符串
- substring(beginindex,endindex) 从字符串的参数1的索引位置开始截取,截取到参数2所对应的索引位置,但是不包含参数2的位置
【说明】String是不可变字符串,当频繁改变字符串值时,不建议使用String ,浪费内存空间
使用 StringBuffer 或 StringBuilder,可变字符串
StringBuffer和StringBuilder的使用方式是相同的
区别:StringBuffer:线程安全,但是效率较低
StringBuilder:非线程安全,但是效率高
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sb=new StringBuffer("xxx");
//给上面的字符串拼接值
sb.append(",你在干什么?"); //追加
System.out.println(sb);
//参数1:插入的索引位置
//参数2:插入的内容
sb.insert(0, "嗨!"); //插入
System.out.println(sb);
sb.insert(5,",正在上课呢");
System.out.println(sb);
//sb.deleteCharAt(0); //删除指定索引位置的字符
sb.delete(0, 2); //从参数1的位置开始删除,删除到参数2的位置,但是不包含参数2
System.out.println(sb);
}
4.BigDecimal
基本类型中的float,double 存放的是近似值,不能用作价钱来使用
BigDecimal是精确存储及计算的小数类型
import java.math.BigDecimal;
public class Demo11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//精确计算
int num=10;
BigDecimal price=new BigDecimal("0.5");
BigDecimal totalPrice=price.multiply(new BigDecimal(num));
System.out.println(totalPrice);
BigDecimal first=new BigDecimal("1.0");
BigDecimal second=new BigDecimal("0.9");
BigDecimal add=first.add(second); //加法
BigDecimal sub=first.subtract(second);//减法
BigDecimal mul=first.multiply(second); //乘法
//参数1:除数
//参数2:保留的小数位数
//参数3:如何保留,通常四舍五入
BigDecimal div=first.divide(second,3,BigDecimal.ROUND_HALF_UP);//除法
System.out.println(add);
System.out.println(sub);
System.out.println(mul);
System.out.println(div);
}
}
【说明】在计算时,小数要以字符串形式参与,这样是精确数
在除法计算时,遇到除不开的情况需要指定,保留的小数位数,及如何取舍
5.日期时间
Date 默认是西方的时间格式,不符合中国的时间认知格式,需要进行格式转换
SimplDateFormat 对时间进行格式化
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
//得到一个符合中国时间格式的字符串时间
public static String getDateTime(){
//1、先创建时间对象
Date date=new Date();
//2、创建格式化对象
//在参数中指定时间格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//3、对时间进行格式化
String str=sdf.format(date);
return str;
}
}
import java.util.Date;
import com.qf.pro2103.util.DateUtil;
public class Demo12 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date dt=new Date();
//输出当前时间
System.out.println(dt);
//变成 年-月-日 小时:分:秒
String str=DateUtil.getDateTime();
System.out.println(str);
}
}
如果要获取当前时间中的一部分,使用日历对象
import java.util.Calendar;
public class Demo13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//getInstance() 得到日历对象,在此方法中new出的日历对象
Calendar calendar=Calendar.getInstance();
//日历中默认是当前时间
//通过日历对象来获取信息
int year=calendar.get(Calendar.YEAR);
System.out.println(year);
int month=calendar.get(Calendar.MONTH);
//月份:0-11
System.out.println(month+1);
//日期
int day=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//小时
int hour=calendar.get(Calendar.HOUR_OF_DAY); //24小时制 HOUR 12小时制
System.out.println(hour);
//分钟
int minute=calendar.get(Calendar.MINUTE);
System.out.println(minute);
//秒
int second =calendar.get(Calendar.SECOND);
System.out.println(second);
}
}
通过修改日历来设置时间 增加、减少时间
import java.util.Calendar;
public class Demo14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar calendar=Calendar.getInstance();
//设置日期
// calendar.set(Calendar.DAY_OF_MONTH, 5);
//
// System.out.println(calendar.getTime());
//当前时间两个小时后的时间
calendar.add(Calendar.HOUR_OF_DAY, 2);
}
}