JavaSE-18 常用工具类
学习要点
- Object类
- 枚举
- 包装类
- Math类
- Random类
- 字符串处理
- 日期时间
Object类
1 什么是Object类
- Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类。
- 数组也继承了Object类。
- 接口是不继承Object类的,Java语言规范Section 9.6.3.4——“Object类不作为接口的父类”。
- Java是单继承的。如果一个类没有显式继承某个类,则默认继承Object类。
2 Object类常用方法
|
方法 |
说明 |
|
public Object() |
Object类构造方法。为子类默认提供无参构造函数。 |
|
private static native void registerNatives() |
用native关键字修饰的函数表明该方法的实现不是在Java中去完成,而是由C/C++去完成,并被编译成了.dll,由Java去调用。将C/C++中的方法映射到Java中的native方法,实现方法命名的解耦。 |
|
protected native Object clone() throws CloneNotSupportedException |
clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。 |
|
public final native Class<?> getClass() |
getClass()也是一个native方法,返回的是此Object对象的类对象/运行时类对象Class<?>。效果与Object.class相同。 |
|
public Boolean equals(Object obj) |
equals用来判断对象的内容完全相同,此处的内容多指对象的特征/属性。==表示用来判断是否指向同一内存地址。 |
|
public native int hashCode() |
返回一个整形数值,表示该对象的哈希码值。一般重写equals方法的同时需要重写hashCode方法。相同哈希码值的对象,是两个相等的对象。 |
|
public String toString() |
返回该对象的字符串表示。对象的反射信息。 |
|
protected void finalize() |
Java垃圾回收机制方法。JVM准备对此对形象所占用的内存空间进行垃圾回收前,此方法将被调用。类似C++的析构函数。 |
|
wait() notify() notifyAll() |
和多线程相关的方法。 |
对象克隆clone()方法使用示例代码:
package com.etc.base; /*
* 对象克隆
* 1.自定义类实现Cloneable接口
* 2.自定义类实现自己的clone()方法
* 3.实现clone()方法时通过super.clone(),通过调用Object实现的clone()方法得到对象的副本,并返回该副本。
*/ /** 地址信息类 */
class Address {
String detail; public Address(String detail) {
this.detail = detail;
}
} /** 用户信息类:实现了克隆接口 */
class User implements Cloneable {
int age;
Address address; public User(int age) {
this.age = age;
address = new Address("北京东城");
} /** 重写克隆方法 */
public User clone() throws CloneNotSupportedException {
return (User) super.clone(); } } public class ObjectTest { public static void main(String[] args) throws CloneNotSupportedException {
User u1 = new User(30);
User u2 = u1.clone();//实现了浅克隆:User对象中的Address没有实现克隆(如果实现,则为深度克隆)
// 判断u1和u2是否相同
System.out.println(u1 == u2);//结果为false
// 判断u1和u2的address对象是否一致
System.out.println(u1.address == u2.address);//结果为true(未实现深度克隆) } }
枚举
1 语法
[Modifier] enum enumName{
enumContantName1[,enumConstantName2...[;]]
//[field,method]
}
枚举指由一组固定的常量组成的类型
2 使用枚举的好处
类型安全、易于输入、代码清晰
3 示例代码
/**性别枚举*/
public enum Gender {
Male, Female
}
/**枚举测试类*/
public class Person {
private Gender sex;
public Gender getSex() {
return sex;
}
public void setSex(Gender sex) {
this.sex = sex;
}
}
/**测试类*/
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.setSex("男");//类型安全
p.setSex(Gender.Male);
}
}
包装类
1 概念
包装类是将基本类型封装到一个类中。该类包含属性和方法,方便对象操作。
包装类位于java.lang包中。
2 包装类类图
3 基本数据类型转换为包装类
Integer intValue = new Integer(21);
或Integer intValue = new Integer("21");
Integer intValue = Integer.valueOf("21");
4 包装类转换成基本类型
Integer integerId=new Integer(25); int intId=integerId.intValue();
5 基本类型和包装类的自动转换
Integer intObject = 5; int intValue = intObject;
注意:包装类并不是用来取代基本类型的。
Math类
1 类说明
java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数) 和PI(圆周率)
2 示例代码
Math.abs(-3.5); //返回3.5 Math.max(2.5, 90.5);//返回90.5 int random = (int) (Math.random() * 10); //生成一个0-9之间的随机数
3 上机练习
需求说明
编码实现双色球功能。
分析
双色球规则红球33选6,蓝球16选1,不允许重复。
使用Math类的random()方法在1到33内随机产生6个红球号码,每产生一个判断是否已经在数组中存在 ,不存在则保存于数组,否则重选。
从1到16间随机产生一个蓝球号码。
效果示意图

