Java常用类

内部类

成员内部类

1.在类的内部定义,与实例变量、实例方法同级别的类

2.外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。

3.当外部类、内部类存在重名的属性时,会优先访问内部类属性

4.成员内部类不能定义静态成员,但是可以定义静态常量。

Outer outer = new Outer();

Outer.Inner inner = outer.new Inner;

静态内部类

1.与正常的外部类同级别

2.不依赖外部类对象,可直接创建或通过类名访问

3.只能直接访问外部类的静态成员(实例成员需实例化外部类对象)

Outer.Inner inner = new Oueter.Inner();

局部内部类

1.定义在外部类方法中,作用范围和创建对象仅限于当前的方法

2.如果要使用的话,需要在定义的这个方法里面,创建这个局部内部类的对象

匿名内部类

1.没有类名的局部内部类(一切特征都与局部内部类相同)

2.必须继承一个父类或者实现一个接口

Object类

Object:所有类的直接或间接父类,位于继承树的最顶层

Object类常用方法

getClass()方法返回值为Class类型

返回引用中存储的对象的实际对象类型

Class class1 = sutdent1.getClass();

Class class2 = sutdent2.getClass();

if(class1==class2){

​ 输出:student1和student2属于同一个类型

}

hashCode()方法 返回值为int类型

获取对象的的哈希码值(可以看成这个对象的内存地址)

toString()方法 返回值为String类型

返回该对象的字符串表示(表现形式)

equals()方法 返回值为boolean类型

比较两个对象的地址

finalize()方法

1.当对象被判定为垃圾对象时,由JVM自动调用此方法,用一标记垃圾对象,进入回收队列。

2.垃圾对象:没有有效引用指向此对象,为垃圾对象

3.垃圾回收:又GC销毁垃圾对象,释放数据存储空间

4.自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象

5.手动回收机制:使用 System.gc;通知JVM进行垃圾回收

包装类

1.装箱与拆箱:

​ 装箱:将基本类型转为包装类型;使用对应的类进行转换。比如double使用Double,int使用Integer。jdk1.5之后可直接进行转换,不用使用new关键字

​ 拆箱:与装箱相反

2.基本类型和字符串转换

​ 使用xxx的包装类.parsexxx()方法把xxx类型的参数传递进()里面,再使用想得到的数据类型参数进行接收。比如:一个String类型的str参数要转换为int类型:

int str1 = Integer.parseInt(str)

​ 将基本类型转换为字符串使用xxx的包装类.toString()方法

比如一个int类型的num参数转换为String类型:

String str =Integer.toString(num)

boolean类型特殊,只要非“ture”,都会变成false

Integer缓冲区

  • Java预先创建了256个常用的证书包装类型对象

  • 在实际应用当中,对已创建的对象进行复用

psvm(String[] args){ // 面试题

Integer integer1 = new Integer(100);

Integer integer2 = new Integer(100);

sout(integer1 == integer2); // false

Integer integer3 = new Integer(100);// 自动装箱 //

相当于调用 Integer.valueOf(100);

Integer integer4 = new Integer(100); sout(integer3 == integer4); // true

Integer integer5 = new Integer(200);// 自动装箱

Integer integer6 = new Integer(200);

sout(integer5 == integer6); // false

// 因为缓存区数组 [-128, 127] 在这之内地址一样}

// 因为缓存区数组 [-128, 127] 在这之内地址一样

String 类

字符串是常量,创建之后不可改变

字符串字面值存储在字符串池中,可以共享

String s = "Hello“产生一个对象,字符串池中存储

String s = new String("Hello"); 产生两个对象,堆、池各一个

// 1. length(); 返回字符串长度

// 2. charAt(int index); 返回某个位置的字符

// 3. contains(String str); 判断是否包含某个字符串

String content = "java是最好的语言, java no1";

sout(content.length());

// 10sout(content.charAt(content.length() - 1)); // 言

sout(content.contains("java")); // true

// 4. toCharArray(); 返回字符串对应数组

// 5. indexOf(); 返回子字符串首次出现的位置

// 6. lastIndexOf(); 返回字符串最后一次出现的位置

sout(content.toCharArray());

sout(content.indexOf"java")); // 0

sout(content.indexOf("java", 4)); // 从索引4开始找 返回12

sout(content.lastIndexOf("java")); // 12

// 7. trim(); //去掉字符串前后空格

// 8. toUpperCase(); toLowerCase(); 转换大小写

// 9. endWith(str); startWith(str); 判断是否以str 结尾、开头

String ct = " hello world ";
sout(ct.trim()); // "hello world"

sout(ct.toUpperCase()); // HELLO WORLD

sout(ct.toLowerCase()); // hello world

sout(ct.endWith("world")); // true

sout(ct.startWith("hello")) // true

// 10. replace(char old, char new); 用心的字符或字符串替换旧的字符或字符串

// 11. split(); 对字符串拆分

sout(content.replace("java", "php")); // php是最好的语言, php no1

String say = "java is the best language";
String[] arr = arr.say.split(" "); 
// "[ ,]+" 表示空格 逗号切分 +号表示切分可以多个 比如多个空格sout(arr.length); 
// 5for(String string : arr){
 sout(string);
}
// 打印出
 //java//is//the //best//language

// 补充两个equals/compareTo();
比较大小String s1 = "hello";String s2 = "HELLO";sout(s1.equalsIgnoreCase(s2));
// 忽略大小写比较true

// compareTo(); 两字符不同时比较字符字典序的ascii码
// 字符相同时比较长度 返回差值