Random类
1 Java生成随机数的几种方式
- Math. random()方法产生随机数。
- Random类产生随机数。
- System.currentTimeMillis(),返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,通过毫秒数对一些数进行取模,获得相应随机数。Random类默认构造方法就是采用这种方式获得随机数。
2 Random类产生随机数
Random rand=new Random(); //创建一个Random对象
for(int i=0;i<20;i++){//随机生成20个随机整数,并显示
int num=rand.nextInt(10);//返回下一个伪随机数(0-10之间),整型的
System.out.println("第"+(i+1)+"个随机数是:"+num);
}
注意:用同一个种子值来初始化两个Random 对象,然后用每个对象调用相同的方法,得到的随机数也是相同的。
Random random1 = new Random(100);
Random random2 = new Random(100);

ThreadLocalRandom类
用于并发环境下生成随机数,可以减少线程间的竞争,提高系统线程安全性。
示例代码:
// 获取ThreadLocalRandom实例
ThreadLocalRandom random = ThreadLocalRandom.current();
// 生成一个2-99之间的随机整数
int number1 = random.nextInt(2, 99);
// 生成一个2.0-99.0之间的随机浮点数。根据某个种子数值计算出来的伪随机数。
double number2 = random.nextDouble(2.0, 99.0);
字符串处理
1 String类
基本概念
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量:它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
String对象存储字符串
String str1 = "Hello World";
String str2 = new String();//str1==str2?
String str3 = new String("Hello World");//str3==str1?
String类常用操作
1.字符串比较
equals()方法:检查组成字符串内容的字符是否完全一致。

“==”:判断两个字符串在内存中的首地址,即判断是否是同一个字符串对象。

2.字符串连接
“+”连接:
System.out.println("金立高级手机:"+888+"元/部");
concat()方法连接:
String s = new String("你好,");
String name = new String("詹姆斯·高斯林!");
String sentence = s.concat(name);
System.out.println(sentence);
3.字符串提取
|
方法名 |
说明 |
|
public int indexOf(int ch) |
搜索第一个出现的字符ch(或字符串value),返回索引号 |
|
public int indexOf(String value) |
|
|
public int lastIndexOf(int ch) |
搜索最后一个出现的字符ch(或字符串value),返回索引号 |
|
public int lastIndexOf(String value) |
|
|
public String substring(int index) |
提取从位置索引开始的字符串部分 |
|
public String substring (int beginindex, int endindex) |
提取beginindex和endindex之间的字符串部分 |
|
public String trim() |
返回一个前后不含任何空格的调用字符串的副本 |
注意:字符串首字符位置索引为0。
上机练习
需求描述:判断.java文件名是否正确,判断邮箱格式是否正确

分析:
l 合法的文件名应该以.java结尾
l 合法的邮箱名中至少要包含“@”和“.”, 并检查“@”是否在“.”之前。
字符串拆分
String类提供了split()方法,将一个字符串分割为子字符串,结果作为字符串数组返回。
同时,concat()方法支持把指定字符附加到字符串末尾。
上机练习
把每句话中间带空格的这段话“如果爱太荒凉 我陪你梦一场 赎回你所有泪光 这一路有多远 这三世有多长 执手到地老天荒”拆分成一句一行输出。
再把这句话按照如下格式输出:“如果爱太荒凉-我陪你梦一场-赎回你所有泪光-这一路有多远-这三世有多长-执手到地老天荒”
2 StringBuffer类
定义
带缓冲区的String类,支持动态调整字符串长度,是String的增强版。线程安全类。
语法格式
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer("cnetc");
如何使用
sb.toString(); //转化为String类型
sb.append ("**"); //追加字符串,支持任何类型的值
示例代码
/* 将一个数字字符串转换成逗号分隔的数字串,
即从右边开始每三个数字用逗号分隔 */
Scanner input = new Scanner(System.in);
// 接收数字串,存放于StringBuffer类型的对象中
System.out.print("请输入一串数字: ");
String nums = input.next();
StringBuffer str = new StringBuffer(nums);
// 从后往前每隔三位添加逗号
for (int i = str.length() - 3; i > 0; i = i - 3) {
str.insert(i, ',');
}
System.out.print(str);
3 StringBuilder类
该类被设计用作 StringBuffer 的一个简易替换,非线程安全类,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
日期时间
1 Date类
类 Date 表示特定的瞬间,精确到毫秒。
时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
Date类的gettime()获得时间戳:
Date date = new Date();
long times=date.getTime();
SimpleDateFormat日期格式化:把时间戳转换成指定格式的日期输出
Date date = new Date();
long times = date.getTime();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 定制日期格式
String now = formater.format(times); // 日期转换成日期字符串输出
System.out.println(now);
2 Timestamp
常用构造方法:Timestamp(long time)
使用毫秒时间值构造 Timestamp 对象。
Date date = new Date();
long times = date.getTime();
Timestamp tst=new Timestamp(times);
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 定制日期格式
String now = formater.format(tst); // 日期转换成日期字符串输出
System.out.println(now);
3 Calendar类
Calendar 类是一个抽象类,用于设置和获取日期/时间数据的特定部分。
示例代码:
Calendar t = Calendar.getInstance();
System.out.println("今天是" + t.get(Calendar.YEAR) + "年" + (t.get(Calendar.MONTH) + 1) + "月" + t.get(Calendar.DAY_OF_MONTH) + "日");
System.out.println("今天是星期" + (t.get(Calendar.DAY_OF_WEEK) - 1));
4 上机练习
需求
计算2017年5月6日是一年中的第几星期。
分析
使用set方法设置Calendar的日期。
使用Calendar类的get()方法获得WEEK_OF_YEAR字段。
JavaSE-18 常用工具类的更多相关文章
- Apache Commons 常用工具类整理
其实一直都在使用常用工具类,只是从没去整理过,今天空了把一些常用的整理一下吧 怎么使用的一看就明白,另外还有注释,最后的使用pom引入的jar包 public class ApacheCommonsT ...
- PHP常用工具类
<?php namespace isslib\Util; use think\Config; /** * 常用工具类 * User: xaxiong * Date: 2016/12/19 * T ...
- javascript常用工具类整理(copy)
JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串 return Object.prototype.to ...
- commons-lang3-3.2.jar中的常用工具类的使用
这个包中的很多工具类可以简化我们的操作,在这里简单的研究其中的几个工具类的使用. 1.StringUtils工具类 可以判断是否是空串,是否为null,默认值设置等操作: /** * StringUt ...
- Maven基础&&Spring框架阶段常用工具类整理
常用工具类 1.密码加密工具类: package com.itheima.utils; import java.security.MessageDigest; import sun.misc.BASE ...
- js常用工具类.
一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...
- IOS开发--常用工具类收集整理(Objective-C)(持续更新)
前言:整理和收集了IOS项目开发常用的工具类,最后也给出了源码下载链接. 这些可复用的工具,一定会给你实际项目开发工作锦上添花,会给你带来大大的工作效率. 重复造轮子的事情,除却自我多练习编码之外,就 ...
- Android 常用工具类之SPUtil,可以修改默认sp文件的路径
参考: 1. 利用Java反射机制改变SharedPreferences存储路径 Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...
- 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类
快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...
- javaweb常用工具类及配置文件备份
Javaweb常用工具类及配置文件备份 做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /* * hibernate获取sessi ...
随机推荐
- URAL2104. Game with a Strip(博弈)
There is a strip 1 × n with two sides. Each square of the strip (their total amount is 2n, n squares ...
- BZOJ2049:Cave 洞穴勘测 (LCT入门)
辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可 ...
- Spring-AOP解析
策略模式:选择动态代理还是CGLIB方式: 1.这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 2.AOP基本上是通过代理机制实现的 3.写好验证用户的代码,然 ...
- python标准输入,标准输出,标准错误
sys.stdout 与 print 当我们在 Python 中打印对象调用 print obj 时候,事实上是调用了 sys.stdout.write(obj+'\n') print 将你需要的内容 ...
- bzoj3090
树形dp 有一个比较明显的dp状态是dp[i][j]表示当前i节点的子树已经满足且i剩下j元钱的最小操作次数,这样复杂度比较高状态数已经有O(n*x)的了,转移再来x,肯定不行. 我们考虑把状态和dp ...
- python 高阶函数三 filter()和sorted()
一.filter()函数 filter()接收一个函数和一个序列.filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. >>> ...
- bzoj 2733: [HNOI2012]永无乡【并查集+权值线段树】
bzoj上数组开大会T-- 本来想用set瞎搞的,想了想发现不行 总之就是并查集,每个点开一个动态开点的权值线段树,然后合并的时候把值并在根上,询问的时候找出在根的线段树里找出k小值,看看这个值属于哪 ...
- bzoj 1178: [Apio2009]CONVENTION会议中心(少见做法掉落!)【贪心+二分】
数组若干+手动二分一个的算法,bzoj rank8 ===============================废话分割线=================================== 我我 ...
- 文件cp功能
#include<stdio.h> #include<unistd.h> #include<fcntl.h> #include<string.h> in ...
- CAD中的相对坐标和绝对坐标
绝对坐标就是你作图的整个界限的原点,也就是CAD系统默认的原点坐标. 相对坐标就是相对于当前的点的坐标. 这两种坐标都有,可以根据习惯和需要自己看使用哪种. 一.绝对坐标 ①笛卡尔坐标(X,Y,Z) ...