案例演示

需求:

1.已知String str = "this is a text";

2.将str中的单词单独获取

3.将str中的text替换成practice

4.在text前面插入一个easy

5.将每个单词的首字母改为大写

psvm(String[] args){

String str = "this is a text";

 2. String[] arr = str.split(" ");

for(String s : arr){​ 
sout(s);

}

 3. String str2 = str.replace("text", "practice");

 4. String str3 = str.replace("text", "easy text");

 5. for(int i = 0; i < arr.length; i ++){​

char first = arr[i].charAt(0);​

char upperfirst = Character.toUpperCase(first);​

String new = upperfirst + arr[i].substring(1);

}}

可变字符串

StringBuffer : 可变长字符串,运行效率慢、线程安全

StringBuilder : 可边长字符串、运行快、线程不安全

效率都比String高且节省内存

psvm(String[] args){

// StringBuffer 和 StringBuilder 用法一致

StringBuffer sb = new StringBuffer();

// 1. append(); 追加 sb.append("java no1");

// 2. insert(); 添加、插入 sb.insert(0, "在第一个位置插入");

// 3.replace(); 替换 sb.replace(0, 9, str); // 左闭右开

// 4. delete(); 删除 sb.delete(0, 5); // 左闭右开

// 5. 清空 sb.delete(0, sb.length());}

BigDecimal类

位置 java.math包中

作用 精确计算浮点数

创建方式BigDecimal bd = new BigDecimal("1.0");

BigDecimal bd1 = new BigDecimal("1.0"); // 需用字符串
BigDecimal bd2 = new BigDecimal("0.9");
// 减法
BigDecimal r1 = bd1.subtract(bd2);
sout(r1); // 0.1
​
// 加法
BigDecimal r2 = bd1.add(bd2);
​
//乘法
BigDecimal r3 = bd1.multiply(bd2);
​
// 除法
BigDecimal r4 = new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"), x, BigDecimal.ROUND_HALF_UP); 
//除不尽时 x填保留位数 后面为四舍五入之意
​
​

Date类

Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代

时间单位:1s = 1,000ms = 1,000,000 μs = 1,000,000,000 = ns

psvm(String[] args){

// 1 创建Date对象 Date date1 = new Date();

sout(date1.toString());

//WED Sept 02 22:25:23 CST 2020 sout(date1.toLocaleString()); // 已过时 但也能用 2020-9-2

// 创建昨天的 Date date2 = new Date(date1.getTime() - (606024*1000)); sout(date2.toLocaleString());

// 2 方法after before boolean b1 = date.after(date2); sout(b1); //true boolean b2 = date1.before(date2); sout(b2); //false

// 比较compareTo(); int d = date1.compareTo(date1); sout(d); // 多的为1 少的为 -1

// 比较是否相等 equals() boolean b3 = date1.equals(date2); sout(b3); // false}

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)返回给定日历字段的值。字段比如年、月、日
void setTime(Date date)用给定的date设置此日历时间
Date getTime()返回一个date表示此日历的时间
void add(int field, int amount)按照日历的规则,给指定字段添加或减少时间量
long getTimeInMilles()毫秒为单位返回该日历的时间值
psvm(String[] args){

// 1. 创建 Calendar 对象 Calendar calendar = Calendar.getInstance();

sout(calendar.getTime().toLocaleString());

// 2. 获取时间信息

// 获取年 int year = calendar.get(Calendar.YEAR);

// 获取月 从 0 - 11 int month = calendar.get(Calendar.MONTH);

// 日 int month = calendar.get(Calendar.DAY_OF_MONTH);

// 小时 int hour = calendar.get(Calendar.HOUR_OF_DAY);

// 分钟 int minute = calendar.get(Calendar.MINUTE);

// 秒 int second = calendar.get(Calendar.SECOND);

// 3. 修改时间 Calendar calendar2 = Calendar.getInstance(); 

calendar2.set(Calendar.DAY_OF_MONTH, x);

// 4. add修改时间 calendar2.add(Calendar.HOUR, x);

// x为正就加 负就减

// 5. 补充方法 int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);

// 月数最大天数 int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);}

SimpleDateFormat类

SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类

进行格式化(日期→文本)、解析(文本→日期)

常用的时间模式字母

字母日期或时间示例
y2019
08年中月份08
d月中天数10
H一天中小时(0-23)22
m分钟16
s59
S毫秒356
psvm(String[] args){

// 1. 创建对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");

// 2. 创建Date Date date = new Date();

// 格式化date(日期→字符串) String str = sdf.format(date); sout(str);

// 解析(字符串→时间) Date date2 = sdf.parse("1948/03/12");

sout(date2);

}

System类

主要用于获取系统的属性数据和其他操作,构造方法私有的

方法名说明
static void arraycopy(...)复制数组
static long currentTimeMillis();获取当前系统时间,返回毫秒值
static void gc();建议jvm赶快启动垃圾回收期器回收垃圾
static void exit(int status);退出jvm 如果参数是0表示正常退出jvm 非0表示异常退出
psvm(String[] args){

//arraycopy 复制

//src-原数组 srcPos-从哪个位置开始复制0

dest-目标数组

destPos-目标数组的位置

length-复制的长度

int[] arr = {20, 18, 39, 3};

int[] dest = new int [4];

System.arraycopy(src, srcPos, dest, destPos, length);

sout(arr, 4, dest, 4, 4)​

// Arrays.copyOf(original, newLength)

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值